def setUp(self): self.site = Site.objects.first() self.root_page = self.site.root_page self.page_with_tags = CFGOVPage(title='Tagged', slug='tagged', live=True) save_new_page(self.page_with_tags, root=self.root_page) self.page_with_tags.tags.add('tag1') self.page_with_tags.authors.add('author1') self.page_with_tags.save()
class TestCFGOVPageContext(TestCase): def setUp(self): self.page = CFGOVPage(title='Test', slug='test') self.factory = RequestFactory() self.request = self.factory.get('/') def test_post_preview_cache_key_contains_page_id(self): save_new_page(self.page) key = self.page.post_preview_cache_key self.assertIn(str(self.page.id), key) @mock.patch('v1.models.base.hooks.get_hooks') def test_get_context_calls_get_hooks(self, mock_get_hooks): self.page.get_context(self.request) mock_get_hooks.assert_called_with('cfgovpage_context_handlers') def test_get_context_no_banners(self): test_context = self.page.get_context(self.request) self.assertFalse(test_context['banners']) def test_get_context_one_banner_not_matching(self): Banner.objects.create(title='Banner', url_pattern='foo', enabled=True) test_context = self.page.get_context(self.request) self.assertFalse(test_context['banners']) def test_get_context_one_banner_matching(self): Banner.objects.create(title='Banner', url_pattern='/', enabled=True) test_context = self.page.get_context(self.request) self.assertTrue(test_context['banners']) def test_get_context_one_banner_matching_disabled(self): Banner.objects.create(title='Banner', url_pattern='/', enabled=False) test_context = self.page.get_context(self.request) self.assertFalse(test_context['banners']) def test_get_context_multiple_banners_matching(self): Banner.objects.create(title='Banner', url_pattern='/', enabled=True) Banner.objects.create(title='Banner2', url_pattern='/', enabled=True) Banner.objects.create(title='Banner3', url_pattern='/', enabled=False) Banner.objects.create(title='Banner4', url_pattern='foo', enabled=True) test_context = self.page.get_context(self.request) self.assertEqual(test_context['banners'].count(), 2) def test_get_context_no_schema_json(self): test_context = self.page.get_context(self.request) self.assertNotIn('schema_json', test_context) def test_get_context_with_schema_json(self): self.page.schema_json = { "@type": "SpecialAnnouncement", "@context": "http://schema.org", "category": "https://www.wikidata.org/wiki/Q81068910", "name": "Special announcement headline", "text": "Special announcement details", "datePosted": "2020-03-17", "expires": "2020-03-24" } test_context = self.page.get_context(self.request) self.assertIn('schema_json', test_context)
def test_page_pulls_in_child_block_media(self): page = CFGOVPage() page.sidefoot = blocks.StreamValue(page.sidefoot.stream_block, [ { 'type': 'email_signup', 'value': { 'heading': 'Heading' } }, ], True) self.assertEqual(page.media, ['email-signup.js'])
def test_page_pulls_in_child_block_media(self): page = CFGOVPage() page.sidefoot = blocks.StreamValue( page.sidefoot.stream_block, [ { 'type': 'email_signup', 'value': {'heading': 'Heading'} }, ], True ) self.assertEqual(page.media, ['email-signup.js'])
def test_rich_text_links_get_expanded(self): page = CFGOVPage(title='foo bar', slug='foo-bar') publish_page(page) link = f'<body><a id="{page.id}" linktype="page">foo bar</a></body>' output = parse_links(link) self.assertEqual('<body><a href="/foo-bar/">foo bar</a></body>', output)
def test_nav_does_not_include_non_browse_type_sibling_pages(self): non_browse_page = CFGOVPage(title='Non-browse page') helpers.publish_page(child=non_browse_page) nav, has_children = util.get_secondary_nav_items( self.request, self.browse_page1) self.assertEqual(len(nav), 2)
class TestCFGOVPageCopy(TestCase): def setUp(self): self.site = Site.objects.first() self.root_page = self.site.root_page self.page_with_tags = CFGOVPage(title='Tagged', slug='tagged', live=True) save_new_page(self.page_with_tags, root=self.root_page) self.page_with_tags.tags.add('tag1') self.page_with_tags.authors.add('author1') self.page_with_tags.save() def check_tagged_page_copies_without_error(self): test_page = self.page_with_tags new_page = test_page.copy(update_attrs={ "slug": f"{test_page.slug}-copy", "title": f"{test_page.title} COPY" }) self.assertEqual(new_page.title, "Tagged COPY")
def test_has_children_is_false_for_browse_page_with_only_non_browse_children(self): browse_page3 = BrowsePage(title='Browse page 3') helpers.publish_page(child=browse_page3) child_of_browse_page3 = CFGOVPage(title='Non-browse child of browse page') helpers.save_new_page(child_of_browse_page3, browse_page3) nav, has_children = util.get_secondary_nav_items( self.request, browse_page3 ) self.assertEqual(has_children, False)
def setUp(self): self.page = mock.Mock() self.request = mock.Mock() self.page_versions = [ mock.Mock(**{'content_json': {'live': False, 'shared': False}}), # draft mock.Mock(**{'content_json': {'live': False, 'shared': True}}), # shared mock.Mock(**{'content_json': {'live': True, 'shared': False}}), # live mock.Mock(**{'content_json': {'live': True, 'shared': True}}), # live and shared ] self.page.revisions.all().order_by.return_value = self.page_versions self.new_page = CFGOVPage(title='a cfgov page') self.new_page.live = False self.new_page.shared = False helpers.save_new_page(self.new_page) content_json = json.loads(self.new_page.to_json()) # create the various page revisions # revision 1 content_json['title'] = 'revision 1' content_json['live'] = True content_json['shared'] = True self.revision_1 = self.new_page.revisions.create(content_json=json.dumps(content_json)) # rev 2 content_json['title'] = 'revision 2' content_json['live'] = True content_json['shared'] = False self.revision_2 = self.new_page.revisions.create(content_json=json.dumps(content_json)) # rev 3 content_json['title'] = 'revision 3' content_json['live'] = False content_json['shared'] = True self.revision_3 = self.new_page.revisions.create(content_json=json.dumps(content_json)) # rev 4 content_json['title'] = 'revision 4' content_json['live'] = False content_json['shared'] = False self.revision_4 = self.new_page.revisions.create(content_json=json.dumps(content_json))
class TestCFGOVPageBreadcrumbs(TestCase): def setUp(self): self.factory = RequestFactory() self.site = Site.objects.first() self.root_page = self.site.root_page self.top_level_page = CFGOVPage(title='top', slug='top', live=True) save_new_page(self.top_level_page, root=self.root_page) self.second_level_page = CFGOVPage(title='second', slug='second', live=True) save_new_page(self.second_level_page, root=self.top_level_page) self.third_level_page = CFGOVPage(title='third', slug='third', live=True) save_new_page(self.third_level_page, root=self.second_level_page) def test_get_breadcrumbs_forced_homepage_descendant(self): request = self.factory.get('/top/second') request.site = self.site self.top_level_page.force_breadcrumbs = True self.top_level_page.save() self.assertIn( 'top', [p.slug for p in self.second_level_page.get_breadcrumbs(request)]) def test_get_breadcrumbs_no_homepage_descendant(self): request = self.factory.get('/top/second') request.site = self.site self.assertNotIn( 'top', [p.slug for p in self.second_level_page.get_breadcrumbs(request)]) def test_get_breadcrumbs_two_levels_deep(self): request = self.factory.get('/top/second/third') request.site = self.site self.assertNotIn( 'top', [p.slug for p in self.third_level_page.get_breadcrumbs(request)]) self.assertIn( 'second', [p.slug for p in self.third_level_page.get_breadcrumbs(request)])
def setUp(self): self.factory = RequestFactory() self.site = Site.objects.first() self.root_page = self.site.root_page self.top_level_page = CFGOVPage(title='top', slug='top', live=True) save_new_page(self.top_level_page, root=self.root_page) self.second_level_page = CFGOVPage(title='second', slug='second', live=True) save_new_page(self.second_level_page, root=self.top_level_page) self.third_level_page = CFGOVPage(title='third', slug='third', live=True) save_new_page(self.third_level_page, root=self.second_level_page)
class TestCFGOVPage(TestCase): def setUp(self): self.page = CFGOVPage(title='Test', slug='test') self.factory = RequestFactory() self.request = self.factory.get('/') def test_post_preview_cache_key_contains_page_id(self): save_new_page(self.page) key = self.page.post_preview_cache_key self.assertIn(str(self.page.id), key) @mock.patch('six.moves.builtins.super') @mock.patch('v1.models.base.hooks') def test_get_context_calls_get_context(self, mock_hooks, mock_super): self.page.get_context(self.request) mock_super.assert_called_with(CFGOVPage, self.page) mock_super().get_context.assert_called_with(self.request) @mock.patch('six.moves.builtins.super') @mock.patch('v1.models.base.hooks') def test_get_context_calls_get_hooks(self, mock_hooks, mock_super): self.page.get_context(self.request) mock_hooks.get_hooks.assert_called_with('cfgovpage_context_handlers') @mock.patch('six.moves.builtins.super') @mock.patch('v1.models.base.hooks') def test_get_context_calls_hook_functions(self, mock_hooks, mock_super): fn = mock.Mock() mock_hooks.get_hooks.return_value = [fn] self.page.get_context(self.request) fn.assert_called_with( self.page, self.request, mock_super().get_context() ) @mock.patch('six.moves.builtins.super') @mock.patch('v1.models.base.hooks') def test_get_context_returns_context(self, mock_hooks, mock_super): result = self.page.get_context(self.request) self.assertEqual(result, mock_super().get_context()) @mock.patch('six.moves.builtins.super') def test_serve_calls_super_on_non_ajax_request(self, mock_super): self.page.serve(self.request) mock_super.assert_called_with(CFGOVPage, self.page) mock_super().serve.assert_called_with(self.request) @mock.patch('six.moves.builtins.super') @mock.patch('v1.models.base.CFGOVPage.serve_post') def test_serve_calls_serve_post_on_post_request( self, mock_serve_post, mock_super): self.request = self.factory.post('/') self.page.serve(self.request) mock_serve_post.assert_called_with(self.request) def test_serve_post_returns_400_for_no_form_id(self): request = self.factory.post('/') response = self.page.serve_post(request) self.assertIsInstance(response, HttpResponseBadRequest) def test_serve_post_returns_json_400_for_no_form_id(self): request = self.factory.post( '/', HTTP_X_REQUESTED_WITH='XMLHttpRequest' ) response = self.page.serve_post(request) self.assertEqual(response.content, b'{"result": "error"}') self.assertEqual(response.status_code, 400) def test_serve_post_returns_400_for_invalid_form_id_wrong_parts(self): request = self.factory.post('/', {'form_id': 'foo'}) response = self.page.serve_post(request) self.assertIsInstance(response, HttpResponseBadRequest) def test_serve_post_returns_400_for_invalid_form_id_invalid_field(self): request = self.factory.post('/', {'form_id': 'form-foo-2'}) response = self.page.serve_post(request) self.assertIsInstance(response, HttpResponseBadRequest) def test_serve_post_returns_400_for_invalid_form_id_invalid_index(self): page = BrowsePage(title='test', slug='test') request = self.factory.post('/', {'form_id': 'form-content-99'}) response = page.serve_post(request) self.assertIsInstance(response, HttpResponseBadRequest) def test_serve_post_valid_calls_feedback_block_handler(self): """A valid post should call the feedback block handler. This returns a redirect to the calling page and also uses the Django messages framework to set a message. """ page = BrowsePage(title='test', slug='test') page.content = blocks.StreamValue( page.content.stream_block, [{'type': 'feedback', 'value': 'something'}], True ) save_new_page(page) request = self.factory.post('/', {'form_id': 'form-content-0'}) SessionMiddleware().process_request(request) MessageMiddleware().process_request(request) response = page.serve_post(request) self.assertEqual( (response.status_code, response['Location']), (302, request.path) ) @mock.patch('v1.models.base.TemplateResponse') @mock.patch('v1.models.base.CFGOVPage.get_template') @mock.patch('v1.models.base.CFGOVPage.get_context') @mock.patch('v1.models.base.getattr') def test_serve_post_gets_streamfield_from_page_using_form_id( self, mock_getattr, mock_get_context, mock_get_template, mock_response): mock_getattr.return_value = mock.MagicMock() mock_get_context.return_value = mock.MagicMock() self.request = self.factory.post( '/', {'form_id': 'form-content-0'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest' ) self.page.serve_post(self.request) mock_getattr.assert_called_with(self.page, 'content', None) @mock.patch('v1.models.base.TemplateResponse') @mock.patch('v1.models.base.CFGOVPage.get_template') @mock.patch('v1.models.base.CFGOVPage.get_context') @mock.patch('v1.models.base.getattr') def test_serve_post_calls_module_get_result( self, mock_getattr, mock_get_context, mock_get_template, mock_response): self.request = self.factory.post( '/', {'form_id': 'form-content-0'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest' ) self.page.serve_post(self.request) module = mock_getattr()[0] module.block.get_result.assert_called_with( self.page, self.request, module.value, True ) @mock.patch('v1.models.base.isinstance') @mock.patch('v1.models.base.TemplateResponse') @mock.patch('v1.models.base.CFGOVPage.get_template') @mock.patch('v1.models.base.CFGOVPage.get_context') @mock.patch('v1.models.base.getattr') def test_serve_post_returns_result_if_response( self, mock_getattr, mock_get_context, mock_get_template, mock_response, mock_isinstance): mock_getattr.return_value = mock.MagicMock() mock_get_context.return_value = mock.MagicMock() self.request = self.factory.post( '/', {'form_id': 'form-content-0'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest' ) result = self.page.serve_post(self.request) module = mock_getattr()[0] self.assertEqual(result, module.block.get_result()) @mock.patch('v1.models.base.TemplateResponse') @mock.patch('v1.models.base.CFGOVPage.get_template') @mock.patch('v1.models.base.CFGOVPage.get_context') @mock.patch('v1.models.base.getattr') def test_serve_post_calls_get_context( self, mock_getattr, mock_get_context, mock_get_template, mock_response): mock_getattr.return_value = mock.MagicMock() mock_get_context.return_value = mock.MagicMock() self.request = self.factory.post( '/', {'form_id': 'form-content-0'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest' ) self.page.serve_post(self.request) self.assertTrue(mock_get_context.called) @mock.patch('v1.models.base.TemplateResponse') @mock.patch('v1.models.base.CFGOVPage.get_template') @mock.patch('v1.models.base.CFGOVPage.get_context') @mock.patch('v1.models.base.getattr') def test_serve_post_sets_context( self, mock_getattr, mock_get_context, mock_get_template, mock_response): context = {'form_modules': {'content': {}}} mock_getattr.return_value = mock.MagicMock() mock_get_context.return_value = context self.request = self.factory.post( '/', {'form_id': 'form-content-0'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest' ) self.page.serve_post(self.request) module = mock_getattr()[0] self.assertIn(0, context['form_modules']['content']) self.assertEqual( module.block.get_result(), context['form_modules']['content'][0] ) @mock.patch('v1.models.base.TemplateResponse') @mock.patch('v1.models.base.CFGOVPage.get_template') @mock.patch('v1.models.base.CFGOVPage.get_context') @mock.patch('v1.models.base.getattr') def test_serve_post_returns_template_response_if_result_not_response( self, mock_getattr, mock_get_context, mock_get_template, mock_response): mock_getattr.return_value = mock.MagicMock() mock_get_context.return_value = mock.MagicMock() self.request = self.factory.post( '/', {'form_id': 'form-content-0'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest' ) result = self.page.serve_post(self.request) mock_response.assert_called_with( self.request, mock_get_template(), mock_get_context() ) self.assertEqual(result, mock_response())
def test_empty_page_has_no_streamfield_js(self): return self.assertEqual(CFGOVPage().streamfield_js, [])
def test_no_root_returns_correctly(self): page = CFGOVPage(title='Test page') helpers.save_new_page(page) self.assertEqual(util.get_page_from_path('/test-page/'), page)
def test_empty_page_has_no_media(self): return self.assertEqual(CFGOVPage().media, [])
def test_empty_page_has_no_page_js(self): return self.assertEqual(CFGOVPage().page_js, [])
def setUp(self): self.page = CFGOVPage(title='Test', slug='test') self.factory = RequestFactory() self.request = self.factory.get('/')
def test_live_with_another_live_page(self): page = CFGOVPage(title='test', slug='test', live=True) save_new_page(page) self.check_live_counts(on_live_host=2)
def make_page_with_category(self, category): page = CFGOVPage(title='title', slug=get_random_string()) publish_page(page) category = CFGOVPageCategory(page=page, name=category) category.save()
class TestCFGOVPage(TestCase): def setUp(self): self.page = CFGOVPage(title='Test', slug='test') self.factory = RequestFactory() self.request = self.factory.get('/') def test_post_preview_cache_key_contains_page_id(self): save_new_page(self.page) key = self.page.post_preview_cache_key self.assertIn(str(self.page.id), key) @mock.patch('builtins.super') def test_serve_calls_super_on_non_ajax_request(self, mock_super): self.page.serve(self.request) mock_super.assert_called_with(CFGOVPage, self.page) mock_super().serve.assert_called_with(self.request) @mock.patch('v1.models.base.CFGOVPage.serve_post') def test_serve_calls_serve_post_on_post_request(self, mock_serve_post): self.request = self.factory.post('/') self.page.serve(self.request) mock_serve_post.assert_called_with(self.request) def test_serve_post_returns_400_for_no_form_id(self): request = self.factory.post('/') response = self.page.serve_post(request) self.assertIsInstance(response, HttpResponseBadRequest) def test_serve_post_returns_json_400_for_no_form_id(self): request = self.factory.post('/', HTTP_X_REQUESTED_WITH='XMLHttpRequest') response = self.page.serve_post(request) self.assertEqual(response.content, b'{"result": "error"}') self.assertEqual(response.status_code, 400) def test_serve_post_returns_400_for_invalid_form_id_wrong_parts(self): request = self.factory.post('/', {'form_id': 'foo'}) response = self.page.serve_post(request) self.assertIsInstance(response, HttpResponseBadRequest) def test_serve_post_returns_400_for_invalid_form_id_invalid_field(self): request = self.factory.post('/', {'form_id': 'form-foo-2'}) response = self.page.serve_post(request) self.assertIsInstance(response, HttpResponseBadRequest) def test_serve_post_returns_400_for_invalid_form_id_invalid_index(self): page = BrowsePage(title='test', slug='test') request = self.factory.post('/', {'form_id': 'form-content-99'}) response = page.serve_post(request) self.assertIsInstance(response, HttpResponseBadRequest) def test_serve_post_returns_400_for_invalid_form_id_non_number_index(self): page = BrowsePage(title='test', slug='test') request = self.factory.post('/', {'form_id': 'form-content-abc'}) response = page.serve_post(request) self.assertIsInstance(response, HttpResponseBadRequest) def test_serve_post_returns_400_for_invalid_form_id_no_form_present(self): page = BrowsePage(title='test', slug='test') page.content = blocks.StreamValue(page.content.stream_block, [{ 'type': 'full_width_text', 'value': [] }], True) save_new_page(page) request = self.factory.post('/', {'form_id': 'form-content-0'}) response = page.serve_post(request) self.assertIsInstance(response, HttpResponseBadRequest) def test_serve_post_valid_calls_feedback_block_handler(self): """A valid post should call the feedback block handler. This returns a redirect to the calling page and also uses the Django messages framework to set a message. """ page = BrowsePage(title='test', slug='test') page.content = blocks.StreamValue(page.content.stream_block, [{ 'type': 'feedback', 'value': 'something' }], True) save_new_page(page) request = self.factory.post('/', {'form_id': 'form-content-0'}) SessionMiddleware().process_request(request) MessageMiddleware().process_request(request) response = page.serve_post(request) self.assertEqual((response.status_code, response['Location']), (302, request.path)) @mock.patch('v1.models.base.TemplateResponse') @mock.patch('v1.models.base.CFGOVPage.get_template') @mock.patch('v1.models.base.CFGOVPage.get_context') @mock.patch('v1.models.base.getattr') def test_serve_post_gets_streamfield_from_page_using_form_id( self, mock_getattr, mock_get_context, mock_get_template, mock_response): mock_getattr.return_value = mock.MagicMock() mock_get_context.return_value = mock.MagicMock() self.request = self.factory.post( '/', {'form_id': 'form-content-0'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.page.serve_post(self.request) mock_getattr.assert_called_with(self.page, 'content', None) @mock.patch('v1.models.base.TemplateResponse') @mock.patch('v1.models.base.CFGOVPage.get_template') @mock.patch('v1.models.base.CFGOVPage.get_context') @mock.patch('v1.models.base.getattr') def test_serve_post_calls_module_get_result(self, mock_getattr, mock_get_context, mock_get_template, mock_response): self.request = self.factory.post( '/', {'form_id': 'form-content-0'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.page.serve_post(self.request) module = mock_getattr()[0] module.block.get_result.assert_called_with(self.page, self.request, module.value, True) @mock.patch('v1.models.base.isinstance') @mock.patch('v1.models.base.TemplateResponse') @mock.patch('v1.models.base.CFGOVPage.get_template') @mock.patch('v1.models.base.CFGOVPage.get_context') @mock.patch('v1.models.base.getattr') def test_serve_post_returns_result_if_response(self, mock_getattr, mock_get_context, mock_get_template, mock_response, mock_isinstance): mock_getattr.return_value = mock.MagicMock() mock_get_context.return_value = mock.MagicMock() self.request = self.factory.post( '/', {'form_id': 'form-content-0'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') result = self.page.serve_post(self.request) module = mock_getattr()[0] self.assertEqual(result, module.block.get_result()) @mock.patch('v1.models.base.TemplateResponse') @mock.patch('v1.models.base.CFGOVPage.get_template') @mock.patch('v1.models.base.CFGOVPage.get_context') @mock.patch('v1.models.base.getattr') def test_serve_post_calls_get_context(self, mock_getattr, mock_get_context, mock_get_template, mock_response): mock_getattr.return_value = mock.MagicMock() mock_get_context.return_value = mock.MagicMock() self.request = self.factory.post( '/', {'form_id': 'form-content-0'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.page.serve_post(self.request) self.assertTrue(mock_get_context.called) @mock.patch('v1.models.base.TemplateResponse') @mock.patch('v1.models.base.CFGOVPage.get_template') @mock.patch('v1.models.base.CFGOVPage.get_context') @mock.patch('v1.models.base.getattr') def test_serve_post_sets_context(self, mock_getattr, mock_get_context, mock_get_template, mock_response): context = {'form_modules': {'content': {}}} mock_getattr.return_value = mock.MagicMock() mock_get_context.return_value = context self.request = self.factory.post( '/', {'form_id': 'form-content-0'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') self.page.serve_post(self.request) module = mock_getattr()[0] self.assertIn(0, context['form_modules']['content']) self.assertEqual(module.block.get_result(), context['form_modules']['content'][0]) @mock.patch('v1.models.base.TemplateResponse') @mock.patch('v1.models.base.CFGOVPage.get_template') @mock.patch('v1.models.base.CFGOVPage.get_context') @mock.patch('v1.models.base.getattr') def test_serve_post_returns_template_response_if_result_not_response( self, mock_getattr, mock_get_context, mock_get_template, mock_response): mock_getattr.return_value = mock.MagicMock() mock_get_context.return_value = mock.MagicMock() self.request = self.factory.post( '/', {'form_id': 'form-content-0'}, HTTP_X_REQUESTED_WITH='XMLHttpRequest') result = self.page.serve_post(self.request) mock_response.assert_called_with(self.request, mock_get_template(), mock_get_context()) self.assertEqual(result, mock_response()) def test_archived_property(self): # Test default value of is_archived results in False property self.assertFalse(self.page.archived) self.page.is_archived = 'no' self.assertFalse(self.page.archived) self.page.is_archived = 'never' self.assertFalse(self.page.archived) self.page.is_archived = 'yes' self.assertTrue(self.page.archived)
def test_with_root_returns_correctly(self): page = CFGOVPage(title='Test page 2') helpers.save_new_page(page) root = HomePage.objects.get(title='CFGov') self.assertEqual(util.get_page_from_path('/test-page-2/', root), page)
def make_page(self, path, live): page = CFGOVPage(slug=path, title=path) page.live = live save_new_page(page) return page
def make_page(self, path, live, shared): page = CFGOVPage(slug=path, title=path) page.live = live page.shared = shared save_new_page(page) return page
class TestUtilFunctions(TestCase): def setUp(self): self.page = mock.Mock() self.request = mock.Mock() self.page_versions = [ mock.Mock(**{'content_json': {'live': False, 'shared': False}}), # draft mock.Mock(**{'content_json': {'live': False, 'shared': True}}), # shared mock.Mock(**{'content_json': {'live': True, 'shared': False}}), # live mock.Mock(**{'content_json': {'live': True, 'shared': True}}), # live and shared ] self.page.revisions.all().order_by.return_value = self.page_versions self.new_page = CFGOVPage(title='a cfgov page') self.new_page.live = False self.new_page.shared = False helpers.save_new_page(self.new_page) content_json = json.loads(self.new_page.to_json()) # create the various page revisions # revision 1 content_json['title'] = 'revision 1' content_json['live'] = True content_json['shared'] = True self.revision_1 = self.new_page.revisions.create(content_json=json.dumps(content_json)) # rev 2 content_json['title'] = 'revision 2' content_json['live'] = True content_json['shared'] = False self.revision_2 = self.new_page.revisions.create(content_json=json.dumps(content_json)) # rev 3 content_json['title'] = 'revision 3' content_json['live'] = False content_json['shared'] = True self.revision_3 = self.new_page.revisions.create(content_json=json.dumps(content_json)) # rev 4 content_json['title'] = 'revision 4' content_json['live'] = False content_json['shared'] = False self.revision_4 = self.new_page.revisions.create(content_json=json.dumps(content_json)) def test_production_returns_first_live_page(self): self.request.is_staging = False version = self.new_page.get_appropriate_page_version(self.request) self.assertEqual(version.title, 'revision 2') def test_shared_returns_first_shared_page(self): self.request.is_staging = True version = self.new_page.get_appropriate_page_version(self.request) self.assertEqual(version.title, 'revision 3') def test_shared_returns_None_for_only_draft_versions(self): self.revision_1.delete() self.revision_2.delete() self.revision_3.delete() version = self.new_page.get_appropriate_page_version(self.request) self.assertIsNone(version) def test_shared_returns_None_if_page_not_live_when_on_production(self): self.revision_1.delete() self.revision_2.delete() self.request.is_staging = False version = self.new_page.get_appropriate_page_version(self.request) self.assertIsNone(version) @mock.patch('__builtin__.isinstance') @mock.patch('__builtin__.vars') @mock.patch('v1.util.util.StreamValue') def get_streamfields_returns_dict_of_streamfields(self, mock_streamvalueclass, mock_vars, mock_isinstance): page = mock.Mock() mock_vars.items.return_value = {'key': 'value'} mock_isinstance.return_value = True result = util.get_streamfields(page) self.assertEqual(result, {'key': 'value'})
def test_rich_text_links_get_expanded(self): page = CFGOVPage(title='foo bar', slug='foo-bar') publish_page(page) link = b'<a id="{}" linktype="page">foo bar</a>'.format(page.id) output = parse_links(link) self.assertEqual(b'<a href="/foo-bar/">foo bar</a>', output)