def test_attendance(self):
        cfsf = OrganizationFactory(name="Code for San Francisco")
        url = "https://www.codeforamerica.org/api/organizations/Code-for-San-Francisco"
        cfsf_att = AttendanceFactory(organization_name="Code for San Francisco", organization_url=url)
        oakland = OrganizationFactory(name="Open Oakland")
        url = "https://www.codeforamerica.org/api/organizations/Open-Oakland"
        oakland_att = AttendanceFactory(organization_name="Open Oakland", organization_url=url)
        db.session.commit()

        response = self.app.get('/api/attendance')
        self.assertEquals(response.status_code, 200)
        response = json.loads(response.data)
        self.assertIsInstance(response, dict)
        self.assertTrue("total" in response.keys())
        self.assertTrue("weekly" in response.keys())

        # Check amounts
        attendance = Attendance.query.all()
        total = 0
        weekly = {}
        for att in attendance:
            total += att.total
            for week in att.weekly.keys():
                if week in weekly.keys():
                    weekly[week] += att.weekly[week]
                else:
                    weekly[week] = att.weekly[week]
        self.assertEqual(response["total"],total)
        self.assertEqual(response["weekly"],weekly)
Beispiel #2
0
    def test_organization_query_filter(self):
        '''
        Test that organization query params work as expected.
        '''
        OrganizationFactory(name=u'Brigade Organization', type=u'Brigade')
        OrganizationFactory(name=u'Bayamon Organization', type=u'Brigade', city=u'Bayamon, PR')
        OrganizationFactory(name=u'Meetup Organization', type=u'Meetup')

        db.session.commit()

        response = self.app.get('/api/organizations?type=Brigade')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 2)
        self.assertEqual(response['objects'][0]['name'], u'Brigade Organization')
        self.assertEqual(response['objects'][1]['name'], u'Bayamon Organization')

        response = self.app.get('/api/organizations?type=Brigade&city=Bayamon,%20PR')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['name'], u'Bayamon Organization')

        response = self.app.get('/api/organizations?type=SomeType')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 0)
Beispiel #3
0
    def test_all_past_events(self):
        '''
        Test the /events/past_events end point.
        '''
        # World Cup teams
        organization = OrganizationFactory(name=u'USA USA USA', type=u'Code for All')
        db.session.flush()

        # Create multiple events, some in the future, one in the past
        EventFactory(organization_name=organization.name, name=u'Past Event', start_time_notz=datetime.now() - timedelta(1000))
        EventFactory(organization_name=organization.name, name=u'Event One', start_time_notz=datetime.now() + timedelta(10))
        db.session.flush()

        # World Cup teams
        organization = OrganizationFactory(name=u'Brazil')
        db.session.flush()

        # Create multiple events, some in the future, one in the past
        EventFactory(organization_name=organization.name, name=u'Past Event', start_time_notz=datetime.now() - timedelta(2000))
        db.session.flush()

        # World Cup teams
        organization = OrganizationFactory(name=u'GER', type=u'Code for All')
        db.session.flush()

        # Create multiple events, some in the future, one in the past
        EventFactory(organization_name=organization.name, name=u'Past Event', start_time_notz=datetime.now() - timedelta(3000))
        EventFactory(organization_name=organization.name, name=u'Event Three', start_time_notz=datetime.now() + timedelta(30))
        db.session.commit()

        response = self.app.get('/api/events/past_events?organization_type=Code for All')
        response_json = json.loads(response.data)

        self.assertEqual(len(response_json['objects']), 2)
