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)
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)
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)
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')
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)
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'
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')
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)
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)
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')
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])
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')
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())
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)
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)
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)
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