From ca56b21290b52a1fde8c34db718ee264756274ef Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Tue, 25 May 2021 15:01:20 +0530 Subject: [PATCH] test: Check all cases of setting homepage --- frappe/tests/test_website.py | 63 ++++++++++++++++++++++++----- frappe/website/utils.py | 3 ++ frappe/www/_test/_test_home_page.py | 2 + 3 files changed, 58 insertions(+), 10 deletions(-) create mode 100644 frappe/www/_test/_test_home_page.py diff --git a/frappe/tests/test_website.py b/frappe/tests/test_website.py index cc500d1c02..6b9530a8ce 100644 --- a/frappe/tests/test_website.py +++ b/frappe/tests/test_website.py @@ -4,7 +4,7 @@ import unittest import frappe from frappe.website.serve import get_response -from frappe.website.utils import get_home_page +from frappe.website.utils import get_home_page, clear_website_cache from frappe.utils import set_request class TestWebsite(unittest.TestCase): @@ -14,32 +14,29 @@ class TestWebsite(unittest.TestCase): def tearDown(self): frappe.set_user('Administrator') - def test_home_page_for_role(self): + def test_home_page(self): frappe.set_user('Administrator') - frappe.delete_doc_if_exists('User', 'test-user-for-home-page@example.com') - frappe.delete_doc_if_exists('Role', 'home-page-test') - frappe.delete_doc_if_exists('Web Page', 'home-page-test') + # test home page via role user = frappe.get_doc(dict( doctype='User', email='test-user-for-home-page@example.com', - first_name='test')).insert() + first_name='test')).insert(ignore_if_duplicate=True) role = frappe.get_doc(dict( doctype = 'Role', role_name = 'home-page-test', desk_access = 0, - home_page = '/home-page-test' - )).insert() + )).insert(ignore_if_duplicate=True) user.add_roles(role.name) user.save() + frappe.db.set_value('Role', 'home-page-test', 'home_page', 'home-page-test') frappe.set_user('test-user-for-home-page@example.com') self.assertEqual(get_home_page(), 'home-page-test') frappe.set_user('Administrator') - role.home_page = '' - role.save() + frappe.db.set_value('Role', 'home-page-test', 'home_page', '') # home page via portal settings frappe.db.set_value('Portal Settings', None, 'default_portal_home', 'test-portal-home') @@ -48,6 +45,42 @@ class TestWebsite(unittest.TestCase): frappe.cache().hdel('home_page', frappe.session.user) self.assertEqual(get_home_page(), 'test-portal-home') + frappe.db.set_value("Portal Settings", None, "default_portal_home", '') + clear_website_cache() + + # home page via website settings + frappe.db.set_value("Website Settings", None, "home_page", 'contact') + self.assertEqual(get_home_page(), 'contact') + + frappe.db.set_value("Website Settings", None, "home_page", None) + clear_website_cache() + + # fallback homepage + self.assertEqual(get_home_page(), 'me') + + # fallback homepage for guest + frappe.set_user('Guest') + self.assertEqual(get_home_page(), 'login') + frappe.set_user('Administrator') + + # test homepage via hooks + clear_website_cache() + set_home_page_hook('get_website_user_home_page', 'frappe.www._test._test_home_page.get_website_user_home_page') + self.assertEqual(get_home_page(), '_test/_test_folder') + + clear_website_cache() + set_home_page_hook('website_user_home_page', 'login') + self.assertEqual(get_home_page(), 'login') + + clear_website_cache() + set_home_page_hook('home_page', 'about') + self.assertEqual(get_home_page(), 'about') + + clear_website_cache() + set_home_page_hook('role_home_page', {'home-page-test': 'home-page-test'}) + self.assertEqual(get_home_page(), 'home-page-test') + + def test_page_load(self): set_request(method='POST', path='login') response = get_response() @@ -147,3 +180,13 @@ class TestWebsite(unittest.TestCase): delattr(frappe.hooks, 'website_redirects') frappe.cache().delete_key('app_hooks') + + +def set_home_page_hook(key, value): + from frappe import hooks + # reset home_page hooks + for hook in ('get_website_user_home_page','website_user_home_page','role_home_page','home_page'): + if hasattr(hooks, hook): + delattr(hooks, hook) + + setattr(hooks, key, value) diff --git a/frappe/website/utils.py b/frappe/website/utils.py index f57cfa7ec5..a6d9535ec6 100644 --- a/frappe/website/utils.py +++ b/frappe/website/utils.py @@ -328,6 +328,9 @@ def clear_cache(path=None): for method in frappe.get_hooks("website_clear_cache"): frappe.get_attr(method)(path) +def clear_website_cache(path=None): + clear_cache(path) + def clear_sitemap(): delete_page_cache("*") diff --git a/frappe/www/_test/_test_home_page.py b/frappe/www/_test/_test_home_page.py new file mode 100644 index 0000000000..936399c700 --- /dev/null +++ b/frappe/www/_test/_test_home_page.py @@ -0,0 +1,2 @@ +def get_website_user_home_page(user): + return '/_test/_test_folder' \ No newline at end of file