Beispiel #4
0
    def test_issues_query_filter(self):
        org1 = OrganizationFactory(name=u'Code for Africa',
                                   type=u'Code for All')
        org2 = OrganizationFactory(name=u'Code for San Francisco',
                                   type=u'Brigade')
        proj = ProjectFactory(type=u'web',
                              organization_name=u'Code for Africa')
        another_proj = ProjectFactory(
            type=u'mobile', organization_name=u'Code for San Francisco')
        db.session.flush()
        awesome_issue = IssueFactory(title=u'Awesome issue',
                                     project_id=proj.id)
        sad_issue = IssueFactory(title=u'Sad issue',
                                 body=u'learning swift is sad',
                                 project_id=another_proj.id)
        db.session.commit()

        # Make sure total number of stories is 2
        response = self.app.get('/api/issues')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 2)

        # Filter by title should return only 1
        response = self.app.get('/api/issues?title=awesome')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['title'], u'Awesome issue')

        # Filter by type should return only 1
        response = self.app.get('/api/issues?body=swift')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['title'], u'Sad issue')

        # Filter by deep searching project type should return 1
        response = self.app.get('/api/issues?project_type=web')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['title'], u'Awesome issue')

        # Filter by deep searching organization type should return 1
        response = self.app.get('/api/issues?organization_type=Code for All')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['title'], u'Awesome issue')

        # Filter by deep searching organization type should return 1
        response = self.app.get('/api/issues?organization_type=Brigade')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['title'], u'Sad issue')
 def test_org_search_order_by_relevance(self):
     OrganizationFactory(name=u'Code for San Francisco',
                         last_updated=time.time() - 10)
     OrganizationFactory(name=u'Code for Binghampton',
                         last_updated=time.time() - 1)
     db.session.commit()
     response = self.app.get('/api/organizations?q=San Francisco')
     response = json.loads(response.data)
     assert isinstance(response['total'], int)
     assert isinstance(response['objects'], list)
     self.assertEqual(response['objects'][0]['name'],
                      'Code for San Francisco')
    def test_current_projects(self):
        """
        Show three most recently updated github projects
        """
        organization = OrganizationFactory(name=u'Code for San Francisco')
        db.session.flush()

        ProjectFactory(organization_name=organization.name,
                       name=u'Project 1',
                       last_updated='Mon, 01 Jan 2010 00:00:00 GMT')
        ProjectFactory(organization_name=organization.name,
                       name=u'Project 2',
                       last_updated='Tue, 01 Jan 2011 00:00:00 GMT')
        ProjectFactory(organization_name=organization.name,
                       name=u'Non Github Project',
                       last_updated='Wed, 01 Jan 2013 00:00:00',
                       github_details=None)
        ProjectFactory(organization_name=organization.name,
                       name=u'Project 3',
                       last_updated='Thu, 01 Jan 2014 00:00:00 GMT')
        db.session.commit()

        response = self.app.get('/api/organizations/Code-for-San-Francisco')
        response = json.loads(response.data)

        self.assertEqual(len(response['current_projects']), 3)
        self.assertEqual(response['current_projects'][0]['name'], u'Project 3')
        self.assertEqual(response['current_projects'][1]['name'],
                         u'Non Github Project')
        self.assertEqual(response['current_projects'][2]['name'], u'Project 2')
