class GetByUrlPathTestCase(ContentAPIBaseTestCase): """ Tests getting a page by its path. """ def setUp(self): super().setUp() self.page = ConditionPageFactory(title='Page') def test_get(self): """ Tests that getting a page by its path returns 200 if it exists. """ response = self.get_content_api_response(page_path='conditions/page/') self.assertEqual(response.status_code, 200) content = response.json() self.assertEqual(content['title'], self.page.title) self.assertEqual(content['id'], self.page.id) def test_404_if_url_doesnt_exist(self): """ Tests that trying to get a page by an invalid page returns 404 """ response = self.get_content_api_response(page_path='invalid/') self.assertEqual(response.status_code, 404) def test_404_if_not_live(self): """ Tests that trying to get a page that is not live returns 404 """ self.page.live = False self.page.save() response = self.get_content_api_response(page_path='conditions/page/') self.assertEqual(response.status_code, 404)
class LivePagesTestCase(TestCase): def setUp(self): super().setUp() self.page = ConditionPageFactory(title='Page') self.request = self.get_request(Site.objects.first()) def get_request(self, site): request = self.client.get('/test/', HTTP_HOST=site.hostname) request.site = site return request @override_settings(FRONTEND_BASE_URL=TEST_FRONTEND_BASE_URL) def test_live_page_redirects_to_frontend(self): """ Tests that the url /<page-url>/ redirects to <frontend-url>/<page-url>/ where frontend-url == settings.FRONTEND_BASE_URL if the page is live """ response = self.client.get(self.page.full_url) expected_url = '{}{}'.format(TEST_FRONTEND_BASE_URL, self.page.url) self.assertRedirects(response, expected_url, target_status_code=302) def test_non_live_page_404s(self): """ Tests that the url /<page-url>/ returns 404 if the page is not live """ self.page.live = False self.page.save() response = self.client.get(self.page.full_url) self.assertEqual(response.status_code, 404) def test_non_existing_page_404s(self): """ Tests that if the invalid urls return 404 """ invalid_url = '{}invalid/'.format(self.page.full_url) response = self.client.get(invalid_url) self.assertEqual(response.status_code, 404) @override_settings(FRONTEND_BASE_URL='') def test_placeholder_response_with_empty_settings(self): """ Tests that the url /<page-url>/ returns a placeholder string if settings.FRONTEND_BASE_URL has not been set """ response = self.client.get(self.page.full_url) self.assertEqual(response.status_code, 200) self.assertEqual(response.content, b'Please set FRONTEND_BASE_URL in your settings.py')
class PreviewPagesTestCase(ContentAPIBaseTestCase): """ Tests getting the content of a page by its revision id. """ def setUp(self): super().setUp() self.page = ConditionPageFactory(title='Page') def test_get_by_revision_x(self): """ Tests that getting a page by its revision id returns the related content, not the live one. """ # save some revisions revision_data = [] for change_number in range(1, 3): self.page.title = 'Page change {}'.format(change_number) self.page.save() revision = self.page.save_revision() revision_data.append((revision.id, self.page.title)) # get those versions and check that page.title == saved title for revision_id, page_title in revision_data: response = self.get_preview_content_api_response( self.page.id, revision_id=revision_id) content = response.json() self.assertEqual(response.status_code, 200) self.assertEqual(content['title'], page_title) def test_404_if_revision_doesnt_exist(self): """ Tests that trying to get a page by an invalid revision returns 404. """ # save a few revisions for change_number in range(1, 3): self.page.title = 'Page change {}'.format(change_number) self.page.save() self.page.save_revision() # get invalid revision id (last id + 1) revision_id = PageRevision.objects.order_by('-id')[0].id + 1 response = self.get_preview_content_api_response( self.page.id, revision_id=revision_id) self.assertEqual(response.status_code, 404) def test_get_defaults_to_latest_revision(self): """ Tests that getting a page without specifying a revision id returns the latest version. """ # save some revisions latest_title = self.page.title for change_number in range(1, 3): self.page.title = 'Page change {}'.format(change_number) self.page.save() self.page.save_revision() latest_title = self.page.title # check that returned content.title == latest title response = self.get_preview_content_api_response(self.page.id) content = response.json() self.assertEqual(response.status_code, 200) self.assertEqual(content['title'], latest_title)