class TestPageQueryInSite(TestCase): fixtures = ['test.json'] def setUp(self): self.site_2_page = SimplePage( title="Site 2 page", slug="site_2_page", content="Hello", ) Page.get_first_root_node().add_child(instance=self.site_2_page) self.site_2_subpage = SimplePage( title="Site 2 subpage", slug="site_2_subpage", content="Hello again", ) self.site_2_page.add_child(instance=self.site_2_subpage) self.site_2 = Site.objects.create( hostname='example.com', port=8080, root_page=Page.objects.get(pk=self.site_2_page.pk), is_default_site=False ) self.about_us_page = SimplePage.objects.get(url_path='/home/about-us/') def test_in_site(self): site_2_pages = SimplePage.objects.in_site(self.site_2) self.assertIn(self.site_2_page, site_2_pages) self.assertIn(self.site_2_subpage, site_2_pages) self.assertNotIn(self.about_us_page, site_2_pages)
def test_future_go_live_page_will_not_be_published(self): page = SimplePage( title="Hello world!", slug="hello-world", content="hello", live=False, go_live_at=timezone.now() + timedelta(days=1), ) self.root_page.add_child(instance=page) page.save_revision(approved_go_live_at=timezone.now() - timedelta(days=1)) p = Page.objects.get(slug='hello-world') self.assertFalse(p.live) self.assertTrue( PageRevision.objects.filter(page=p).exclude( approved_go_live_at__isnull=True).exists()) management.call_command('publish_scheduled_pages') p = Page.objects.get(slug='hello-world') self.assertFalse(p.live) self.assertTrue( PageRevision.objects.filter(page=p).exclude( approved_go_live_at__isnull=True).exists())
def setUp(self): self.login() # Create some pages self.homepage = Page.objects.get(id=2) self.public_page = self.homepage.add_child(instance=SimplePage( title="Public page", content="hello", live=True, )) self.private_page = self.homepage.add_child(instance=SimplePage( title="Private page", content="hello", live=True, )) PageViewRestriction.objects.create(page=self.private_page, restriction_type='password', password='******') self.private_child_page = self.private_page.add_child( instance=SimplePage( title="Private child page", content="hello", live=True, ))
def test_has_changed_html(self): comparison = self.comparison_class( SimplePage._meta.get_field('content'), SimplePage(content="<b>Original</b> content"), SimplePage(content="Modified <i>content</i>"), ) self.assertEqual( comparison.htmldiff(), '<span class="deletion">Original</span><span class="addition">Modified</span> content' ) self.assertIsInstance(comparison.htmldiff(), SafeText) self.assertTrue(comparison.has_changed())
def test_hasnt_changed(self): comparison = self.comparison_class( SimplePage._meta.get_field('content'), SimplePage(content="Content"), SimplePage(content="Content"), ) self.assertTrue(comparison.is_field) self.assertFalse(comparison.is_child_relation) self.assertEqual(comparison.field_label(), "Content") self.assertEqual(comparison.htmldiff(), 'Content') self.assertIsInstance(comparison.htmldiff(), SafeText) self.assertFalse(comparison.has_changed())
def setUp(self): self.tree_root = Page.objects.get(id=1) self.home_page = Page.objects.get(id=2) self.about_page = self.home_page.add_child( instance=SimplePage(title='About', content='About Foo')) self.contact_page = self.about_page.add_child( instance=SimplePage(title='Contact', content='Content Foo')) self.people_page = self.about_page.add_child( instance=SimplePage(title='People', content='The people of Foo')) self.event_index = self.make_event_section('Events') self.login()
def test_htmldiff_escapes_value(self): comparison = self.comparison_class( SimplePage._meta.get_field('content'), SimplePage(content='Original content'), SimplePage( content= '<script type="text/javascript">doSomethingBad();</script>'), ) self.assertEqual( comparison.htmldiff(), '<span class="deletion">Original content</span><span class="addition"><script type="text/javascript">doSomethingBad();</script></span>' ) self.assertIsInstance(comparison.htmldiff(), SafeText)
def test_construct_queryset_hook(self): page = SimplePage(title="Test shown", content="hello") self.root_page.add_child(instance=page) page_not_shown = SimplePage(title="Test not shown", content="hello") self.root_page.add_child(instance=page_not_shown) def filter_pages(pages, request): return pages.filter(id=page.id) with self.register_hook('construct_page_chooser_queryset', filter_pages): response = self.get({'q': 'Test'}) self.assertEqual(len(response.context['pages']), 1) self.assertEqual(response.context['pages'][0].specific, page)
def test_htmldiff_escapes_value(self): # Need to override this one as the HTML tags are stripped by RichTextFieldComparison comparison = self.comparison_class( SimplePage._meta.get_field('content'), SimplePage(content='Original content'), SimplePage( content= '<script type="text/javascript">doSomethingBad();</script>'), ) self.assertEqual( comparison.htmldiff(), '<span class="deletion">Original content</span><span class="addition">doSomethingBad();</span>' ) self.assertIsInstance(comparison.htmldiff(), SafeText)
def test_expired_page_will_be_unpublished(self): # Connect a mock signal handler to page_unpublished signal signal_fired = [False] signal_page = [None] def page_unpublished_handler(sender, instance, **kwargs): signal_fired[0] = True signal_page[0] = instance page_unpublished.connect(page_unpublished_handler) page = SimplePage( title="Hello world!", slug="hello-world", content="hello", live=True, has_unpublished_changes=False, expire_at=timezone.now() - timedelta(days=1), ) self.root_page.add_child(instance=page) p = Page.objects.get(slug='hello-world') self.assertTrue(p.live) management.call_command('publish_scheduled_pages') p = Page.objects.get(slug='hello-world') self.assertFalse(p.live) self.assertTrue(p.has_unpublished_changes) self.assertTrue(p.expired) # Check that the page_published signal was fired self.assertTrue(signal_fired[0]) self.assertEqual(signal_page[0], page) self.assertEqual(signal_page[0], signal_page[0].specific)
def setUp(self): self.root_page = Page.objects.get(id=2) # Add child page self.child_page = SimplePage(title="foobarbaz", content="hello") self.root_page.add_child(instance=self.child_page) self.login()
def setup_pagination_test_data(self): # Create lots of pages for i in range(100): new_page = SimplePage( title="foobarbaz", slug="foobarbaz-%d" % i, content="hello", ) self.root_page.add_child(instance=new_page)
def setUp(self): self.site_2_page = SimplePage( title="Site 2 page", slug="site_2_page", content="Hello", ) Page.get_first_root_node().add_child(instance=self.site_2_page) self.site_2_subpage = SimplePage( title="Site 2 subpage", slug="site_2_subpage", content="Hello again", ) self.site_2_page.add_child(instance=self.site_2_subpage) self.site_2 = Site.objects.create( hostname='example.com', port=8080, root_page=Page.objects.get(pk=self.site_2_page.pk), is_default_site=False ) self.about_us_page = SimplePage.objects.get(url_path='/home/about-us/')
def setUp(self): self.home_page = Page.objects.get(id=2) self.child_page = self.home_page.add_child( instance=SimplePage(title="Hello world!", slug='hello-world', content="hello", live=True, last_published_at=datetime.datetime( 2017, 1, 1, 12, 0, 0, tzinfo=pytz.utc), latest_revision_created_at=datetime.datetime( 2017, 2, 1, 12, 0, 0, tzinfo=pytz.utc))) self.unpublished_child_page = self.home_page.add_child( instance=SimplePage( title="Unpublished", slug='unpublished', content="hello", live=False, )) self.protected_child_page = self.home_page.add_child( instance=SimplePage( title="Protected", slug='protected', content="hello", live=True, )) PageViewRestriction.objects.create(page=self.protected_child_page, password='******') self.page_with_no_last_publish_date = self.home_page.add_child( instance=SimplePage(title="I have no last publish date :-(", slug='no-last-publish-date', content="hello", live=True, latest_revision_created_at=datetime.datetime( 2017, 2, 1, 12, 0, 0, tzinfo=pytz.utc))) self.site = Site.objects.get(is_default_site=True)
def test_converts_to_specific_page(self, backend): root_page = Page.objects.get(id=1) page = root_page.add_child(instance=SimplePage(title="test", slug="test", content="test")) # Convert page into a generic "Page" object and add it into the index unspecific_page = page.page_ptr backend().reset_mock() index.insert_or_update_object(unspecific_page) # It should be automatically converted back to the specific version backend().add.assert_called_with(page)
def test_cache_clears_when_site_root_moves(self): """ This tests for an issue where if a site root page was moved, all the page urls in that site would change to None. The issue was caused by the 'tuiuiu_site_root_paths' cache variable not being cleared when a site root page was moved. Which left all the child pages thinking that they are no longer in the site and return None as their url. Fix: d6cce69a397d08d5ee81a8cbc1977ab2c9db2682 Discussion: https://github.com/tuiuiu/tuiuiu/issues/7 """ # Get homepage, root page and site root_page = Page.objects.get(id=1) homepage = Page.objects.get(url_path='/home/') default_site = Site.objects.get(is_default_site=True) # Create a new homepage under current homepage new_homepage = SimplePage(title="New Homepage", slug="new-homepage", content="hello") homepage.add_child(instance=new_homepage) # Set new homepage as the site root page default_site.root_page = new_homepage default_site.save() # Warm up the cache by getting the url _ = homepage.url # noqa # Move new homepage to root new_homepage.move(root_page, pos='last-child') # Get fresh instance of new_homepage new_homepage = Page.objects.get(id=new_homepage.id) # Check url self.assertEqual(new_homepage.url, '/')
def test_expired_pages_are_dropped_from_mod_queue(self): page = SimplePage( title="Hello world!", slug="hello-world", content="hello", live=False, expire_at=timezone.now() - timedelta(days=1), ) self.root_page.add_child(instance=page) page.save_revision(submitted_for_moderation=True) p = Page.objects.get(slug='hello-world') self.assertFalse(p.live) self.assertTrue( PageRevision.objects.filter( page=p, submitted_for_moderation=True).exists()) management.call_command('publish_scheduled_pages') p = Page.objects.get(slug='hello-world') self.assertFalse( PageRevision.objects.filter( page=p, submitted_for_moderation=True).exists())
def test_future_expired_page_will_not_be_unpublished(self): page = SimplePage( title="Hello world!", slug="hello-world", content="hello", live=True, expire_at=timezone.now() + timedelta(days=1), ) self.root_page.add_child(instance=page) p = Page.objects.get(slug='hello-world') self.assertTrue(p.live) management.call_command('publish_scheduled_pages') p = Page.objects.get(slug='hello-world') self.assertTrue(p.live) self.assertFalse(p.expired)
def test_go_live_when_newer_revision_exists(self): page = SimplePage( title="Hello world!", slug="hello-world", content="hello", live=False, has_unpublished_changes=True, go_live_at=timezone.now() - timedelta(days=1), ) self.root_page.add_child(instance=page) page.save_revision(approved_go_live_at=timezone.now() - timedelta(days=1)) page.title = "Goodbye world!" page.save_revision(submitted_for_moderation=False) management.call_command('publish_scheduled_pages') p = Page.objects.get(slug='hello-world') self.assertTrue(p.live) self.assertTrue(p.has_unpublished_changes) self.assertEqual(p.title, "Hello world!")
def test_assert_can_create_subpage_rules(self): simple_page = SimplePage(title='Simple Page', slug='simple', content="hello") self.root.add_child(instance=simple_page) # This should raise an error, as a BusinessChild can not be created under a SimplePage with self.assertRaisesRegex(AssertionError, r'Can not create a tests.businesschild under a tests.simplepage'): self.assertCanCreate(simple_page, BusinessChild, {})