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
def test_stories_order(self): StoryFactory() StoryFactory() StoryFactory() db.session.commit() response = self.app.get('/api/stories') response = json.loads(response.data) assert (response['objects'][0]['id'] == 3) assert (response['objects'][1]['id'] == 2) assert (response['objects'][2]['id'] == 1)
def test_current_stories(self): """ Test that only the two most recent stories are being returned """ organization = OrganizationFactory(name=u'Collective of Ericas') db.session.flush() StoryFactory(organization_name=u'Collective of Ericas', title=u'First Story') StoryFactory(organization_name=u'Collective of Ericas', title=u'Second Story') db.session.commit() response = self.app.get('/api/organizations/Collective%20of%20Ericas') response_json = json.loads(response.data) self.assertEqual(response_json['current_stories'][0]['title'], u'Second Story') self.assertEqual(response_json['current_stories'][1]['title'], u'First Story')
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_orgs_stories(self): organization = OrganizationFactory(name=u'Code for America') StoryFactory(organization_name=organization.name) db.session.commit() response = self.app.get('/api/organizations/Code for America/stories') self.assertEqual(response.status_code, 200) response = json.loads(response.data) assert isinstance(response, dict)
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_stories(self): StoryFactory() db.session.commit() response = self.app.get('/api/stories') 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]['id'], int) assert isinstance(response['objects'][0]['link'], unicode) assert isinstance(response['objects'][0]['organization'], dict) assert isinstance(response['objects'][0]['organization_name'], unicode) assert isinstance(response['objects'][0]['title'], unicode) assert isinstance(response['objects'][0]['type'], unicode)
def test_story_query_filter(self): org = OrganizationFactory(type=u'Brigade') another_org = OrganizationFactory(type=u'Code for All') awesome_story = StoryFactory(title=u'Awesome story') sad_story = StoryFactory(title=u'Sad story', type=u'a video') awesome_story.organization = org sad_story.organization = another_org db.session.commit() # Make sure total number of stories is 2 response = self.app.get('/api/stories') response = json.loads(response.data) self.assertEqual(response['total'], 2) # Filter by title should return only 1 response = self.app.get('/api/stories?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 story') # Filter by type should return only 1 response = self.app.get('/api/stories?type=video') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['total'], 1) self.assertEqual(response['objects'][0]['title'], u'Sad story') # Filter by deep searching organization type should return 1 response = self.app.get('/api/stories?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'Awesome story')
def test_underscores_and_spaces(self): organization = OrganizationFactory(name=u'Code for America') db.session.add(organization) db.session.commit() response = self.app.get('/api/organizations/Code for America') self.assertEqual(response.status_code, 200) response = json.loads(response.data) scheme, netloc, path, _, _, _ = urlparse(response['all_events']) self.assertTrue('-' in path) self.assertFalse('_' in path) self.assertFalse(' ' in path) scheme, netloc, path, _, _, _ = urlparse(response['all_stories']) self.assertTrue('-' in path) self.assertFalse('_' in path) self.assertFalse(' ' in path) scheme, netloc, path, _, _, _ = urlparse(response['all_projects']) self.assertTrue('-' in path) self.assertFalse('_' in path) self.assertFalse(' ' in path) 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') 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') project = ProjectFactory(organization_name=u'Code for America') db.session.add(project) db.session.commit() response = self.app.get('/api/organizations/Code_for_America/projects') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['objects'][0]['organization_name'], u'Code for America') response = self.app.get('/api/organizations/Code_for_America/projects') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['objects'][0]['organization_name'], u'Code for America') event = EventFactory(organization_name=u'Code for America') db.session.add(event) db.session.commit() response = self.app.get('/api/organizations/Code for America/events') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['objects'][0]['organization_name'], u'Code for America') response = self.app.get('/api/organizations/Code_for_America/events') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['objects'][0]['organization_name'], u'Code for America') story = StoryFactory(organization_name=u'Code for America') db.session.add(story) db.session.commit() response = self.app.get('/api/organizations/Code for America/stories') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['objects'][0]['organization_name'], u'Code for America') response = self.app.get('/api/organizations/Code_for_America/stories') self.assertEqual(response.status_code, 200) response = json.loads(response.data) self.assertEqual(response['objects'][0]['organization_name'], u'Code for America')
def test_set_childs_parent_association_null(self): ''' Test that a child's parent association cannot be deleted ''' test_passed = False project = ProjectFactory() db.session.commit() setattr(project, 'organization_name', None) try: db.session.commit() except IntegrityError: test_passed = True self.assertTrue(test_passed) db.session.rollback() test_passed = False story = StoryFactory() db.session.commit() setattr(story, 'organization_name', None) try: db.session.commit() except IntegrityError: test_passed = True self.assertTrue(test_passed) db.session.rollback() test_passed = False event = EventFactory() db.session.commit() setattr(event, 'organization_name', None) try: db.session.commit() except IntegrityError: test_passed = True self.assertTrue(test_passed) db.session.rollback() test_passed = False project = ProjectFactory() db.session.flush() issue = IssueFactory(project_id=project.id) db.session.commit() setattr(issue, 'project_id', None) try: db.session.commit() except IntegrityError: test_passed = True self.assertTrue(test_passed) db.session.rollback() test_passed = False project = ProjectFactory() db.session.flush() issue = IssueFactory(project_id=project.id) db.session.flush() label = LabelFactory(issue_id=issue.id) db.session.commit() setattr(label, 'issue_id', None) try: db.session.commit() except IntegrityError: test_passed = True self.assertTrue(test_passed)