def test_single_result_per_page(self): """ Page should show up once in results, even if the same link occurs multiple times in it. """ page = BlogPage( title="Test Blog Page", slug="test-blog-page", content=json.dumps( [ { "type": "well", "value": { "content": "<a href=https://www.foobar.com>...</a>" }, } ] ), header=json.dumps( [ { "type": "text_introduction", "value": { "intro": "<a href=https://www.foobar.com>...</a>" }, } ] ), ) publish_page(page) response = self.client.post( "/admin/external-links/", {"url": "www.foobar.com"} ) self.assertContains( response, "There is 1 matching page and 0 matching snippets" )
def test_cache_gets_called_when_visiting_filterable_page(self): # Create a filterable page page = BrowseFilterablePage( title='test browse filterable page', slug='test-browse-filterable-page' ) page.content = StreamValue( page.content.stream_block, [atomic.filter_controls], True ) publish_page(page) # Add a child to that filterable page so that there are results # with a post preview child_page = BlogPage( title='test blog page', slug='test-blog-page' ) page.add_child(instance=child_page) cache = caches['post_preview'] with patch.object(cache, 'add') as add_to_cache: # Navigate to the filterable page so that `post-preview.html` loads self.client.get('/test-browse-filterable-page/') self.assertTrue(add_to_cache.called)
def test_single_result_per_page(self): """ Page should show up once in results, even if the same link occurs multiple times in it. """ page = BlogPage(title='Test Blog Page', slug='test-blog-page', content=json.dumps([{ 'type': 'well', 'value': { 'content': '<a href=https://www.foobar.com>...</a>' }, }]), header=json.dumps([{ 'type': 'text_introduction', 'value': { 'intro': '<a href=https://www.foobar.com>...</a>' }, }])) publish_page(page) response = self.client.post('/admin/external-links/', {'url': 'www.foobar.com'}) self.assertContains( response, "There is 1 matching page and 0 matching snippets")
def test_no_duplicates(self): """ Page should show up once in results, even if field the link is in belongs to a parent page """ page = BlogPage( title="Test Blog Page", slug="test-blog-page", sidefoot=json.dumps( [ { "type": "related_links", "value": { "links": [ {"url": "https://www.foobar.com", "text": ""} ] }, } ] ), ) publish_page(page) response = self.client.post( "/admin/external-links/", {"url": "www.foobar.com"} ) self.assertContains( response, "There is 1 matching page and 0 matching snippets" )
def test_cache_gets_called_when_visiting_filterable_page(self): # Create a filterable page page = BrowseFilterablePage( title='test browse filterable page', slug='test-browse-filterable-page', content=json.dumps([atomic.filter_controls]) ) publish_page(page) # Add a child to that filterable page so that there are results # with a post preview child_page = BlogPage( title='test blog page', slug='test-blog-page' ) page.add_child(instance=child_page) self.rebuild_elasticsearch_index('v1', stdout=StringIO()) cache = caches['post_preview'] with patch.object(cache, 'add') as add_to_cache: # Navigate to the filterable page so that `post-preview.html` loads self.client.get('/test-browse-filterable-page/') self.assertTrue(add_to_cache.called)
def setUpTestData(cls): cls.site = Site.objects.get(is_default_site=True) event = EventPage(title='Event Test', start_dt=datetime(2021, 2, 16, tzinfo=timezone('UTC')), end_dt=datetime(2021, 2, 16, tzinfo=timezone('UTC'))) event.tags.add('test-topic') event.categories.add(CFGOVPageCategory(name='test-category')) event.authors.add('test-author') publish_page(event) enforcement = EnforcementActionPage( title="Great Test Page", preview_description='This is a great test page.', initial_filing_date=datetime.now(timezone('UTC'))) status = EnforcementActionStatus(status='expired-terminated-dismissed') enforcement.statuses.add(status) product = EnforcementActionProduct(product='Debt Collection') enforcement.products.add(product) publish_page(enforcement) blog = BlogPage(title="Blog Page") publish_page(blog) cls.event = event cls.enforcement = enforcement cls.blog = blog cls.rebuild_elasticsearch_index('v1', stdout=StringIO())
def test_no_duplicates(self): """ Page should show up once in results, even if field the link is in belongs to a parent page """ page = BlogPage(title='Test Blog Page', slug='test-blog-page', sidefoot=json.dumps([{ 'type': 'related_links', 'value': { 'links': [{ 'url': 'https://www.foobar.com', 'text': '' }] }, }])) publish_page(page) response = self.client.post('/admin/external-links/', {'url': 'www.foobar.com'}) self.assertContains( response, "There is 1 matching page and 0 matching snippets")
def setUp(self): # add some authors to a CFGOV page and give it some tags self.author1 = 'Some Author' self.author2 = 'Another Person' self.author3 = 'A Third Author' self.page_with_authors = CFGOVPage(title='a cfgov page with authors') helpers.save_new_page(self.page_with_authors) self.page_with_authors.authors.add(self.author1) self.page_with_authors.authors.add(self.author2) self.page_with_authors.authors.add(self.author3) self.page_with_authors.tags.add('tag 1') self.page_with_authors.tags.add('tag 2') # set up parent pages for the different types of related # posts we can have self.blog_parent = CFGOVPage(slug='blog', title='blog parent') self.newsroom_parent = CFGOVPage(slug='newsroom', title='newsroom parent') self.events_parent = CFGOVPage(slug='events', title='events parent') self.archive_events_parent = CFGOVPage( slug='archive-past-events', title='archive past events parent') self.activity_log = CFGOVPage(slug='activity-log', title='activity log') helpers.save_new_page(self.blog_parent) helpers.save_new_page(self.newsroom_parent) helpers.save_new_page(self.events_parent) helpers.save_new_page(self.archive_events_parent) helpers.save_new_page(self.activity_log) # set up children of the parent pages and give them some tags # and some categories self.blog_child1 = BlogPage(title='blog child 1', date_published=dt.date(2016, 9, 1)) self.blog_child1.tags.add('tag 1') self.blog_child1.categories.add( CFGOVPageCategory(name='info-for-consumers')) self.blog_child2 = BlogPage(title='blog child 2', date_published=dt.date(2016, 9, 2)) self.blog_child2.tags.add('tag 2') self.blog_child2.categories.add( CFGOVPageCategory(name='policy_compliance')) self.newsroom_child1 = NewsroomPage(title='newsroom child 1', date_published=dt.date(2016, 9, 2)) self.newsroom_child1.tags.add('tag 1') self.newsroom_child1.tags.add('tag 2') self.newsroom_child1.categories.add(CFGOVPageCategory(name='op-ed')) self.newsroom_child2 = NewsroomPage(title='newsroom child 2', date_published=dt.date(2016, 9, 3)) self.newsroom_child2.tags.add('tag 2') self.newsroom_child2.categories.add( CFGOVPageCategory(name='some-other-category')) self.events_child1 = EventPage(title='events child 1', date_published=dt.date(2016, 9, 7), start_dt=dt.datetime.now( timezone('UTC'))) self.events_child1.tags.add('tag 1') self.events_child2 = EventPage(title='events child 2', date_published=dt.date(2016, 9, 5), start_dt=dt.datetime.now( timezone('UTC'))) self.events_child2.tags.add('tag 2') helpers.save_new_page(self.blog_child1, self.blog_parent) helpers.save_new_page(self.blog_child2, self.blog_parent) helpers.save_new_page(self.newsroom_child1, self.newsroom_parent) helpers.save_new_page(self.newsroom_child2, self.newsroom_parent) helpers.save_new_page(self.events_child1, self.events_parent) # mock a stream block that dictates how to retrieve the related posts # note that because of the way that the related_posts_category_lookup function # works i.e. by consulting a hard-coded object, the specific_categories # slot of the dict has to be something that it can actually find. self.block_value = { 'limit': 3, 'show_heading': True, 'header_title': 'Further reading', 'relate_posts': False, 'relate_newsroom': False, 'relate_events': False, 'specific_categories': [], 'and_filtering': False, }
def run(): print 'Running script \'scripts.initial_test_data\' ...' admin_user = User.objects.filter(username='******') if not admin_user: admin_user = User(username='******', password=make_password( os.environ.get('WAGTAIL_ADMIN_PW')), is_superuser=True, is_active=True, is_staff=True) admin_user.save() else: admin_user = admin_user[0] # # Creates a new site root `CFGov` site_root = HomePage.objects.filter(title='CFGOV') if not site_root: root = Page.objects.first() site_root = HomePage(title='CFGOV', slug='home', depth=2, owner=admin_user) site_root.live = True root.add_child(instance=site_root) latest = site_root.save_revision(user=admin_user, submitted_for_moderation=False) latest.save() else: site_root = site_root[0] # Setting new site root site = Site.objects.first() if site.root_page_id != site_root.id: site.port = 8000 site.root_page_id = site_root.id site.save() content_site = Site(hostname='content.localhost', port=8000, root_page_id=site_root.id) content_site.save() def publish_page(child=None, root=site_root): try: root.add_child(instance=child) except NodeAlreadySaved: pass revision = child.save_revision( user=admin_user, submitted_for_moderation=False, ) revision.publish() # Create each Page Type contact = Contact.objects.filter(heading='Test User') if not contact: contact = Contact(heading='Test User') else: contact = contact[0] contact.contact_info = StreamValue( contact.contact_info.stream_block, [{ "type": "email", "value": { "emails": [{ "url": "/", "text": "*****@*****.**" }] } }, { "type": "phone", "value": { "phones": [{ "tty": "", "number": "1234567890", "vanity": "" }], "fax": True } }, { "type": "address", "value": { "city": "Washington", "title": "", "label": "Address", "state": "DC", "street": "123 abc street", "zip_code": "20012" } }], True) contact.save() lap = LandingPage.objects.filter(title='Landing Page') if not lap: lap = LandingPage(title='Landing Page', slug='landing-page', owner=admin_user) else: lap = lap[0] lap.content = StreamValue(lap.content.stream_block, [{ "type": "image_text_25_75_group", "value": { "heading": "Image 25 75 Group", "image_texts": [{ "body": "", "has_rule": False, "image": { "alt": "", "upload": 84 }, "heading": "", "links": [{ "url": "/", "text": "test" }] }] } }, { "type": "image_text_50_50_group", "value": { "heading": "Image 50 50 Group", "image_texts": [{ "body": "", "links": [{ "url": "/", "text": "test" }], "image": { "alt": "", "upload": 84 }, "is_widescreen": False, "is_button": False, "heading": "" }] } }, { "type": "half_width_link_blob_group", "value": { "link_blobs": [{ "body": "", "heading": "", "links": [{ "url": "/", "text": "test" }] }], "heading": "Half Width Link Blob Group" } }], True) publish_page(lap) sp = SublandingPage.objects.filter(title='Sublanding Page') if not sp: sp = SublandingPage(title='Sublanding Page', slug='sublanding-page', owner=admin_user) else: sp = sp[0] sp.content = StreamValue(sp.content.stream_block, [{ "type": "contact", "value": { "body": "", "header": "Contact", "contact": contact.id } }], True) sp.sidefoot = StreamValue(sp.sidefoot.stream_block, [{ "type": "email_signup", "value": { "text": "", "gd_code": "", "heading": "Email Sign Up", "form_field": [{ "info": "", "type": "", "required": False, "label": "Email Sign up", "btn_text": "", "placeholder": "" }] } }, { "type": "rss_feed", "value": "blog_feed" }], True) publish_page(sp) bp = BrowsePage.objects.filter(title='Browse Page') if not bp: bp = BrowsePage(title='Browse Page', slug='browse-page', owner=admin_user) else: bp = bp[0] bp.header = StreamValue(bp.header.stream_block, [{ 'type': 'featured_content', 'value': { 'body': "<p>this is a featured content body</p>" } }], True) bp.content = StreamValue(bp.content.stream_block, [{ 'type': 'expandable', 'value': { 'label': 'this is an expandable' } }], True) publish_page(bp) # Filterable Pages bfp = BrowseFilterablePage.objects.filter(title='Browse Filterable Page') if not bfp: bfp = BrowseFilterablePage(title='Browse Filterable Page', slug='browse-filterable-page', owner=admin_user) else: bfp = bfp[0] bfp.header = StreamValue(bfp.header.stream_block, [{ 'type': 'text_introduction', 'value': { 'intro': 'this is an intro' } }], True) publish_page(bfp) sfp = SublandingFilterablePage.objects.filter( title='Sublanding Filterable Page') if not sfp: sfp = SublandingFilterablePage(title='Sublanding Filterable Page', slug='sublanding-filterable-page', owner=admin_user) else: sfp = sfp[0] sfp.header = StreamValue(sfp.header.stream_block, [{ 'type': 'hero', 'value': { 'heading': "this is a hero heading" } }], True) publish_page(sfp) eap = EventArchivePage.objects.filter(title='Event Archive Page') if not eap: eap = EventArchivePage(title='Event Archive Page', slug='event-archive-page', owner=admin_user) else: eap = eap[0] publish_page(eap) nlp = NewsroomLandingPage.objects.filter(title='Newsroom Landing Page') if not nlp: nlp = NewsroomLandingPage(title='Newsroom Landing Page', slug='newsroom-landing-page', owner=admin_user) else: nlp = nlp[0] publish_page(nlp) # Filter Pages if not EventPage.objects.filter(title='Event Page'): ep = EventPage(title='Event Page', slug='event-page', owner=admin_user) publish_page(ep, bfp) ddp = DocumentDetailPage.objects.filter(title='Document Detail Page') if not ddp: ddp = DocumentDetailPage(title='Document Detail Page', slug='document-detail-page', owner=admin_user) else: ddp = ddp[0] ddp.sidefoot = StreamValue(ddp.sidefoot.stream_block, [{ 'type': 'related_metadata', 'value': { 'content': [{ 'type': 'text', 'value': { 'heading': 'this is a related metadata heading' } }] } }], True) publish_page(ddp, bfp) lp = LearnPage.objects.filter(title='Learn Page') if not lp: lp = LearnPage(title='Learn Page', slug='learn-page', owner=admin_user) else: lp = lp[0] lp.content = StreamValue(lp.content.stream_block, [{ 'type': 'full_width_text', 'value': [{ 'type': 'quote', 'value': { 'body': 'this is a quote', 'citation': 'a citation' } }] }, { 'type': 'call_to_action', 'value': { 'paragraph_text': 'this is a call to action' } }], True) publish_page(lp, bfp) if not ActivityLogPage.objects.filter(title='Activity Log Page'): alp = ActivityLogPage(title='Activity Log Page', slug='activity-log-page', owner=admin_user) publish_page(alp) if not NewsroomPage.objects.filter(title='Newsroom Page'): np = NewsroomPage(title='Newsroom Page', slug='newsroom-page', owner=admin_user) publish_page(np, nlp) if not LegacyNewsroomPage.objects.filter(title='Legacy Newsroom Page'): lnp = LegacyNewsroomPage(title='Legacy Newsroom Page', slug='legacy-newsroom-page', owner=admin_user) publish_page(lnp, nlp) if not BlogPage.objects.filter(title='Blog Page'): bp = BlogPage(title='Blog Page', slug='blog-page', owner=admin_user) publish_page(bp, sfp) if not LegacyBlogPage.objects.filter(title='Legacy Blog Page'): lbp = LegacyBlogPage(title='Legacy Blog Page', slug='legacy-blog-page', owner=admin_user) publish_page(lbp, sfp) # Demo Page dp = DemoPage.objects.filter(title='Demo Page') if not dp: dp = DemoPage(title='Demo Page', slug='demo-page', owner=admin_user) else: dp = dp[0] dp.sidefoot = StreamValue(dp.sidefoot.stream_block, [{ 'type': 'related_links', 'value': { 'links': [{ 'url': '/url', 'text': 'this is a related link' }] } }], True) publish_page(dp) # Create and configure pages for testing page states draft = DemoPage.objects.filter(slug='draft-page') if not draft: draft = DemoPage(title='Draft Page', slug='draft-page', owner=admin_user, live=False, shared=False) site_root.add_child(instance=draft) else: draft = draft[0] draft.save_revision(user=admin_user) shared = DemoPage.objects.filter(slug='shared-page') if not shared: shared = DemoPage(title='Shared Page', slug='shared-page', owner=admin_user, live=False, shared=True) site_root.add_child(instance=shared) else: shared = shared[0] shared.save_revision(user=admin_user) shared_draft = DemoPage.objects.filter(slug='shared-draft-page') if not shared_draft: shared_draft = DemoPage(title='Shared Page', slug='shared-draft-page', owner=admin_user, live=False, shared=True) site_root.add_child(instance=shared_draft) else: shared_draft = shared_draft[0] shared_draft.save_revision(user=admin_user) shared_draft.title = 'Shared Draft Page' shared_draft.save() shared_draft.save_revision(user=admin_user) live = DemoPage.objects.filter(slug='live-page') if not live: live = DemoPage(title='Live Page', slug='live-page', owner=admin_user, live=True, shared=True) else: live = live[0] publish_page(live) livedraft = DemoPage.objects.filter(slug='live-draft-page') if not livedraft: livedraft = DemoPage(title='Live Draft Page', slug='live-draft-page', owner=admin_user, live=True, shared=True) else: livedraft = livedraft[0] publish_page(livedraft) livedraft.live = False livedraft.shared = False livedraft.title = 'Live Page' livedraft.save_revision(user=admin_user)