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_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_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_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_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_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_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_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 collection_batch(): """Create and commit a batch of Collection instances, with associated projects, clients and roles.""" collections = [CollectionFactory() for _ in range(randint(3, 5))] ProjectFactory.create_batch(randint(0, 3), collections=collections) for collection in collections: ClientFactory.create_batch(randint(0, 3), collection=collection) RoleFactory.create_batch(randint(0, 3), collection=collection) return collections
def test_project_cascading_deletes(self): ''' Test that issues get deleted when their parent project and org is deleted ''' # set up test objects and delete a project organization = OrganizationFactory(name=u'TEST ORG') db.session.flush() project = ProjectFactory(organization_name=organization.name, name=u'TEST PROJECT') db.session.flush() issue = IssueFactory(title=u'TEST ISSUE', project_id=project.id) another_issue = IssueFactory(title=u'ANOTHER TEST ISSUE', project_id=project.id) a_third_issue = IssueFactory(title=u'A THIRD TEST ISSUE', project_id=project.id) db.session.commit() # make sure the issues are in the db issues = db.session.query(Issue).all() self.assertTrue(len(issues) == 3) db.session.execute('DELETE FROM project') db.session.commit() issues = db.session.query(Issue).all() self.assertFalse(len(issues)) # delete an organization project = ProjectFactory(organization_name=organization.name, name=u'TEST PROJECT') db.session.flush() issue = IssueFactory(title=u'TEST ISSUE', project_id=project.id) another_issue = IssueFactory(title=u'ANOTHER TEST ISSUE', project_id=project.id) a_third_issue = IssueFactory(title=u'A THIRD TEST ISSUE', project_id=project.id) db.session.add(issue) db.session.add(another_issue) db.session.add(a_third_issue) db.session.commit() # make sure the issues are in the db issues = db.session.query(Issue).all() self.assertTrue(len(issues) == 3) db.session.execute('DELETE FROM organization') db.session.commit() issues = db.session.query(Issue).all() self.assertFalse(len(issues))
def test_issue_cascading_deletes(self): ''' Test that labels get deleted when their parent issue, project, and org is deleted ''' # set up test objects and delete an issue organization = OrganizationFactory(name=u'TEST ORG') db.session.flush() project = ProjectFactory(organization_name=organization.name, name=u'TEST PROJECT') db.session.flush() issue = IssueFactory(title=u'TEST ISSUE', project_id=project.id) db.session.flush() label = LabelFactory(issue_id=issue.id) db.session.flush() db.session.execute('DELETE FROM issue') db.session.commit() labels = db.session.query(Label).all() self.assertFalse(len(labels)) # delete a project issue = IssueFactory(title=u'TEST ISSUE', project_id=project.id) db.session.flush() label = LabelFactory(issue_id=issue.id) db.session.flush() db.session.execute('DELETE FROM project') db.session.commit() labels = db.session.query(Label).all() self.assertFalse(len(labels)) # delete an organization project = ProjectFactory(organization_name=organization.name, name=u'TEST PROJECT') db.session.flush() issue = IssueFactory(title=u'TEST ISSUE', project_id=project.id) db.session.flush() label = LabelFactory(issue_id=issue.id) db.session.flush() db.session.execute('DELETE FROM organization') db.session.commit() labels = db.session.query(Label).all() self.assertFalse(len(labels))
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 project_build(**id): """Build and return an uncommitted Project instance. Referenced collections are however committed.""" return ProjectFactory.build( **id, collections=CollectionFactory.create_batch(randint(0, 3)), )
def test_delete_document_forbidden(user_vip, user_normal, client_user_vip, settings, tmpdir, model, attribute): """ Test view for uploading doc. """ settings.MEDIA_ROOT = tmpdir.mkdir('test_delete') project = ProjectFactory.create(local_custodians=[user_vip]) contract = ContractFactory(project=project) entities = {'project': project, 'contract': contract} the_file = SimpleUploadedFile("file.txt", b"file_content") url = reverse('document_add') data = { 'content_type': ContentType.objects.get_for_model(model).pk, 'object_id': entities.get(attribute).pk, 'content': the_file } response = client_user_vip.post(url, data) pk = response.json()['id'] client_user_vip.logout() client_user_vip.login(username=user_normal.username, password=user_normal.password) url = reverse('document_delete', args=(pk, )) assert client_user_vip.delete(url).status_code == 403
def test_project_search_includes_name(self): ''' The name field is included in search results from the project and org/project endpoints ''' organization = OrganizationFactory(name=u"Code for San Francisco") ProjectFactory(organization_name=organization.name, name=u'My Cool Project') ProjectFactory(organization_name=organization.name, name=u'My Dumb Project') db.session.commit() project_response = self.app.get('/api/projects?q=cool') project_response = json.loads(project_response.data) self.assertEqual(len(project_response['objects']), 1) self.assertEqual(project_response['objects'][0]['name'], 'My Cool Project') org_project_response = self.app.get('/api/organizations/Code-for-San-Francisco/projects?q=cool') org_project_response = json.loads(org_project_response.data) self.assertEqual(len(org_project_response['objects']), 1) self.assertEqual(org_project_response['objects'][0]['name'], 'My Cool Project')
def test_issues_with_labels(self): ''' Test that /api/issues/labels works as expected. Should return issues with any of the passed in label names ''' project = ProjectFactory() db.session.flush() issue = IssueFactory(project_id=project.id) issue2 = IssueFactory(project_id=project.id) label1 = LabelFactory(name=u'enhancement') label2 = LabelFactory(name=u'hack') issue.labels = [label1] issue2.labels = [label2] db.session.commit() response = self.app.get('/api/issues/labels/enhancement') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['total'], 1) self.assertEqual(response['objects'][0]['labels'][0]['name'], u'enhancement') response = self.app.get('/api/issues/labels/enhancement,hack') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['total'], 0)
def project_batch(): """Create and commit a batch of Project instances.""" return [ ProjectFactory( collections=CollectionFactory.create_batch(randint(0, 3))) for _ in range(randint(3, 5)) ]
def test_pagination(self): ProjectFactory() ProjectFactory() ProjectFactory() db.session.commit() response = self.app.get('/api/projects?per_page=2') response = json.loads(response.data) assert isinstance(response, dict) self.assertEqual(len(response['objects']), 2) self.assertEqual(response['pages']['next'], 'http://localhost/api/projects?per_page=2&page=2') self.assertEqual(response['pages']['last'], 'http://localhost/api/projects?per_page=2&page=2') self.assertNotIn('first', response['pages']) self.assertNotIn('prev', response['pages'])
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_project_search_includes_tags(self): """ The tags field is included in search results from the project and org/project endpoints """ organization = OrganizationFactory(name=u"Code for San Francisco") ProjectFactory(organization_name=organization.name, tags=u'mapping, philly') ProjectFactory(organization_name=organization.name, tags=u'food stamps, health') db.session.commit() project_response = self.app.get('/api/projects?q=stamps') project_response = json.loads(project_response.data) self.assertEqual(len(project_response['objects']), 1) self.assertEqual(project_response['objects'][0]['tags'], 'food stamps, health') org_project_response = self.app.get('/api/organizations/Code-for-San-Francisco/projects?q=stamps') org_project_response = json.loads(org_project_response.data) self.assertEqual(len(org_project_response['objects']), 1) self.assertEqual(org_project_response['objects'][0]['tags'], 'food stamps, health')
def test_all_projects_order(self): """ Test that projects gets returned in order of last_updated """ ProjectFactory(name=u'Project 1', last_updated='Mon, 01 Jan 2010 00:00:00 GMT') ProjectFactory(name=u'Project 2', last_updated='Tue, 01 Jan 2011 00:00:00 GMT') ProjectFactory(name=u'Non Github Project', last_updated='Wed, 01 Jan 2013 00:00:00', github_details=None) ProjectFactory(name=u'Project 3', last_updated='Thu, 01 Jan 2014 00:00:00 GMT') db.session.commit() response = self.app.get('/api/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_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_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_good_orgs_projects(self): organization = OrganizationFactory(name=u'Code for America') ProjectFactory(organization_name=organization.name) db.session.commit() response = self.app.get('/api/organizations/Code for America/projects') self.assertEqual(response.status_code, 200) response = json.loads(response.data) assert isinstance(response, dict)
def test_project_search_tsv_body_not_in_response(self): ''' The tsv_body field is not in the response from the project and org/project endpoints ''' 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) self.assertEqual(len(project_response['objects']), 2) self.assertFalse('tsv_body' in project_response['objects'][0]) self.assertFalse('tsv_body' in project_response['objects'][1]) org_project_response = self.app.get('/api/organizations/Code-for-San-Francisco/projects?q=') org_project_response = json.loads(org_project_response.data) self.assertEqual(len(org_project_response['objects']), 2) self.assertFalse('tsv_body' in org_project_response['objects'][0]) self.assertFalse('tsv_body' in org_project_response['objects'][1])
def test_upload_document_blank_data(user_vip, client_user_vip): """ Test view for uploading doc. """ project = ProjectFactory.create(local_custodians=[user_vip]) contract = ContractFactory(project=project) # membership = MembershipFactory(project=project, contract=contract) # assign_perm(Permissions.EDIT.value, user_vip, project) url = reverse('document_add') data = {'file': SimpleUploadedFile("file.txt", b"file_content")} response = client_user_vip.post(url, data) assert response.status_code == 404
def test_project_search_escaped_text(self): ''' Searching for escaped text 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'What\'s My \'District') ProjectFactory(organization_name=organization.name, description=u'Cöde%%for%%Ameriça') db.session.commit() project_response = self.app.get( '/api/projects?q=What\'s My \'District') 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='District") 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) project_response = self.app.get('/api/projects?q=%Ameriça') 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=Cöde%") 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_project_query_filter(self): ''' Test that project query params work as expected. ''' brigade = OrganizationFactory(name=u'Whatever', type=u'Brigade') brigade_somewhere_far = OrganizationFactory(name=u'Brigade Organization', type=u'Brigade, Code for All') web_project = ProjectFactory(name=u'Random Web App', type=u'web service') other_web_project = ProjectFactory(name=u'Random Web App 2', type=u'web service', description=u'Another') non_web_project = ProjectFactory(name=u'Random Other App', type=u'other service') web_project.organization = brigade non_web_project.organization = brigade_somewhere_far db.session.add(web_project) db.session.add(non_web_project) db.session.commit() response = self.app.get('/api/projects?type=web%20service') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['total'], 2) self.assertEqual(response['objects'][0]['name'], u'Random Web App') self.assertEqual(response['objects'][1]['name'], u'Random Web App 2') response = self.app.get('/api/projects?type=web%20service&description=Another') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['total'], 1) self.assertEqual(response['objects'][0]['name'], u'Random Web App 2') response = self.app.get('/api/projects?type=different%20service') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['total'], 0) response = self.app.get('/api/projects?organization_type=Code+for+All') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['total'], 1)
def test_create_child_without_parent(self): ''' Test that children created without parents cannot be committed to the database ''' test_passed = False project = ProjectFactory(organization_name=None) try: db.session.commit() except IntegrityError: test_passed = True self.assertTrue(test_passed) db.session.rollback() test_passed = False story = StoryFactory(organization_name=None) try: db.session.commit() except IntegrityError: test_passed = True self.assertTrue(test_passed) db.session.rollback() test_passed = False event = EventFactory(organization_name=None) try: db.session.commit() except IntegrityError: test_passed = True self.assertTrue(test_passed) db.session.rollback() test_passed = False issue = IssueFactory(project_id=None) try: db.session.commit() except IntegrityError: test_passed = True self.assertTrue(test_passed) db.session.rollback() test_passed = False label = LabelFactory(issue_id=None) try: db.session.commit() except IntegrityError: test_passed = True self.assertTrue(test_passed)
def test_org_dont_show_issues(self): ''' Test that calls to /organizations dont return project issues ''' from test.factories import OrganizationFactory, ProjectFactory, IssueFactory organization = OrganizationFactory() db.session.flush() project = ProjectFactory(organization_name=organization.name) db.session.flush() issue = IssueFactory(project_id=project.id) db.session.commit() response = self.app.get('/api/organizations') response = json.loads(response.data) for org in response['objects']: if org['current_projects']: self.assertFalse(isinstance(org['current_projects'][0]["issues"], list)) break