Beispiel #7
0
    def test_project_search_existing_phrase(self):
        ''' Searching for an existing phrase in the project and org/project endpoints
            returns expected results
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        ProjectFactory(organization_name=organization.name,
                       description=u'ruby on rails')
        ProjectFactory(organization_name=organization.name,
                       description=u'i love lamp')
        db.session.commit()
        project_response = self.app.get('/api/projects?q=ruby on rails')
        project_response = json.loads(project_response.data)
        assert isinstance(project_response['total'], int)
        assert isinstance(project_response['objects'], list)
        self.assertEqual(project_response['total'], 1)
        self.assertEqual(len(project_response['objects']), 1)

        org_project_response = self.app.get(
            '/api/organizations/Code-for-San-Francisco/projects?q=ruby on rails'
        )
        org_project_response = json.loads(org_project_response.data)
        assert isinstance(org_project_response['total'], int)
        assert isinstance(org_project_response['objects'], list)
        self.assertEqual(org_project_response['total'], 1)
        self.assertEqual(len(org_project_response['objects']), 1)
Beispiel #8
0
    def test_utf8_characters(self):
        organization = OrganizationFactory(name=u'Cöde for Ameriça')
        db.session.add(organization)
        db.session.commit()

        response = self.app.get(u'/api/organizations/Cöde for Ameriça')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        assert isinstance(response['name'], unicode)

        response = self.app.get(u'/api/organizations/Cöde-for-Ameriça')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        assert isinstance(response['name'], unicode)

        response = self.app.get(
            '/api/organizations/C%C3%B6de for Ameri%C3%A7a')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        assert isinstance(response['name'], unicode)

        response = self.app.get(
            '/api/organizations/C%C3%B6de-for-Ameri%C3%A7a')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        assert isinstance(response['name'], unicode)
    def test_organizations(self):
        OrganizationFactory()
        db.session.commit()

        response = self.app.get('/api/organizations')
        response = json.loads(response.data)

        assert isinstance(response, dict)
        assert isinstance(response['pages'], dict)
        assert isinstance(response['total'], int)
        assert isinstance(response['objects'], list)
        assert isinstance(response['objects'][0]['api_url'], unicode)
        assert isinstance(response['objects'][0]['city'], unicode)
        assert isinstance(response['objects'][0]['current_events'], list)
        assert isinstance(response['objects'][0]['latitude'], float)
        assert isinstance(response['objects'][0]['longitude'], float)
        assert isinstance(response['objects'][0]['name'], unicode)
        assert isinstance(response['objects'][0]['current_projects'], list)
        assert isinstance(response['objects'][0]['projects_list_url'], unicode)
        assert isinstance(response['objects'][0]['rss'], unicode)
        assert isinstance(response['objects'][0]['current_stories'], list)
        assert isinstance(response['objects'][0]['type'], unicode)
        assert isinstance(response['objects'][0]['website'], unicode)
        assert isinstance(response['objects'][0]['last_updated'], int)
        assert isinstance(response['objects'][0]['started_on'], unicode)
        assert isinstance(response['objects'][0]['id'], unicode)
    def test_org_upcoming_events(self):
        '''
        Only return events occurring in the future
        Make sure that they are ordered from most recent to
        furthest away in the future
        '''
        # Assuming today is Christmas...
        organization = OrganizationFactory(
            name=u'International Cat Association')
        db.session.flush()

        # Create multiple events, some in the future, one in the past
        EventFactory(organization_name=organization.name,
                     name=u'Christmas Eve',
                     start_time_notz=datetime.now() - timedelta(1))
        EventFactory(organization_name=organization.name,
                     name=u'New Years',
                     start_time_notz=datetime.now() + timedelta(7))
        EventFactory(organization_name=organization.name,
                     name=u'MLK Day',
                     start_time_notz=datetime.now() + timedelta(25))
        db.session.commit()

        # Check that future events are returned in the correct order
        response = self.app.get(
            '/api/organizations/International Cat Association/upcoming_events')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 2)
        self.assertEqual(response['objects'][0]['name'], u'New Years')
        self.assertEqual(response['objects'][1]['name'], u'MLK Day')
    def test_headers(self):
        OrganizationFactory()
        db.session.commit()

        response = self.app.get('/api/organizations')
        assert response.headers['Access-Control-Allow-Origin'] == '*'
        assert response.headers['Content-Type'] == 'application/json'
Beispiel #12
0
 def test_project_search_ranked_order(self):
     ''' Search results from the project and org/project endpoints are returned
         with correct ranking values
     '''
     organization = OrganizationFactory(name=u"Code for San Francisco")
     ProjectFactory(organization_name=organization.name,
                    status=u'TEST',
                    last_updated=datetime.now() - timedelta(10000))
     ProjectFactory(organization_name=organization.name,
                    description=u'testing a new thing',
                    last_updated=datetime.now() - timedelta(1))
     ProjectFactory(organization_name=organization.name,
                    tags=[u'test,tags,what,ever'],
                    last_updated=datetime.now() - timedelta(100))
     ProjectFactory(organization_name=organization.name,
                    last_updated=datetime.now())
     db.session.commit()
     project_response = self.app.get('/api/projects?q=TEST')
     project_response = json.loads(project_response.data)
     self.assertEqual(project_response['total'], 3)
     self.assertEqual(project_response['objects'][0]['status'], u'TEST')
     self.assertEqual(project_response['objects'][1]['tags'],
                      [u'test,tags,what,ever'])
     self.assertEqual(project_response['objects'][2]['description'],
                      u'testing a new thing')
Beispiel #13
0
    def test_project_search_empty_string(self):
        ''' Searching an empty string on the project and org/project endpoints returns all projects
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        ProjectFactory(organization_name=organization.name,
                       description=u'ruby ruby ruby ruby ruby',
                       last_updated=datetime.now() - timedelta(10))
        ProjectFactory(organization_name=organization.name,
                       description=u'ruby',
                       last_updated=datetime.now() - timedelta(1))
        db.session.commit()
        project_response = self.app.get('/api/projects?q=')
        project_response = json.loads(project_response.data)
        assert isinstance(project_response['total'], int)
        assert isinstance(project_response['objects'], list)
        self.assertEqual(project_response['total'], 2)
        self.assertEqual(len(project_response['objects']), 2)

        org_project_response = self.app.get(
            '/api/organizations/Code-for-San-Francisco/projects?q=')
        org_project_response = json.loads(org_project_response.data)
        assert isinstance(org_project_response['total'], int)
        assert isinstance(org_project_response['objects'], list)
        self.assertEqual(org_project_response['total'], 2)
        self.assertEqual(len(org_project_response['objects']), 2)
