def test_page_overwrite_urls(self): page2 = create_page('test page 2', 'nav_playground.html', published=True) page3 = create_page('test page 3', 'nav_playground.html', published=True, overwrite_url='i-want-another-url') self.assertEqual(page2.get_absolute_url(), self.get_pages_root()+'test-page-2/') self.assertEqual(page3.get_absolute_url(), self.get_pages_root()+'i-want-another-url/') page2 = Page.objects.get(pk=page2.pk) page3 = Page.objects.get(pk=page3.pk) self.assertEqual(page2.get_absolute_url(), self.get_pages_root()+'test-page-2/') self.assertEqual(page3.get_absolute_url(), self.get_pages_root()+'i-want-another-url/') # tests a bug found in 2.2 where saving an ancestor page # wiped out the overwrite_url for child pages page2.save() self.assertEqual(page3.get_absolute_url(), self.get_pages_root()+'i-want-another-url/')
def test_login_required(self): create_page("page", "nav_playground.html", published=True, login_required=True) request = self.get_request('/page/') response = details(request, '') self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], '%s?next=/page/' % settings.LOGIN_URL)
def test_page_overwrite_urls(self): page2 = create_page('test page 2', 'nav_playground.html', published=True) page3 = create_page('test page 3', 'nav_playground.html', published=True, overwrite_url='i-want-another-url') self.assertEqual(page2.get_absolute_url(), self.get_pages_root() + 'test-page-2/') self.assertEqual(page3.get_absolute_url(), self.get_pages_root() + 'i-want-another-url/') page2 = Page.objects.get(pk=page2.pk) page3 = Page.objects.get(pk=page3.pk) self.assertEqual(page2.get_absolute_url(), self.get_pages_root() + 'test-page-2/') self.assertEqual(page3.get_absolute_url(), self.get_pages_root() + 'i-want-another-url/') # tests a bug found in 2.2 where saving an ancestor page # wiped out the overwrite_url for child pages page2.save() self.assertEqual(page3.get_absolute_url(), self.get_pages_root() + 'i-want-another-url/')
def test_page_urls(self): page1 = create_page('test page 1', 'nav_playground.html', published=True) page2 = create_page('test page 2', 'nav_playground.html', published=True) page3 = create_page('test page 3', 'nav_playground.html', published=True) page4 = create_page('test page 4', 'nav_playground.html', published=True) page5 = create_page('test page 5', 'nav_playground.html', published=True) self.assertEqual(page1.get_absolute_url(), self.get_pages_root()+'test-page-1/') self.assertEqual(page2.get_absolute_url(), self.get_pages_root()+'test-page-2/') self.assertEqual(page4.get_absolute_url(), self.get_pages_root()+'test-page-4/') page3 = page3.move_page(page1) self.assertEqual(page3.get_absolute_url(), self.get_pages_root()+'test-page-1-copy/') page5 = page5.move_page(page2) self.assertEqual(page5.get_absolute_url(), self.get_pages_root()+'test-page-2-copy/') page3 = page3.move_page(page4) self.assertEqual(page3.get_absolute_url(), self.get_pages_root()+'test-page-4-copy/')
def test_apphook_on_root(self): with SettingsOverride(ROOT_URLCONF="poser.test_utils.project.urls_for_apphook_tests"): apphook_pool.clear() superuser = User.objects.create_superuser("admin", "*****@*****.**", "admin") page = create_page( "apphooked-page", "nav_playground.html", created_by=superuser, published=True, apphook="SampleApp" ) blank_page = create_page( "not-apphooked-page", "nav_playground.html", created_by=superuser, published=True, apphook="", slug="blankapp", ) self.assertTrue(page.publish()) self.assertTrue(blank_page.publish()) response = self.client.get("/apphooked-page/") self.assertTemplateUsed(response, "sampleapp/home.html") response = self.client.get("/blankapp/") self.assertTemplateUsed(response, "nav_playground.html") apphook_pool.clear()
def test_generage_valid_slug_check_existing(self): title = "Hello Title" create_page(title, 'nav_playground.html') # second time with same title, it should append -1 expected_slug = "hello-title-1" slug = _generate_valid_slug(title) self.assertEqual(slug, expected_slug)
def test_valid_url_multisite(self): site1 = Site.objects.get_current() site3 = Site.objects.create(domain="sample3.com", name="sample3.com") bar = create_page('bar', 'nav_playground.html', slug="bar", published=True, site=site1) bar_s3 = create_page('bar', 'nav_playground.html', slug="bar", published=True, site=site3) self.assertTrue(is_valid_url(bar.get_absolute_url(), bar)) self.assertTrue(is_valid_url(bar_s3.get_absolute_url(), bar_s3))
def test_list_apphooks(self): out = StringIO() apps = ["poser", "poser.test_utils.project.sampleapp"] with SettingsOverride(INSTALLED_APPS=apps): create_page('Hello Page', "nav_playground.html", apphook=APPHOOK) self.assertEqual(Page.objects.filter(application_urls=APPHOOK).count(), 1) command = poser.Command() command.stdout = out command.handle("list", "apphooks", interactive=False) self.assertEqual(out.getvalue(), "SampleApp\n")
def test_get_page_without_final_slash(self): root = create_page("root", "nav_playground.html", slug="root", published=True) page = create_page("page", "nav_playground.html", slug="page", published=True) root.publish() page.publish() request = self.get_request('/page') found_page = get_page_from_request(request) self.assertFalse(found_page is None)
def test_list_apphooks(self): out = StringIO() apps = ["poser", "poser.test_utils.project.sampleapp"] with SettingsOverride(INSTALLED_APPS=apps): create_page('Hello Page', "nav_playground.html", apphook=APPHOOK) self.assertEqual( Page.objects.filter(application_urls=APPHOOK).count(), 1) command = poser.Command() command.stdout = out command.handle("list", "apphooks", interactive=False) self.assertEqual(out.getvalue(), "SampleApp\n")
def test_templates(self): """ Test the inheritance magic for templates """ template = "nav_playground.html" child = create_page("child", template) grand_child = create_page("child", template) child.save() grand_child.save() self.assertEqual(child.template, template) grand_child.get_template()
def test_slug_collisions_api_1(self): """ Checks for slug collisions on sibling pages - uses API to create pages """ page1_1 = create_page('test page 1_1', 'nav_playground.html', published=True, slug="foo") page1_2 = create_page('test page 1_2', 'nav_playground.html', published=True, slug="foo") # both sibling pages has same slug, so both pages has an invalid slug self.assertFalse(is_valid_page_slug(page1_1, page1_1.get_slug(), page1_1.site)) self.assertFalse(is_valid_page_slug(page1_2, page1_2.get_slug(), page1_2.site))
def test_internal_forced_redirect(self): redirect_one = 'https://www.django-poser.org/' redirect_three = '/' one = create_page("one", "nav_playground.html", published=True, redirect=redirect_one) three = create_page("three", "nav_playground.html", published=True, redirect=redirect_three) url = three.get_absolute_url() request = self.get_request(url) response = details(request, url.strip('/')) self.assertEqual(response.status_code, 302) self.assertEqual(response['Location'], redirect_three)
def test_apphook_not_hooked(self): """ Test details view when apphook pool has apphooks, but they're not actually hooked """ if APP_MODULE in sys.modules: del sys.modules[APP_MODULE] apphooks = ('%s.%s' % (APP_MODULE, APP_NAME), ) create_page("page2", "nav_playground.html", published=True) with SettingsOverride(POSER_APPHOOKS=apphooks): apphook_pool.clear() response = self.client.get('/') self.assertEqual(response.status_code, 404) apphook_pool.clear()
def test_include_urlconf(self): with SettingsOverride(ROOT_URLCONF='poser.test_utils.project.second_urls_for_apphook_tests'): apphook_pool.clear() superuser = User.objects.create_superuser('admin', '*****@*****.**', 'admin') child_child_page = create_page("child_child_page", "nav_playground.html", created_by=superuser, published=True, apphook='SampleApp') child_child_page.publish() path = reverse('extra_second') response = self.client.get(path) self.assertEquals(response.status_code, 200) self.assertTemplateUsed(response, 'sampleapp/extra.html') self.assertContains(response, "test included urlconf") path = reverse('extra_first') response = self.client.get(path) self.assertEquals(response.status_code, 200) self.assertTemplateUsed(response, 'sampleapp/extra.html') self.assertContains(response, "test urlconf") path = reverse('extra_first') response = self.client.get(path) self.assertEquals(response.status_code, 200) self.assertTemplateUsed(response, 'sampleapp/extra.html') self.assertContains(response, "test urlconf") path = reverse('extra_second') response = self.client.get(path) self.assertEquals(response.status_code, 200) self.assertTemplateUsed(response, 'sampleapp/extra.html') self.assertContains(response, "test included urlconf") apphook_pool.clear()
def test_copy_page(self): """ Test that a page can be copied via its model """ page_a = create_page("page_a", "nav_playground.html") create_page("page_a_a_a", "nav_playground.html") page_b = create_page("page_b", "nav_playground.html") count = Page.objects.get_query_set().count() superuser = self.get_superuser() with self.login_user_context(superuser): page_a.copy_page(page_b, page_a.site) self.assertEqual(Page.objects.get_query_set().count() - count, 1)
def test_details_view(self): """ Test the details view """ superuser = self.get_superuser() with self.login_user_context(superuser): response = self.client.get(self.get_pages_root()) self.assertEqual(response.status_code, 404) page = create_page('test page 1', "nav_playground.html") response = self.client.get(self.get_pages_root()) self.assertEqual(response.status_code, 404) self.assertTrue(page.publish()) page2 = create_page("test page 2", "nav_playground.html", published=True) response = self.client.get(page2.get_absolute_url()) self.assertEqual(response.status_code, 200)
def test_slug_collisions_api_1(self): """ Checks for slug collisions on sibling pages - uses API to create pages """ page1_1 = create_page('test page 1_1', 'nav_playground.html', published=True, slug="foo") page1_2 = create_page('test page 1_2', 'nav_playground.html', published=True, slug="foo") # both sibling pages has same slug, so both pages has an invalid slug self.assertFalse( is_valid_page_slug(page1_1, page1_1.get_slug(), page1_1.site)) self.assertFalse( is_valid_page_slug(page1_2, page1_2.get_slug(), page1_2.site))
def test_apphook_not_hooked(self): """ Test details view when apphook pool has apphooks, but they're not actually hooked """ if APP_MODULE in sys.modules: del sys.modules[APP_MODULE] apphooks = ( '%s.%s' % (APP_MODULE, APP_NAME), ) create_page("page2", "nav_playground.html", published=True) with SettingsOverride(POSER_APPHOOKS=apphooks): apphook_pool.clear() response = self.client.get('/') self.assertEqual(response.status_code, 404) apphook_pool.clear()
def test_public_for_all_num_queries(self): with SettingsOverride(POSER_PUBLIC_FOR='all'): user = User.objects.create_user('user', '*****@*****.**', 'user') request = self.get_request(user) page = create_page("test-public-for-all", "nav_playground.html") with self.assertNumQueries(0): page.has_view_permission(request)
def test_get_page_for_apphook(self): with SettingsOverride(ROOT_URLCONF="poser.test_utils.project.second_urls_for_apphook_tests"): apphook_pool.clear() superuser = User.objects.create_superuser("admin", "*****@*****.**", "admin") child_child_page = create_page( "child_child_page", "nav_playground.html", created_by=superuser, published=True, apphook="SampleApp" ) child_child_page.publish() # publisher_public is set to draft on publish, issue with onetoone reverse child_child_page = self.reload(child_child_page) en_title = child_child_page.get_title() path = reverse("sample-settings") response = self.client.get(path) self.assertEquals(response.status_code, 200) self.assertTemplateUsed(response, "sampleapp/home.html") self.assertContains(response, en_title) apphook_pool.clear()
def test_redirect_to_self_with_host(self): one = create_page("one", "nav_playground.html", published=True, redirect='http://testserver/') url = one.get_absolute_url() request = self.get_request(url) response = details(request, url.strip('/')) self.assertEqual(response.status_code, 302)
def test_page_permissions(self): with SettingsOverride(POSER_PUBLIC_FOR='staff'): user = User.objects.create_user('user', '*****@*****.**', 'user') user.user_permissions.add(Permission.objects.get(codename="view_page")) user.save() request = self.get_request(user) page = create_page('A', 'nav_playground.html') self.assertTrue(page.has_view_permission(request))
def test_create_copy_publish(self): # create new page to copy page = create_page("page", "nav_playground.html") with self.login_user_context(self.user_master): copied_page = page.copy_page(self.home_page, page.site, True, True) page = publish_page(copied_page, self.user_master)
def test_unauthed_num_queries(self): with SettingsOverride(POSER_PUBLIC_FOR='all'): request = self.get_request() site = Site() site.pk = 1 page = create_page("test-public-for-all", "nav_playground.html") with self.assertNumQueries(0): page.has_view_permission(request)
def test_home_slug_not_accessible(self): with SettingsOverride(POSER_PERMISSION=False): page = create_page('page', 'nav_playground.html', published=True) self.assertEqual(page.get_absolute_url(), '/page/') resp = self.client.get('/') self.assertEqual(resp.status_code, HttpResponseNotFound.status_code) resp = self.client.get('/page/') self.assertEqual(resp.status_code, HttpResponse.status_code)
def test_page_permissions_view_groups(self): with SettingsOverride(POSER_PUBLIC_FOR='staff'): user = User.objects.create_user('user', '*****@*****.**', 'user') group = Group.objects.create(name='testgroup') group.user_set.add(user) request = self.get_request(user) page = create_page('A', 'nav_playground.html') assign_user_to_page(page, group, grant_all=True) self.assertTrue(page.has_view_permission(request))
def test_page_permissions(self): with SettingsOverride(POSER_PUBLIC_FOR='staff'): user = User.objects.create_user('user', '*****@*****.**', 'user') user.user_permissions.add( Permission.objects.get(codename="view_page")) user.save() request = self.get_request(user) page = create_page('A', 'nav_playground.html') self.assertTrue(page.has_view_permission(request))
def test_apphook_on_root(self): with SettingsOverride(ROOT_URLCONF='poser.test_utils.project.urls_for_apphook_tests'): apphook_pool.clear() superuser = User.objects.create_superuser('admin', '*****@*****.**', 'admin') page = create_page("apphooked-page", "nav_playground.html", created_by=superuser, published=True, apphook="SampleApp") blank_page = create_page("not-apphooked-page", "nav_playground.html", created_by=superuser, published=True, apphook="", slug='blankapp') self.assertTrue(page.publish()) self.assertTrue(blank_page.publish()) response = self.client.get("/apphooked-page/") self.assertTemplateUsed(response, 'sampleapp/home.html') response = self.client.get('/blankapp/') self.assertTemplateUsed(response, 'nav_playground.html') apphook_pool.clear()
def test_delete(self): """ Creates then deletes a Page """ page = create_page("test", "nav_playground.html", \ apphook="SampleApp", created_by=self.user, published=True) self.client.login(username=self.username, password=self.password) response = self.client.delete(self.uri + str(page.id) + "/") self.assertEqual(response.status_code, 204) del_page = self.client.get("/test/") self.assertEqual(del_page.status_code, 404)
def test_same_order(self): # create 4 pages slugs = [] for i in range(0, 4): page = create_page("page", "nav_playground.html") slug = page.slug slugs.append(slug) # approve last 2 pages in reverse order for slug in reversed(slugs[2:]): page = publish_page(page, self.user_master)
def test_create_publish_copy(self): # create new page to copy page = create_page("page", "nav_playground.html") page = publish_page(page, self.user_master) with self.login_user_context(self.user_master): copied_page = page.copy_page(self.master_page, page.site, True, True) #self.check_published_page_attributes(page) copied_page = publish_page(copied_page, self.user_master)
def test_page_already_expired(self): """ Test that a page which has a end date in the past gives a 404, not a 500. """ yesterday = datetime.date.today() - datetime.timedelta(days=1) with SettingsOverride(POSER_MODERATOR=False, POSER_PERMISSION=False): page = create_page('page', 'nav_playground.html', publication_end_date=yesterday, published=True) resp = self.client.get(page.get_absolute_url()) self.assertEqual(resp.status_code, 404)
def test_apphook_on_root_reverse(self): with SettingsOverride(ROOT_URLCONF='poser.test_utils.project.urls_for_apphook_tests'): apphook_pool.clear() superuser = User.objects.create_superuser('admin', '*****@*****.**', 'admin') page = create_page("apphooked-page", "nav_playground.html", created_by=superuser, published=True, apphook="SampleApp") self.assertTrue(page.publish()) self.assertFalse(reverse('sample-settings').startswith('//')) apphook_pool.clear()
def test_get_page_from_request_with_page_preview(self): page = create_page("page", "nav_playground.html") request = self.get_request('%s?preview' % page.get_absolute_url()) request.user.is_staff = False found_page = get_page_from_request(request) self.assertEqual(found_page, None) superuser = self.get_superuser() with self.login_user_context(superuser): request = self.get_request('%s?preview&draft' % page.get_absolute_url()) found_page = get_page_from_request(request) self.assertTrue(found_page) self.assertEqual(found_page.pk, page.pk)
def test_apphook_on_root_reverse(self): with SettingsOverride(ROOT_URLCONF="poser.test_utils.project.urls_for_apphook_tests"): apphook_pool.clear() superuser = User.objects.create_superuser("admin", "*****@*****.**", "admin") page = create_page( "apphooked-page", "nav_playground.html", created_by=superuser, published=True, apphook="SampleApp" ) self.assertTrue(page.publish()) self.assertFalse(reverse("sample-settings").startswith("//")) apphook_pool.clear()
def test_slug_url_overwrite_clash(self): """ Tests if a URL-Override clashes with a normal page url """ with SettingsOverride(POSER_PERMISSION=False): bar = create_page('bar', 'nav_playground.html', published=False) foo = create_page('foo', 'nav_playground.html', published=True) # Tests to assure is_valid_url is ok on plain pages self.assertTrue(is_valid_url(bar.get_absolute_url(), bar)) self.assertTrue(is_valid_url(foo.get_absolute_url(), foo)) # Set url_overwrite for page foo foo.has_url_overwrite = True foo.path = '/bar/' foo.save() try: url = is_valid_url(bar.get_absolute_url(), bar) except ValidationError: url = False if url: bar.published = True bar.save() self.assertFalse(bar.published)
def test_slug_url_overwrite_clash(self): """ Tests if a URL-Override clashes with a normal page url """ with SettingsOverride(POSER_PERMISSION=False): bar = create_page('bar', 'nav_playground.html', published=False) foo = create_page('foo', 'nav_playground.html', published=True) # Tests to assure is_valid_url is ok on plain pages self.assertTrue(is_valid_url(bar.get_absolute_url(), bar)) self.assertTrue(is_valid_url(foo.get_absolute_url(), foo)) # Set url_overwrite for page foo foo.has_url_overwrite = True foo.path = '/bar/' foo.save() try: url = is_valid_url(bar.get_absolute_url(),bar) except ValidationError: url = False if url: bar.published = True bar.save() self.assertFalse(bar.published)
def test_page_urls(self): page1 = create_page('test page 1', 'nav_playground.html', published=True) page2 = create_page('test page 2', 'nav_playground.html', published=True) page3 = create_page('test page 3', 'nav_playground.html', published=True) page4 = create_page('test page 4', 'nav_playground.html', published=True) page5 = create_page('test page 5', 'nav_playground.html', published=True) self.assertEqual(page1.get_absolute_url(), self.get_pages_root() + 'test-page-1/') self.assertEqual(page2.get_absolute_url(), self.get_pages_root() + 'test-page-2/') self.assertEqual(page4.get_absolute_url(), self.get_pages_root() + 'test-page-4/') page3 = page3.move_page(page1) self.assertEqual(page3.get_absolute_url(), self.get_pages_root() + 'test-page-1-copy/') page5 = page5.move_page(page2) self.assertEqual(page5.get_absolute_url(), self.get_pages_root() + 'test-page-2-copy/') page3 = page3.move_page(page4) self.assertEqual(page3.get_absolute_url(), self.get_pages_root() + 'test-page-4-copy/')
def test_apphook_by_class(self): if APP_MODULE in sys.modules: del sys.modules[APP_MODULE] apphooks = ( '%s.%s' % (APP_MODULE, APP_NAME), ) with SettingsOverride(POSER_APPHOOKS=apphooks): apphook_pool.clear() apphook = apphook_pool.get_apphook(APP_NAME) page = create_page(apphook=apphook, **self._get_default_create_page_arguments()) self.assertEqual(page.get_application_urls(), APP_NAME)