def test_data_snapshot_with_optional_fields(self): """ Data Snapshot with inquiry and tightness information correctly renders fields on a Browse Page""" browse_page = BrowsePage( title='Browse Page', slug='browse', ) # Adds a AUT market to a browse page browse_page.content = StreamValue( browse_page.content.stream_block, [atomic.data_snapshot_with_optional_fields], True ) publish_page(child=browse_page) response = self.client.get('/browse/') self.assertContains(response, '5 million') self.assertContains(response, '$64 billion') self.assertContains(response, '5% increase') self.assertContains(response, 'January 2015') self.assertContains(response, 'Loans originated') self.assertContains(response, 'Dollar value of new loans') self.assertContains(response, 'In year-over-year originations') # Should include inquiry or tightness information self.assertContains(response, '7.4% decrease') self.assertContains(response, 'In year-over-year inquiries') self.assertContains(response, '2.8% increase') self.assertContains(response, 'In year-over-year credit tightness')
def test_answer_context_with_nested_journey_referrer(self): """If the referrer is a nested Buying a House journey page, breadcrumbs should reflect the BAH page hierarchy.""" bah_page = BrowsePage(title='Buying a House', slug='owning-a-home') helpers.publish_page(child=bah_page) journey_path = JOURNEY_PATHS[0] journey_page = BrowsePage(title='Journey page', slug=journey_path.strip('/').split('/')[-1]) helpers.save_new_page(journey_page, bah_page) journey_child_page = BrowsePage(title='Journey child page', slug='child') helpers.save_new_page(journey_child_page, journey_page) page = self.page1 mock_site = mock.Mock() mock_site.root_page = HomePage.objects.get(slug='cfgov') request = HttpRequest() request.META['HTTP_REFERER'] = \ 'https://www.consumerfinance.gov' + journey_path + '/child' request.site = mock_site context = page.get_context(request) breadcrumbs = context['breadcrumb_items'] self.assertEqual(len(breadcrumbs), 3) self.assertEqual(breadcrumbs[0]['title'], 'Buying a House') self.assertEqual(breadcrumbs[1]['title'], 'Journey page') self.assertEqual(breadcrumbs[2]['title'], 'Journey child page')
def test_answer_context_with_journey_referrer_and_default_category(self): """ If the referrer is a Buying a House journey page and 'mortgages' category does not appear on answer page, breadcrumbs should lead back to BAH & referrer pages, and category should default to first category on answer.""" bah_page = BrowsePage(title='Buying a House', slug='owning-a-home') helpers.publish_page(child=bah_page) journey_path = JOURNEY_PATHS[0] journey_page = BrowsePage(title='Journey page', slug=journey_path.strip('/').split('/')[-1]) helpers.save_new_page(journey_page, bah_page) answer = self.answer1234 page = answer.english_page page.category.add(self.category) mock_site = mock.Mock() mock_site.root_page = HomePage.objects.get(slug='cfgov') request = HttpRequest() request.META['HTTP_REFERER'] = \ 'https://www.consumerfinance.gov' + journey_path request.site = mock_site context = page.get_context(request) breadcrumbs = context['breadcrumb_items'] self.assertEqual(len(breadcrumbs), 2) self.assertEqual(breadcrumbs[0]['title'], 'Buying a House') self.assertEqual(breadcrumbs[1]['title'], 'Journey page') self.assertEqual(context['category'], self.category)
def setUp(self): self.request = mock.MagicMock() self.browse_page1 = BrowsePage(title='Browse page 1') self.browse_page2 = BrowsePage(title='Browse page 2') helpers.publish_page(child=self.browse_page1) helpers.publish_page(child=self.browse_page2) self.child_of_browse_page1 = BrowsePage(title='Child of browse page 1') self.child_of_browse_page2 = BrowsePage(title='Child of browse page 2') helpers.save_new_page(self.child_of_browse_page1, self.browse_page1) helpers.save_new_page(self.child_of_browse_page2, self.browse_page2)
def test_doesnt_pull_in_media_for_nonexistent_child_blocks(self): page = BrowsePage() page.content = blocks.StreamValue(page.content.stream_block, [ { 'type': 'full_width_text', 'value': [], }, ], True) # The page media should only include the default BrowsePae media, and # shouldn't add any additional files because of the FullWithText. self.assertEqual(page.media, ['secondary-navigation.js'])
def test_expandable_group(self): """Expandable group correctly displays on a Browse Page""" browse_page = BrowsePage( title='Browse Page', slug='browse', ) browse_page.content = StreamValue(browse_page.content.stream_block, [atomic.expandable_group], True) publish_page(child=browse_page) response = django_client.get('/browse/') self.assertContains(response, 'Expandable Group') self.assertContains(response, 'Expandable group body')
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_resource_list_show_thumbnails_false(self): """ Resource List doesn't show thumbs when show_thumbnails is False""" no_thumbnails_page = BrowsePage( title='No Thumbnails Page', slug='no-thumbnails', ) no_thumbnails_page.content = StreamValue( no_thumbnails_page.content.stream_block, [atomic.snippet_list_show_thumbnails_false], True) publish_page(child=no_thumbnails_page) self.create_resource() response = self.client.get('/no-thumbnails/') self.assertNotContains(response, 'o-resource-list_list-thumbnail')
def test_resource_list_show_thumbnails_true(self): """ Resource List shows thumbnails when show_thumbnails is True""" thumbnails_page = BrowsePage( title='Thumbnails Page', slug='thumbnails', ) thumbnails_page.content = StreamValue( thumbnails_page.content.stream_block, [atomic.snippet_list_show_thumbnails_true], True) publish_page(child=thumbnails_page) self.create_resource() response = self.client.get('/thumbnails/') self.assertContains(response, 'o-resource-list_list-thumbnail')
def test_resource_list_set_col_width(self): """ Resource List Assets column width is fixed when set""" assets_width_page = BrowsePage( title='Assets Width Test Page', slug='assets-width', ) assets_width_page.content = StreamValue( assets_width_page.content.stream_block, [atomic.snippet_list_actions_column_width_40], True) publish_page(child=assets_width_page) self.create_resource() response = self.client.get('/assets-width/') self.assertContains(response, 'u-w40pct"')
def run(): default_site = Site.objects.get(is_default_site=True) root_page = default_site.root_page try: about_us = Page.objects.get(slug='about-us') except Page.DoesNotExist: logger.info('Creating page: About Us') about_us = LandingPage(title='About Us', slug='about-us', live=False) save_new_page(about_us, root=root_page) try: careers = Page.objects.get(slug='careers') except Page.DoesNotExist: logger.info('Creating page: Careers') careers = SublandingPage(title='Careers', slug='careers', live=False) save_new_page(careers, root=about_us) child_pages = [ ('Working at the CFPB', 'working-at-cfpb'), ('Job Application Process', 'application-process'), ('Students and Graduates', 'students-and-graduates'), ('Current Openings', 'current-openings'), ] for title, slug in child_pages: try: child_page = Page.objects.get(slug=slug) except Page.DoesNotExist: logger.info('Creating page: {}'.format(title)) child_page = BrowsePage(title=title, slug=slug, live=False) save_new_page(child_page, careers)
def test_doesnt_pull_in_media_for_nonexistent_child_blocks(self): page = BrowsePage() page.content = blocks.StreamValue( page.content.stream_block, [ { 'type': 'full_width_text', 'value': [], }, ], True ) # The page media should only include the default BrowsePae media, and # shouldn't add any additional files because of the FullWithText. self.assertEqual(page.media, ['secondary-navigation.js'])
def test_resource_list(self): """ Resource List renders thumbnails when show_thumbnails is True""" browse_page = BrowsePage( title='Browse Page', slug='browse', ) browse_page.content = StreamValue( browse_page.content.stream_block, [atomic.snippet_list_show_thumbnails_false], True) publish_page(child=browse_page) self.create_resource() response = self.client.get('/browse/') self.assertContains(response, 'Test Resource List') self.assertContains(response, 'Test Resource')
def test_returns_form_block(self): page = BrowsePage(title='test', slug='test') revision = save_new_page(page) registration_form_block = atomic.conference_registration_form set_stream_data(page, 'content', [registration_form_block]) self.assertEqual(get_registration_form_from_page(revision.page_id), registration_form_block)
def test_has_children_is_false_for_browse_page_with_no_children(self): browse_page_without_children = BrowsePage( title='Browse page without children') helpers.publish_page(child=browse_page_without_children) nav, has_children = util.get_secondary_nav_items( self.request, browse_page_without_children) self.assertEqual(has_children, False)
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 make_page_with_form(code='TEST_CODE', capacity=999): page = BrowsePage(title='test', slug='test') revision = save_new_page(page) block = atomic.conference_registration_form.copy() block['value'].update({ 'code': code, 'capacity': capacity, }) set_stream_data(page, 'content', [block]) return revision.page_id
def test_chart_block(self): """ Chart Block correctly renders fields on a Browse Page""" browse_page = BrowsePage( title='Browse Page', slug='browse', ) # Adds a AUT market to a browse page browse_page.content = StreamValue(browse_page.content.stream_block, [atomic.chart_block], True) publish_page(child=browse_page) response = self.client.get('/browse/') self.assertContains(response, 'Volume of credit cards originated') self.assertContains(response, 'foo/bar.csv') self.assertContains(response, 'Data not final.') self.assertContains( response, 'The most recent data available in this visualization are for April 2016' ) self.assertContains(response, 'January 2018')
def test_has_children_is_true_for_browse_page_with_browse_filterable_child( self): browse_filterable_page = BrowsePage(title='Non-browse page') helpers.publish_page(child=browse_filterable_page) browse_filterable_page_child = BrowseFilterablePage( title='Child of non-browse page') helpers.save_new_page(browse_filterable_page_child, browse_filterable_page) nav, has_children = util.get_secondary_nav_items( self.request, browse_filterable_page) self.assertEqual(has_children, True)
def setUp(self): TEST_CLUSTERS = { 1: [4, 5, 6], 2: [7, 8], 3: [9], } self.CLUSTERS = { 'TEST_CLUSTERS': TEST_CLUSTERS, } root_page = Page.objects.get(pk=1) self.page = BrowsePage(title="Split testing test page") root_page.add_child(instance=self.page)
def test_answer_context_with_process_as_journey_referrer(self): """If the referrer is a nested Buying a House journey page, breadcrumbs should reflect the BAH page hierarchy.""" bah_page = BrowsePage(title='Buying a House', slug='owning-a-home') helpers.publish_page(child=bah_page) journey_page = BrowsePage(title='Prepare page', slug='prepare') helpers.save_new_page(journey_page, bah_page) page = self.page1 mock_site = mock.Mock() mock_site.root_page = HomePage.objects.get(slug='cfgov') request = HttpRequest() request.META['HTTP_REFERER'] = \ 'https://www.consumerfinance.gov/owning-a-home/process/' request.site = mock_site context = page.get_context(request) breadcrumbs = context['breadcrumb_items'] self.assertEqual(len(breadcrumbs), 2) self.assertEqual(breadcrumbs[0]['title'], 'Buying a House') self.assertEqual(breadcrumbs[1]['title'], 'Prepare page')
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))
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) )
def test_raises_if_no_form_block(self): page = BrowsePage(title='test', slug='test') revision = save_new_page(page) with self.assertRaises(RuntimeError): get_registration_form_from_page(revision.page_id)
def test_page_no_form_raises_runtimeerror(self): page = BrowsePage(title='empty', slug='empty') revision = save_new_page(page) with self.assertRaises(RuntimeError): ConferenceExporter(page_id=revision.page_id)
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_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)