Beispiel #14
0
    def test_project_return_only_ids(self):
        ''' Search results from the project and org/project endpoints are returned
            as only IDs if requested
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        project_one = ProjectFactory(organization_name=organization.name, description=u'ruby ruby ruby ruby ruby', last_updated=datetime.now() - timedelta(10))
        project_two = ProjectFactory(organization_name=organization.name, description=u'ruby', last_updated=datetime.now() - timedelta(1))
        db.session.commit()
        project_one_id = project_one.id
        project_two_id = project_two.id

        project_response = self.app.get('/api/projects?q=ruby&only_ids=true')
        project_response = json.loads(project_response.data)
        assert isinstance(project_response['total'], int)
        assert isinstance(project_response['objects'], list)
        self.assertEqual(len(project_response["objects"]), 2)
        assert isinstance(project_response['objects'][0], int)
        assert isinstance(project_response['objects'][1], int)
        self.assertEqual(project_response['objects'][0], project_one_id)
        self.assertEqual(project_response['objects'][1], project_two_id)

        org_project_response = self.app.get('/api/organizations/Code-for-San-Francisco/projects?q=ruby&only_ids=true')
        org_project_response = json.loads(org_project_response.data)
        assert isinstance(org_project_response['total'], int)
        assert isinstance(org_project_response['objects'], list)
        self.assertEqual(len(org_project_response["objects"]), 2)
        assert isinstance(org_project_response['objects'][0], int)
        assert isinstance(org_project_response['objects'][1], int)
        self.assertEqual(org_project_response['objects'][0], project_one_id)
        self.assertEqual(org_project_response['objects'][1], project_two_id)
Beispiel #15
0
    def test_project_search_order_by_last_updated_sort_asc(self):
        ''' Search results from the project and org/project endpoints are returned
            in ascending order of last_updated, if requested
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        ProjectFactory(organization_name=organization.name,
                       description=u'ruby ruby ruby ruby ruby',
                       last_updated=datetime.now() - timedelta(10))
        ProjectFactory(organization_name=organization.name,
                       description=u'ruby',
                       last_updated=datetime.now() - timedelta(1))
        db.session.commit()
        project_response = self.app.get(
            '/api/projects?q=ruby&sort_by=last_updated&sort_dir=asc')
        project_response = json.loads(project_response.data)
        assert isinstance(project_response['total'], int)
        assert isinstance(project_response['objects'], list)
        self.assertEqual(len(project_response["objects"]), 2)
        self.assertEqual(project_response['objects'][0]['description'],
                         'ruby ruby ruby ruby ruby')

        org_project_response = self.app.get(
            '/api/organizations/Code-for-San-Francisco/projects?q=ruby&sort_by=last_updated&sort_dir=asc'
        )
        org_project_response = json.loads(org_project_response.data)
        assert isinstance(org_project_response['total'], int)
        assert isinstance(org_project_response['objects'], list)
        self.assertEqual(len(org_project_response["objects"]), 2)
        self.assertEqual(org_project_response['objects'][0]['description'],
                         'ruby ruby ruby ruby ruby')
