def test_duplicate_additional_item_slug(self): """Verify protection against duplicate additional-item slugs. Model should throw an IntegrityError when saving multiple additional items with the same slug key to a package. """ slug_key = 'my-test-content' package = package_factory(slug_key='test-item-dais') item_factory( additional_for=package, slug_key=slug_key ) self.assertEqual(package.additional_content.count(), 1) self.assertEqual( package.additional_content.all()[0].slug_key, slug_key ) with self.assertRaises(ValidationError): next_item = Item( slug_key=slug_key, type='text', editors=[{'email': '*****@*****.**'}], authors=[{'email': '*****@*****.**'}], budget_line='Budget line', primary_for_package=None, additional_for_package=package ) next_item.validate_unique()
def test_searches_slug_keys(self): """Verify search query behavior. Searches should find packages based on both primary & additional content slug keys. """ package = package_factory(slug_key='test-pkg-api-ssk') item_factory(primary_for=package) item_factory(additional_for=package, slug_key='klmnopqrst') response = self.client.get(PACKAGES_API_ENDPOINT, data={ 'format': 'json', 'search': 'test-pkg-api-ssk' }) json_response = json.loads(response.content) self.assertEqual(json_response['count'], 1) self.assertEqual(json_response['results'][0]['id'], package.pk) response = self.client.get(PACKAGES_API_ENDPOINT, data={ 'format': 'json', 'search': 'klmnopqrst' }) json_response = json.loads(response.content) self.assertEqual(json_response['count'], 1) self.assertEqual(json_response['results'][0]['id'], package.pk)
def test_change_created_on_addl_item_update(self): """Verify creation of Change instance on additional item update. When an additional content item is updated via the API, a change model should be created to reflect this modification. """ package = package_factory(slug_key='test-audit-ccoaiu') item_factory(primary_for=package) additional_item = item_factory(additional_for=package) response = self.client.patch( '%s%s/?format=json' % (ITEMS_API_ENDPOINT, additional_item.pk,), json.dumps({ 'budgetLine': 'Updated budget line', }), content_type='application/json' ) self.assertEqual(response.status_code, 200) change = Change.objects.get( item_id=additional_item.pk, item_content_type='item' ) self.assertEqual(change.package, package) self.assertEqual(change.by, self.creator.pk)
def test_author_filter(self): """Author field should return items based on author's e-mail.""" item_factory( author='*****@*****.**', primary_for=package_factory(slug_key='test-items-api-p3') ) response = self.client.get(ITEMS_API_ENDPOINT, data={ 'format': 'json', 'author': '*****@*****.**' }) self.assertEqual(response.status_code, 200) self.assertEqual(json.loads(response.content)['count'], 1)
def setUpTestData(cls): # Generate packages on 5 consecutive days, so we can run date-bound # filtered queries for offset in range(5): days_to_add = offset + 1 lower = tz.localize(datetime(2015, 5, 1)) + timedelta( days=days_to_add ) upper = lower + timedelta(days=1) package = package_factory( publish_date_lower=lower, publish_date_upper=upper) item_factory(primary_for=package)
def test_person_filter(self): """Person filter should search both author & editor fields.""" item_factory( author='*****@*****.**', primary_for=package_factory(slug_key='test-items-api-p1') ) item_factory( editor='*****@*****.**', primary_for=package_factory(slug_key='test-items-api-p2') ) response = self.client.get(ITEMS_API_ENDPOINT, data={ 'format': 'json', 'person': '*****@*****.**' }) self.assertEqual(response.status_code, 200) self.assertEqual(json.loads(response.content)['count'], 2)
def test_person_filter_on_primary_editor(self): """Verify person filter behavior. Such filtering should return packages whose primary content has an 'editor' whose email matches the search term. """ package_with_primary = package_factory(slug_key='test-pkg-api-pfope') item_factory(primary_for=package_with_primary, editor='*****@*****.**') response = self.client.get(PACKAGES_API_ENDPOINT, data={ 'format': 'json', 'person': '*****@*****.**' }) json_response = json.loads(response.content) self.assertEqual(json_response['count'], 1) self.assertEqual(json_response['results'][0]['id'], package_with_primary.pk)
def test_date_filter(self): """Verify publish_date filter behavior. Publish date filter should return items based on primary and additional package's publish date. """ package = package_factory( publish_date_lower=make_aware(datetime(2015, 7, 4)), publish_date_upper=make_aware(datetime(2015, 7, 5)), slug_key='test-items-api-d1' ) item_factory(primary_for=package) item_factory(additional_for=package) response = self.client.get(ITEMS_API_ENDPOINT, data={ 'format': 'json', 'publish_date': '2015-07-04,2015-07-05' }) self.assertEqual(response.status_code, 200) self.assertEqual(json.loads(response.content)['count'], 2)
def setUpTestData(cls): cls.item = item_factory( primary_for=package_factory(slug_key='test-change') ) cls.user = User.objects.create_user('user') cls.change = Change.objects.create( by=cls.user.pk, package=cls.item.primary_for_package, item_content_type='item', item_id=cls.item.pk )
def setUpTestData(cls): package_one = package_factory(slug_key='test-items-api-base') item_factory(primary_for=package_one) item_factory(additional_for=package_one, slug_key='addl1') # item_factory(additional_for=package_one) for _ in range(5): slug_key = 'test-items-api-{}'.format(_) item_factory(primary_for=package_factory(slug_key=slug_key))
def test_additional_item_slug(self): """Verify additional-item slug behavior. An additional item's slug should be the concatenation of its parent package's slug and the individual item's slug key. """ slug_key = 'my-test-content' package = package_factory(slug_key='test-item-ais') additional_item = item_factory( additional_for=package, slug_key=slug_key ) self.assertEqual( additional_item.full_slug, '{}.{}'.format(package.full_slug, slug_key) )
def setUpTestData(cls): cls.user = User.objects.create_user('user') package = package_factory(slug_key='test-cqs') item = item_factory(primary_for=package) for _ in range(0, 5): Change.objects.create( by=cls.user.pk, package=package, item_content_type='package', item_id=package.pk ) Change.objects.create( by=cls.user.pk, package=package, item_content_type='item', item_id=item.pk )
def test_primary_item_slug(self): """Primary item's slug should be None.""" package = package_factory(slug_key='test-item-pis') primary_item = item_factory(primary_for=package) self.assertIsNone(primary_item.full_slug)
def setUpTestData(cls): for _ in range(5): package_slug = 'test-package-{}'.format(_) item_factory(primary_for=package_factory(slug_key=package_slug))