Beispiel #16
0
    def test_spaces_in_issues_requests_list(self):
        ''' Test that spaces in the list of labels works
        '''
        # Set up an issue with labels
        # Try requesting it with spaces in the request
        # Assert that it returns
        organization = OrganizationFactory()
        db.session.commit()
        project = ProjectFactory(organization_name=organization.name)
        db.session.commit()
        issue = IssueFactory(project_id=project.id)
        db.session.commit()
        hw_label = LabelFactory(name=u'help wanted', issue_id=issue.id)
        bug_label = LabelFactory(name=u'bug', issue_id=issue.id)
        db.session.commit()

        # Test that help wanted works
        response = self.app.get('/api/issues/labels/help wanted')
        response = json.loads(response.data)
        self.assertEqual(len(response['objects']), 1)

        # Test that help wanted, bug works
        response = self.app.get('/api/issues/labels/help wanted, bug')
        response = json.loads(response.data)
        self.assertEqual(len(response['objects']), 1)
    def test_organization_issues(self):
        ''' Test getting all of an organization's issues
        '''
        organization = OrganizationFactory(name=u'Civic Project',
                                           type=u'Not a brigade')
        db.session.flush()

        project1 = ProjectFactory(organization_name=organization.name,
                                  name=u'Civic Project 1')
        project2 = ProjectFactory(organization_name=organization.name,
                                  name=u'Civic Project 2')
        db.session.flush()

        IssueFactory(project_id=project1.id, title=u'Civic Issue 1.1')
        IssueFactory(project_id=project1.id, title=u'Civic Issue 1.2')
        IssueFactory(project_id=project2.id, title=u'Civic Issue 2.1')
        db.session.commit()

        response = self.app.get('/api/organizations/{}/issues'.format(
            organization.name))
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 3)

        self.assertTrue(u'Civic Issue 1.1' in
                        [item['title'] for item in response['objects']])
    def test_orgs_projects_order(self):
        """
        Test that a orgs projects come back in order of last_updated.
        """
        organization = OrganizationFactory(name=u'Code for San Francisco')
        db.session.flush()

        ProjectFactory(organization_name=organization.name,
                       name=u'Project 1',
                       last_updated='Mon, 01 Jan 2010 00:00:00 GMT')
        ProjectFactory(organization_name=organization.name,
                       name=u'Project 2',
                       last_updated='Tue, 01 Jan 2011 00:00:00 GMT')
        ProjectFactory(organization_name=organization.name,
                       name=u'Non Github Project',
                       last_updated='Wed, 01 Jan 2013 00:00:00',
                       github_details=None)
        ProjectFactory(organization_name=organization.name,
                       name=u'Project 3',
                       last_updated='Thu, 01 Jan 2014 00:00:00 GMT')
        db.session.commit()

        response = self.app.get(
            '/api/organizations/Code-for-San-Francisco/projects')
        response = json.loads(response.data)

        self.assertEqual(response['objects'][0]['name'], u'Project 3')
        self.assertEqual(response['objects'][1]['name'], u'Non Github Project')
        self.assertEqual(response['objects'][2]['name'], u'Project 2')
        self.assertEqual(response['objects'][3]['name'], u'Project 1')
 def test_org_projects_dont_include_tsv(self):
     OrganizationFactory(name=u"Code for San Francisco")
     ProjectFactory(organization_name=u"Code for San Francisco")
     db.session.commit()
     response = self.app.get('/api/organizations/Code-for-San-Francisco')
     response = json.loads(response.data)
     self.assertFalse('tsv_body' in response['current_projects'][0])
Beispiel #20
0
    def test_current_events(self):
        """
        The three soonest upcoming events should be returned.
        If there are no events in the future, no events will be returned
        """
        # Assuming today is Christmas...
        organization = OrganizationFactory(name=u'Collective of Ericas')
        db.session.flush()

        # Create multiple events, some in the future, one in the past
        EventFactory(organization_name=organization.name,
                     name=u'Christmas Eve',
                     start_time_notz=datetime.now() - timedelta(1))
        EventFactory(organization_name=organization.name,
                     name=u'New Years',
                     start_time_notz=datetime.now() + timedelta(7))
        EventFactory(organization_name=organization.name,
                     name=u'MLK Day',
                     start_time_notz=datetime.now() + timedelta(25))
        EventFactory(organization_name=organization.name,
                     name=u'Cesar Chavez Day',
                     start_time_notz=datetime.now() + timedelta(37))
        db.session.commit()

        response = self.app.get('/api/organizations/Collective%20of%20Ericas')
        response_json = json.loads(response.data)

        self.assertEqual(len(response_json['current_events']), 2)
        self.assertEqual(response_json['current_events'][0]['name'],
                         u'New Years')
        self.assertEqual(response_json['current_events'][1]['name'],
                         u'MLK Day')
        self.assertEqual(
            response_json['current_events'][0]['organization_name'],
            u'Collective of Ericas')
    def test_organization_query_filter_with_unescaped_characters(self):
        ''' Test that organization query params with unescaped characters work as expected.
        '''
        OrganizationFactory(name=u'Code for Addis Ababa', type=u'Code for All', city=u'Addis Ababa')
        OrganizationFactory(name=u'Code for Ponta Grossa', type=u'Code for All', city=u'Ponta Grossa, PR')
        OrganizationFactory(name=u'USDS', type=u'Government', city=u'Washington, DC')

        db.session.commit()

        response = self.app.get('/api/organizations?type=Code%20for%20All')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 2)
        self.assertEqual(response['objects'][0]['name'], u'Code for Addis Ababa')
        self.assertEqual(response['objects'][1]['name'], u'Code for Ponta Grossa')

        response = self.app.get('/api/organizations?type=Code+for+All')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 2)
        self.assertEqual(response['objects'][0]['name'], u'Code for Addis Ababa')
        self.assertEqual(response['objects'][1]['name'], u'Code for Ponta Grossa')

        response = self.app.get('/api/organizations?type=Code%2Bfor%2BAll')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 2)
        self.assertEqual(response['objects'][0]['name'], u'Code for Addis Ababa')
        self.assertEqual(response['objects'][1]['name'], u'Code for Ponta Grossa')

        response = self.app.get('/api/organizations?city=Ponta%20Grossa')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['name'], u'Code for Ponta Grossa')

        response = self.app.get('/api/organizations?city=Addis+Ababa')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['name'], u'Code for Addis Ababa')

        response = self.app.get('/api/organizations?city=Washington%2C%2BDC')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['total'], 1)
        self.assertEqual(response['objects'][0]['name'], u'USDS')
Beispiel #22
0
    def test_orgs_attendance(self):
        OrganizationFactory(name="Code for San Francisco")
        url = "https://www.codeforamerica.org/api/organizations/Code-for-San-Francisco"
        AttendanceFactory(organization_name="Code for San Francisco", organization_url=url)
        OrganizationFactory(name="Open Oakland")
        url = "https://www.codeforamerica.org/api/organizations/Open-Oakland"
        AttendanceFactory(organization_name="Open Oakland", organization_url=url)
        db.session.commit()

        response = self.app.get('/api/organizations/attendance')
        self.assertEquals(response.status_code, 200)
        response = json.loads(response.data)
        self.assertIsInstance(response, list)
        self.assertTrue("organization_name" in response[0].keys())
        self.assertTrue("cfapi_url" in response[0].keys())
        self.assertTrue("total" in response[0].keys())
        self.assertTrue("weekly" in response[0].keys())
Beispiel #23
0
    def test_project_search_includes_organization_name(self):
        '''
        The organization name is included in the project search
        '''
        organization = OrganizationFactory(name=u"Code for San Francisco")
        ProjectFactory(organization_name=organization.name,
                       name=u"Project One")
        ProjectFactory(organization_name=organization.name,
                       name=u"Project Two",
                       description=u"America")

        organization = OrganizationFactory(name=u"Code for America")
        ProjectFactory(organization_name=organization.name,
                       name=u"Project Three")
        ProjectFactory(organization_name=organization.name,
                       name=u"Project Four",
                       tags=u"San Francisco")
        db.session.commit()

        # Test that org_name matches return before project name
        project_response = self.app.get(
            '/api/projects?q=Code+for+San+Francisco')
        project_response = json.loads(project_response.data)
        self.assertEqual(len(project_response['objects']), 3)
        self.assertEqual(project_response['objects'][0]['name'],
                         u'Project One')
        self.assertEqual(project_response['objects'][1]['name'],
                         u'Project Two')
        self.assertEqual(project_response['objects'][2]['name'],
                         u'Project Four')
        self.assertTrue(
            'San Francisco' in project_response['objects'][2]['tags'])

        # Test that org name matches return before project description
        project_response = self.app.get('/api/projects?q=Code for America')
        project_response = json.loads(project_response.data)
        self.assertEqual(len(project_response['objects']), 3)
        self.assertEqual(project_response['objects'][0]['name'],
                         u'Project Three')
        self.assertEqual(project_response['objects'][1]['name'],
                         u'Project Four')
        self.assertEqual(project_response['objects'][2]['name'],
                         u'Project Two')
        self.assertEqual(project_response['objects'][2]['description'],
                         u'America')
 def test_org_search_existing_part_of_phrase(self):
     OrganizationFactory(name=u'Code for San Francisco', )
     db.session.commit()
     response = self.app.get('/api/organizations?q=Code for')
     response = json.loads(response.data)
     assert isinstance(response['total'], int)
     assert isinstance(response['objects'], list)
     self.assertEqual(response['total'], 1)
     self.assertEqual(len(response['objects']), 1)
 def test_org_search_nonexisting_phrase(self):
     OrganizationFactory(name=u'BetaNYC')
     db.session.commit()
     response = self.app.get('/api/organizations?q=joomla')
     response = json.loads(response.data)
     assert isinstance(response['total'], int)
     assert isinstance(response['objects'], list)
     self.assertEqual(response['total'], 0)
     self.assertEqual(len(response['objects']), 0)
Beispiel #26
0
    def test_cascading_delete(self):
        '''
        Test that when an organization is deleted, all of its projects, issues, stories, events are deleted
        '''
        # Create an organization
        organization = OrganizationFactory()
        db.session.flush()

        # Create a project, an event and a story
        project = ProjectFactory(organization_name=organization.name)
        EventFactory(organization_name=organization.name)
        StoryFactory(organization_name=organization.name)
        db.session.flush()

        # Create an issue and give it a label
        issue = IssueFactory(project_id=project.id)
        db.session.flush()

        label = LabelFactory()
        issue.labels = [label]
        db.session.flush()

        # Get all of the stuff
        orgs = Organization.query.all()
        eve = Event.query.all()
        sto = Story.query.all()
        proj = Project.query.all()
        iss = Issue.query.all()
        lab = Label.query.all()

        # Verify they are there
        self.assertEqual(len(orgs), 1)
        self.assertEqual(len(eve), 1)
        self.assertEqual(len(sto), 1)
        self.assertEqual(len(proj), 1)
        self.assertEqual(len(iss), 1)
        self.assertEqual(len(lab), 1)

        # Delete the one organization
        db.session.delete(orgs[0])
        db.session.commit()

        # Get all the stuff again
        orgs = Organization.query.all()
        eve = Event.query.all()
        sto = Story.query.all()
        proj = Project.query.all()
        iss = Issue.query.all()
        lab = Label.query.all()

        # Make sure they are all gone
        self.assertEqual(len(orgs), 0)
        self.assertEqual(len(eve), 0)
        self.assertEqual(len(sto), 0)
        self.assertEqual(len(proj), 0)
        self.assertEqual(len(iss), 0)
        self.assertEqual(len(lab), 0)
Beispiel #27
0
    def test_dashes_in_slugs(self):
        organization = OrganizationFactory(name=u'Code for America')
        event = EventFactory(organization_name=u'Code for America')
        db.session.commit()

        response = self.app.get('/api/organizations/Code-for-America')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        self.assertEqual(response['name'], u'Code for America')
    def test_orgs_events(self):
        organization = OrganizationFactory(name=u'Code for America')
        event = EventFactory(organization_name=u'Code for America')
        db.session.commit()

        response = self.app.get('/api/organizations/Code for America/events')
        self.assertEqual(response.status_code, 200)
        response = json.loads(response.data)
        assert isinstance(response, dict)
Beispiel #29
0
    def test_all_upcoming_events_with_params(self):
        '''
        Test the /events/upcoming_events end point with params.
        '''
        # World Cup teams
        organization = OrganizationFactory(name=u'USA USA USA', type=u'Code for All')
        db.session.flush()

        # Create multiple events, some in the future, one in the past
        EventFactory(organization_name=organization.name, name=u'Past Event', start_time_notz=datetime.now() - timedelta(1000))
        EventFactory(organization_name=organization.name, name=u'Event One', start_time_notz=datetime.now() + timedelta(10))
        EventFactory(organization_name=organization.name, name=u'Event Four', start_time_notz=datetime.now() + timedelta(100))
        EventFactory(organization_name=organization.name, name=u'Event Seven', start_time_notz=datetime.now() + timedelta(1000))
        db.session.flush()

        # World Cup teams
        organization = OrganizationFactory(name=u'Brazil')
        db.session.flush()

        # Create multiple events, some in the future, one in the past
        EventFactory(organization_name=organization.name, name=u'Past Event', start_time_notz=datetime.now() - timedelta(2000))
        EventFactory(organization_name=organization.name, name=u'Event Two', start_time_notz=datetime.now() + timedelta(20))
        EventFactory(organization_name=organization.name, name=u'Event Five', start_time_notz=datetime.now() + timedelta(200))
        EventFactory(organization_name=organization.name, name=u'Event Eight', start_time_notz=datetime.now() + timedelta(2000))
        db.session.flush()

        # World Cup teams
        organization = OrganizationFactory(name=u'GER', type=u'Code for All')
        db.session.flush()

        # Create multiple events, some in the future, one in the past
        EventFactory(organization_name=organization.name, name=u'Past Event', start_time_notz=datetime.now() - timedelta(3000))
        EventFactory(organization_name=organization.name, name=u'Event Three', start_time_notz=datetime.now() + timedelta(30))
        EventFactory(organization_name=organization.name, name=u'Event Six', start_time_notz=datetime.now() + timedelta(300))
        EventFactory(organization_name=organization.name, name=u'Event Nine', start_time_notz=datetime.now() + timedelta(3000))
        db.session.commit()

        response = self.app.get('/api/events/upcoming_events?organization_type=Code for All')
        response_json = json.loads(response.data)

        self.assertEqual(len(response_json['objects']), 6)
        self.assertEqual(response_json['objects'][0]['name'], u'Event One')
        self.assertEqual(response_json['objects'][1]['name'], u'Event Three')
        self.assertEqual(response_json['objects'][5]['name'], u'Event Nine')
    def test_orgs_current_stories_order(self):
        organization = OrganizationFactory(name=u'Code for America')
        StoryFactory(organization_name=organization.name)
        StoryFactory(organization_name=organization.name)
        db.session.commit()

        response = self.app.get('/api/organizations/Code for America')
        response = json.loads(response.data)
        assert response['current_stories'][0]['id'] == 2
        assert response['current_stories'][1]['id'] == 1