{{ title }}
-- {{ blog_intro }} -
--
{{ blogger_info.bio }}
- {% endif %} -{{ blog_introduction }}
- {%- endif %} -{content} {ref_doc_title}
" - message = message + "".format( - frappe.utils.get_request_site_address(), ref_doc.route, _("View Blog Post") - ) - - # notify creator - frappe.sendmail( - recipients=frappe.db.get_value("User", ref_doc.owner, "email") or ref_doc.owner, - subject=subject, - message=message, - reference_doctype=ref_doc.doctype, - reference_name=ref_doc.name, - ) - - return liked - - -def add_like(reference_doctype, reference_name): - user = frappe.session.user - - like = frappe.new_doc("Comment") - like.comment_type = "Like" - like.comment_email = user - like.reference_doctype = reference_doctype - like.reference_name = reference_name - like.content = "Liked by: " + user - if user == "Guest": - like.ip_address = frappe.local.request_ip - like.save(ignore_permissions=True) - return True - - -def delete_like(reference_doctype, reference_name): - user = frappe.session.user - - filters = { - "comment_type": "Like", - "comment_email": user, - "reference_doctype": reference_doctype, - "reference_name": reference_name, - } - - if user == "Guest": - filters["ip_address"] = frappe.local.request_ip - - frappe.db.delete("Comment", filters) - return False diff --git a/frappe/tests/test_api_v2.py b/frappe/tests/test_api_v2.py index 54a802aa62..de1831729c 100644 --- a/frappe/tests/test_api_v2.py +++ b/frappe/tests/test_api_v2.py @@ -188,7 +188,7 @@ class TestMethodAPIV2(FrappeAPITestCase): def test_shorthand_controller_methods(self): shorthand_response = self.get(self.method("User", "get_all_roles"), {"sid": self.sid}) - self.assertIn("Blogger", shorthand_response.json["data"]) + self.assertIn("Website Manager", shorthand_response.json["data"]) expanded_response = self.get( self.method("frappe.core.doctype.user.user.get_all_roles"), {"sid": self.sid} diff --git a/frappe/tests/test_db_query.py b/frappe/tests/test_db_query.py index aaa6d79c6d..26306dab41 100644 --- a/frappe/tests/test_db_query.py +++ b/frappe/tests/test_db_query.py @@ -15,10 +15,11 @@ from frappe.model.db_query import DatabaseQuery, get_between_date_filter from frappe.permissions import add_user_permission, clear_user_permissions_for_doctype from frappe.query_builder import Column from frappe.tests import IntegrationTestCase +from frappe.tests.test_helpers import setup_for_tests from frappe.tests.test_query_builder import db_type_is, run_only_if from frappe.utils.testutils import add_custom_field, clear_custom_fields -EXTRA_TEST_RECORD_DEPENDENCIES = ["User", "Blog Post", "Blog Category", "Blogger"] +EXTRA_TEST_RECORD_DEPENDENCIES = ["User"] @contextmanager @@ -41,15 +42,16 @@ def setup_test_user(set_user=False): @contextmanager def setup_patched_blog_post(): add_child_table_to_blog_post() - make_property_setter("Blog Post", "published", "permlevel", 1, "Int") - reset("Blog Post") - add("Blog Post", "Website Manager", 1) - update("Blog Post", "Website Manager", 1, "write", 1) + make_property_setter("Test Blog Post", "published", "permlevel", 1, "Int") + reset("Test Blog Post") + add("Test Blog Post", "Website Manager", 1) + update("Test Blog Post", "Website Manager", 1, "write", 1) yield class TestDBQuery(IntegrationTestCase): def setUp(self): + setup_for_tests() frappe.set_user("Administrator") def test_basic(self): @@ -192,14 +194,14 @@ class TestDBQuery(IntegrationTestCase): todo.delete() def test_build_match_conditions(self): - clear_user_permissions_for_doctype("Blog Post", "test2@example.com") + clear_user_permissions_for_doctype("Test Blog Post", "test2@example.com") test2user = frappe.get_doc("User", "test2@example.com") test2user.add_roles("Blogger") frappe.set_user("test2@example.com") # this will get match conditions for Blog Post - build_match_conditions = DatabaseQuery("Blog Post").build_match_conditions + build_match_conditions = DatabaseQuery("Test Blog Post").build_match_conditions # Before any user permission is applied # get as filters @@ -207,20 +209,20 @@ class TestDBQuery(IntegrationTestCase): # get as conditions self.assertEqual(build_match_conditions(as_condition=True), "") - add_user_permission("Blog Post", "-test-blog-post", "test2@example.com", True) - add_user_permission("Blog Post", "-test-blog-post-1", "test2@example.com", True) + add_user_permission("Test Blog Post", "_Test Blog Post", "test2@example.com", True) + add_user_permission("Test Blog Post", "_Test Blog Post 1", "test2@example.com", True) # After applying user permission # get as filters self.assertTrue( - {"Blog Post": ["-test-blog-post-1", "-test-blog-post"]} + {"Test Blog Post": ["_Test Blog Post 1", "_Test Blog Post"]} in build_match_conditions(as_condition=False) ) # get as conditions if frappe.db.db_type == "mariadb": - assertion_string = """(((ifnull(`tabBlog Post`.`name`, '')='' or `tabBlog Post`.`name` in ('-test-blog-post-1', '-test-blog-post'))))""" + assertion_string = """(((ifnull(`tabTest Blog Post`.`name`, '')='' or `tabTest Blog Post`.`name` in ('_Test Blog Post 1', '_Test Blog Post'))))""" else: - assertion_string = """(((ifnull(cast(`tabBlog Post`.`name` as varchar), '')='' or cast(`tabBlog Post`.`name` as varchar) in ('-test-blog-post-1', '-test-blog-post'))))""" + assertion_string = """(((ifnull(cast(`tabBlog Post`.`name` as varchar), '')='' or cast(`tabBlog Post`.`name` as varchar) in ('_Test Blog Post 1', '_Test Blog Post'))))""" self.assertEqual(build_match_conditions(as_condition=True), assertion_string) @@ -848,7 +850,7 @@ class TestDBQuery(IntegrationTestCase): def test_permlevel_fields(self): with setup_patched_blog_post(), setup_test_user(set_user=True): data = frappe.get_list( - "Blog Post", + "Test Blog Post", filters={"published": 1}, fields=["name", "published"], limit=1, @@ -858,7 +860,7 @@ class TestDBQuery(IntegrationTestCase): self.assertEqual(len(data[0]), 1) data = frappe.get_list( - "Blog Post", + "Test Blog Post", filters={"published": 1}, fields=["name", "`published`"], limit=1, @@ -868,9 +870,9 @@ class TestDBQuery(IntegrationTestCase): self.assertEqual(len(data[0]), 1) data = frappe.get_list( - "Blog Post", + "Test Blog Post", filters={"published": 1}, - fields=["name", "`tabBlog Post`.`published`"], + fields=["name", "`tabTest Blog Post`.`published`"], limit=1, ) self.assertFalse("published" in data[0]) @@ -878,7 +880,7 @@ class TestDBQuery(IntegrationTestCase): self.assertEqual(len(data[0]), 1) data = frappe.get_list( - "Blog Post", + "Test Blog Post", filters={"published": 1}, fields=["name", "`tabTest Child`.`test_field`"], limit=1, @@ -888,7 +890,7 @@ class TestDBQuery(IntegrationTestCase): self.assertEqual(len(data[0]), 1) data = frappe.get_list( - "Blog Post", + "Test Blog Post", filters={"published": 1}, fields=["name", "MAX(`published`)"], limit=1, @@ -897,7 +899,7 @@ class TestDBQuery(IntegrationTestCase): self.assertEqual(len(data[0]), 1) data = frappe.get_list( - "Blog Post", + "Test Blog Post", filters={"published": 1}, fields=["name", "LAST(published)"], limit=1, @@ -906,7 +908,7 @@ class TestDBQuery(IntegrationTestCase): self.assertEqual(len(data[0]), 1) data = frappe.get_list( - "Blog Post", + "Test Blog Post", filters={"published": 1}, fields=["name", "MAX(`modified`)"], limit=1, @@ -916,7 +918,7 @@ class TestDBQuery(IntegrationTestCase): self.assertEqual(len(data[0]), 2) data = frappe.get_list( - "Blog Post", + "Test Blog Post", filters={"published": 1}, fields=["name", "now() abhi"], limit=1, @@ -925,7 +927,7 @@ class TestDBQuery(IntegrationTestCase): self.assertEqual(len(data[0]), 2) data = frappe.get_list( - "Blog Post", + "Test Blog Post", filters={"published": 1}, fields=["name", "'LABEL'"], limit=1, @@ -935,7 +937,7 @@ class TestDBQuery(IntegrationTestCase): self.assertEqual(len(data[0]), 2) data = frappe.get_list( - "Blog Post", + "Test Blog Post", filters={"published": 1}, fields=["name", "COUNT(*) as count"], limit=1, @@ -946,7 +948,7 @@ class TestDBQuery(IntegrationTestCase): self.assertEqual(len(data[0]), 2) data = frappe.get_list( - "Blog Post", + "Test Blog Post", filters={"published": 1}, fields=["name", "COUNT(*) count"], limit=1, @@ -957,17 +959,18 @@ class TestDBQuery(IntegrationTestCase): self.assertEqual(len(data[0]), 2) data = frappe.get_list( - "Blog Post", + "Test Blog Post", fields=[ "name", "blogger.full_name as blogger_full_name", - "blog_category.description", + "blog_category.title", ], limit=1, ) + print(data[0]) self.assertTrue("name" in data[0]) self.assertTrue("blogger_full_name" in data[0]) - self.assertTrue("description" in data[0]) + self.assertTrue("title" in data[0]) def test_cast_name(self): from frappe.core.doctype.doctype.test_doctype import new_doctype @@ -1296,10 +1299,10 @@ class TestReportView(IntegrationTestCase): user.remove_roles(*user_roles) user.add_roles("Blogger") - make_property_setter("Blog Post", "published", "permlevel", 1, "Int") - reset("Blog Post") - add("Blog Post", "Website Manager", 1) - update("Blog Post", "Website Manager", 1, "write", 1) + make_property_setter("Test Blog Post", "published", "permlevel", 1, "Int") + reset("Test Blog Post") + add("Test Blog Post", "Website Manager", 1) + update("Test Blog Post", "Website Manager", 1, "write", 1) frappe.set_user(user.name) @@ -1308,7 +1311,7 @@ class TestReportView(IntegrationTestCase): frappe.local.form_dict = frappe._dict( { - "doctype": "Blog Post", + "doctype": "Test Blog Post", "fields": ["published", "title", "`tabTest Child`.`test_field`"], } ) @@ -1318,7 +1321,7 @@ class TestReportView(IntegrationTestCase): self.assertListEqual(response["keys"], ["title"]) frappe.local.form_dict = frappe._dict( { - "doctype": "Blog Post", + "doctype": "Test Blog Post", "fields": ["*"], } ) @@ -1335,7 +1338,7 @@ class TestReportView(IntegrationTestCase): # Admin should be able to see access all fields frappe.local.form_dict = frappe._dict( { - "doctype": "Blog Post", + "doctype": "Test Blog Post", "fields": ["published", "title", "`tabTest Child`.`test_field`"], } ) @@ -1377,7 +1380,7 @@ class TestReportView(IntegrationTestCase): frappe.local.request.method = "POST" frappe.local.form_dict = frappe._dict( { - "doctype": "Blog Post", + "doctype": "Test Blog Post", "fields": ["published", "title", "`tabTest Child`.`test_field`"], } ) @@ -1387,7 +1390,7 @@ class TestReportView(IntegrationTestCase): self.assertListEqual(response["keys"], ["title"]) frappe.local.form_dict = frappe._dict( { - "doctype": "Blog Post", + "doctype": "Test Blog Post", "fields": ["*"], } ) @@ -1396,7 +1399,7 @@ class TestReportView(IntegrationTestCase): self.assertNotIn("published", response["keys"]) # If none of the fields are accessible then result should be empty - self.assertEqual(frappe.get_list("Blog Post", "published"), []) + self.assertEqual(frappe.get_list("Test Blog Post", "published"), []) def test_reportview_get_admin(self): # Admin should be able to see access all fields @@ -1405,7 +1408,7 @@ class TestReportView(IntegrationTestCase): frappe.local.request.method = "POST" frappe.local.form_dict = frappe._dict( { - "doctype": "Blog Post", + "doctype": "Test Blog Post", "fields": ["published", "title", "`tabTest Child`.`test_field`"], } ) @@ -1441,8 +1444,8 @@ def add_child_table_to_blog_post(): ) child_table.insert(ignore_permissions=True, ignore_if_duplicate=True) - clear_custom_fields("Blog Post") - add_custom_field("Blog Post", "child_table", "Table", child_table.name) + clear_custom_fields("Test Blog Post") + add_custom_field("Test Blog Post", "child_table", "Table", child_table.name) def create_event(subject="_Test Event", starts_on=None): diff --git a/frappe/tests/test_defaults.py b/frappe/tests/test_defaults.py index a46195f2b5..11e51bf145 100644 --- a/frappe/tests/test_defaults.py +++ b/frappe/tests/test_defaults.py @@ -73,7 +73,7 @@ class TestDefaults(IntegrationTestCase): @run_only_if(db_type_is.MARIADB) def test_user_permission_defaults(self): # Create user permission - create_user("user_default_test@example.com", "Blogger") + create_user("user_default_test@example.com", "Website Manager") frappe.set_user("user_default_test@example.com") set_global_default("Country", "") clear_user_default("Country") diff --git a/frappe/tests/test_form_load.py b/frappe/tests/test_form_load.py index 194ef28612..6cf69380a3 100644 --- a/frappe/tests/test_form_load.py +++ b/frappe/tests/test_form_load.py @@ -5,10 +5,9 @@ from frappe.core.page.permission_manager.permission_manager import add, reset, u from frappe.custom.doctype.property_setter.property_setter import make_property_setter from frappe.desk.form.load import get_docinfo, getdoc, getdoctype from frappe.tests import IntegrationTestCase +from frappe.tests.test_helpers import setup_for_tests from frappe.utils.file_manager import save_file -EXTRA_TEST_RECORD_DEPENDENCIES = ["Blog Category", "Blogger"] - class TestFormLoad(IntegrationTestCase): def test_load(self): @@ -23,10 +22,11 @@ class TestFormLoad(IntegrationTestCase): self.assertTrue(meta.get("__calendar_js")) def test_fieldlevel_permissions_in_load(self): + setup_for_tests() blog = frappe.get_doc( { - "doctype": "Blog Post", - "blog_category": "-test-blog-category-1", + "doctype": "Test Blog Post", + "blog_category": "_Test Blog Category 1", "blog_intro": "Test Blog Intro", "blogger": "_Test Blogger 1", "content": "Test Blog Content", @@ -43,8 +43,8 @@ class TestFormLoad(IntegrationTestCase): user.remove_roles(*user_roles) user.add_roles("Blogger") - blog_post_property_setter = make_property_setter("Blog Post", "published", "permlevel", 1, "Int") - reset("Blog Post") + blog_post_property_setter = make_property_setter("Test Blog Post", "published", "permlevel", 1, "Int") + reset("Test Blog Post") # test field level permission before role level permissions are defined frappe.set_user(user.name) @@ -63,8 +63,8 @@ class TestFormLoad(IntegrationTestCase): # test field level permission after role level permissions are defined frappe.set_user("Administrator") - add("Blog Post", "Website Manager", 1) - update("Blog Post", "Website Manager", 1, "write", 1) + add("Test Blog Post", "Website Manager", 1) + update("Test Blog Post", "Website Manager", 1, "write", 1) frappe.set_user(user.name) blog_doc = get_blog(blog.name) @@ -86,7 +86,7 @@ class TestFormLoad(IntegrationTestCase): user.add_roles("Website Manager") frappe.set_user(user.name) - doc = frappe.get_doc("Blog Post", blog.name) + doc = frappe.get_doc("Test Blog Post", blog.name) doc.published = 1 doc.save() @@ -196,5 +196,5 @@ class TestFormLoad(IntegrationTestCase): def get_blog(blog_name): frappe.response.docs = [] - getdoc("Blog Post", blog_name) + getdoc("Test Blog Post", blog_name) return frappe.response.docs[0] diff --git a/frappe/tests/test_helpers.py b/frappe/tests/test_helpers.py new file mode 100644 index 0000000000..e70593fe96 --- /dev/null +++ b/frappe/tests/test_helpers.py @@ -0,0 +1,271 @@ +import frappe + + +def create_test_blog_post(): + test_blog_doc = frappe.get_doc( + { + "doctype": "DocType", + "name": "Test Blog Post", + "allow_guest_to_view": 1, + "module": "Custom", + "custom": 1, + "title_field": "title", + "autoname": "field:title", + "naming_rule": "By fieldname", + "make_attachments_public": 1, + "owner": "Administrator", + "fields": [ + { + "fieldname": "blog_category", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Test Blog Category", + "options": "Test Blog Category", + "reqd": 1, + }, + { + "fieldname": "blogger", + "fieldtype": "Link", + "in_list_view": 1, + "in_standard_filter": 1, + "label": "Test Blogger", + "options": "Test Blogger", + "reqd": 1, + }, + { + "description": "Description for listing page, in plain text, only a couple of lines. (max 200 characters)", + "fieldname": "blog_intro", + "fieldtype": "Small Text", + "label": "Blog Intro", + }, + { + "depends_on": "eval:doc.content_type === 'Rich Text'", + "fieldname": "content", + "fieldtype": "Text Editor", + "ignore_xss_filter": 1, + "in_global_search": 1, + "label": "Content", + }, + { + "fieldname": "title", + "fieldtype": "Data", + "in_global_search": 1, + "label": "Title", + "no_copy": 1, + "reqd": 1, + }, + { + "default": "0", + "fieldname": "published", + "fieldtype": "Check", + "hidden": 1, + "label": "Published", + }, + ], + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Website Manager", + "share": 1, + "write": 1, + }, + { + "create": 1, + "email": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Blogger", + "share": 1, + "write": 1, + }, + ], + } + ) + test_blog_doc.insert(ignore_if_duplicate=True, ignore_links=True) + create_test_blog_records() + + +def create_test_blog_records(): + test_blog_records = [ + { + "blog_category": "_Test Blog Category", + "blog_intro": "Test Blog Intro", + "blogger": "_Test Blogger", + "content": "Test Blog Content", + "doctype": "Test Blog Post", + "title": "_Test Blog Post", + "published": 1, + }, + { + "blog_category": "_Test Blog Category 1", + "blog_intro": "Test Blog Intro", + "blogger": "_Test Blogger", + "content": "Test Blog Content", + "doctype": "Test Blog Post", + "title": "_Test Blog Post 1", + "published": 1, + }, + { + "blog_category": "_Test Blog Category 1", + "blog_intro": "Test Blog Intro", + "blogger": "_Test Blogger 1", + "content": "Test Blog Content", + "doctype": "Test Blog Post", + "title": "_Test Blog Post 2", + "published": 0, + }, + { + "blog_category": "_Test Blog Category 1", + "blog_intro": "Test Blog Intro", + "blogger": "_Test Blogger 2", + "content": "Test Blog Content", + "doctype": "Test Blog Post", + "title": "_Test Blog Post 3", + "published": 0, + }, + ] + + for r in test_blog_records: + frappe.get_doc(r).insert(ignore_if_duplicate=True, ignore_links=True) + + +def create_test_blog_category(): + frappe.get_doc( + { + "doctype": "DocType", + "autoname": "field:title", + "name": "Test Blog Category", + "module": "Custom", + "custom": 1, + "make_attachments_public": 1, + "naming_rule": "By fieldname", + "fields": [ + { + "fieldname": "title", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Title", + "no_copy": 1, + "reqd": 1, + }, + { + "default": "1", + "fieldname": "published", + "fieldtype": "Check", + "in_list_view": 1, + "label": "Published", + }, + { + "depends_on": "published", + "fieldname": "route", + "fieldtype": "Data", + "label": "Route", + "read_only": 1, + "unique": 1, + }, + ], + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Website Manager", + "share": 1, + "write": 1, + }, + {"email": 1, "print": 1, "read": 1, "role": "Blogger"}, + ], + } + ).insert(ignore_if_duplicate=True, ignore_links=True) + create_blog_category_records() + + +def create_blog_category_records(): + test_blog_category_records = [ + {"doctype": "Test Blog Category", "parent_website_route": "blog", "title": "_Test Blog Category"}, + {"doctype": "Test Blog Category", "parent_website_route": "blog", "title": "_Test Blog Category 1"}, + {"doctype": "Test Blog Category", "parent_website_route": "blog", "title": "_Test Blog Category 2"}, + ] + for r in test_blog_category_records: + frappe.get_doc(r).insert(ignore_if_duplicate=True, ignore_links=True) + + +def create_test_blogger(): + frappe.get_doc( + { + "doctype": "DocType", + "name": "Test Blogger", + "module": "Custom", + "custom": 1, + "autoname": "field:short_name", + "make_attachments_public": 1, + "naming_rule": "By fieldname", + "fields": [ + {"default": "0", "fieldname": "disabled", "fieldtype": "Check", "label": "Disabled"}, + { + "description": "Will be used in url (usually first name).", + "fieldname": "short_name", + "fieldtype": "Data", + "label": "Short Name", + "reqd": 1, + "unique": 1, + }, + { + "fieldname": "full_name", + "fieldtype": "Data", + "in_list_view": 1, + "label": "Full Name", + "reqd": 1, + }, + {"fieldname": "user", "fieldtype": "Link", "label": "User", "options": "User"}, + {"fieldname": "bio", "fieldtype": "Small Text", "label": "Bio"}, + {"fieldname": "avatar", "fieldtype": "Attach Image", "label": "Avatar"}, + ], + "permissions": [ + { + "create": 1, + "delete": 1, + "email": 1, + "export": 1, + "print": 1, + "read": 1, + "report": 1, + "role": "Website Manager", + "share": 1, + "write": 1, + }, + {"email": 1, "print": 1, "read": 1, "role": "Blogger", "share": 1, "write": 1}, + ], + } + ).insert(ignore_if_duplicate=True, ignore_links=True) + create_test_blogger_records() + + +def create_test_blogger_records(): + test_blogger_records = [ + {"doctype": "Test Blogger", "full_name": "_Test Blogger", "short_name": "_Test Blogger"}, + {"doctype": "Test Blogger", "full_name": "_Test Blogger 1", "short_name": "_Test Blogger 1"}, + {"doctype": "Test Blogger", "full_name": "_Test Blogger 2", "short_name": "_Test Blogger 2"}, + ] + for r in test_blogger_records: + frappe.get_doc(r).insert(ignore_if_duplicate=True, ignore_links=True) + + +def setup_for_tests(): + frappe.set_user("Administrator") + frappe.delete_doc_if_exists("DocType", "Test Blog Post") + frappe.delete_doc_if_exists("DocType", "Test Blog Category") + frappe.delete_doc_if_exists("DocType", "Test Blogger") + create_test_blog_category() + create_test_blogger() + create_test_blog_post() diff --git a/frappe/tests/test_permissions.py b/frappe/tests/test_permissions.py index df802f8d07..dda684f143 100644 --- a/frappe/tests/test_permissions.py +++ b/frappe/tests/test_permissions.py @@ -5,10 +5,12 @@ import frappe import frappe.defaults import frappe.model.meta +import frappe.permissions from frappe.core.doctype.doctype.test_doctype import new_doctype from frappe.core.doctype.user_permission.user_permission import clear_user_permissions from frappe.core.page.permission_manager.permission_manager import add, remove, reset, update from frappe.desk.form.load import getdoc +from frappe.installer import _delete_doctypes from frappe.permissions import ( ALL_USER_ROLE, AUTOMATIC_ROLES, @@ -23,17 +25,19 @@ from frappe.permissions import ( update_permission_property, ) from frappe.tests import IntegrationTestCase +from frappe.tests.test_helpers import setup_for_tests from frappe.tests.utils import make_test_records_for_doctype from frappe.utils.data import now_datetime -EXTRA_TEST_RECORD_DEPENDENCIES = ["Blogger", "Blog Post", "User", "Contact", "Salutation"] +EXTRA_TEST_RECORD_DEPENDENCIES = ["User", "Contact", "Salutation"] class TestPermissions(IntegrationTestCase): @classmethod def setUpClass(cls): super().setUpClass() - frappe.clear_cache(doctype="Blog Post") + setup_for_tests() + frappe.clear_cache(doctype="Test Blog Post") user = frappe.get_doc("User", "test1@example.com") user.add_roles("Website Manager") user.add_roles("System Manager") @@ -48,10 +52,10 @@ class TestPermissions(IntegrationTestCase): user.add_roles("Website Manager") def setUp(self): - frappe.clear_cache(doctype="Blog Post") + frappe.clear_cache(doctype="Test Blog Post") - reset("Blogger") - reset("Blog Post") + reset("Test Blogger") + reset("Test Blog Post") frappe.db.delete("User Permission") @@ -59,11 +63,11 @@ class TestPermissions(IntegrationTestCase): def tearDown(self): frappe.set_user("Administrator") - frappe.db.set_value("Blogger", "_Test Blogger 1", "user", None) + frappe.db.set_value("Test Blogger", "_Test Blogger 1", "user", None) - clear_user_permissions_for_doctype("Blog Category") - clear_user_permissions_for_doctype("Blog Post") - clear_user_permissions_for_doctype("Blogger") + clear_user_permissions_for_doctype("Test Blog Category") + clear_user_permissions_for_doctype("Test Blog Post") + clear_user_permissions_for_doctype("Test Blogger") @staticmethod def set_strict_user_permissions(ignore): @@ -73,119 +77,124 @@ class TestPermissions(IntegrationTestCase): ss.save() def test_basic_permission(self): - post = frappe.get_doc("Blog Post", "-test-blog-post") + post = frappe.get_doc("Test Blog Post", "_Test Blog Post") self.assertTrue(post.has_permission("read")) def test_select_permission(self): # grant only select perm to blog post - add_permission("Blog Post", "Sales User", 0) - update_permission_property("Blog Post", "Sales User", 0, "select", 1) - update_permission_property("Blog Post", "Sales User", 0, "read", 0) - update_permission_property("Blog Post", "Sales User", 0, "write", 0) + add_permission("Test Blog Post", "Sales User", 0) + update_permission_property("Test Blog Post", "Sales User", 0, "select", 1) + update_permission_property("Test Blog Post", "Sales User", 0, "read", 0) + update_permission_property("Test Blog Post", "Sales User", 0, "write", 0) - frappe.clear_cache(doctype="Blog Post") + frappe.clear_cache(doctype="Test Blog Post") frappe.set_user("test3@example.com") # validate select perm - post = frappe.get_doc("Blog Post", "-test-blog-post") + post = frappe.get_doc("Test Blog Post", "_Test Blog Post") self.assertTrue(post.has_permission("select")) # validate does not have read and write perm self.assertFalse(post.has_permission("read")) self.assertRaises(frappe.PermissionError, post.save) - permitted_record = frappe.get_list("Blog Post", fields="*", limit=1)[0] - full_record = frappe.get_all("Blog Post", fields="*", limit=1)[0] + permitted_record = frappe.get_list("Test Blog Post", fields="*", limit=1)[0] + full_record = frappe.get_all("Test Blog Post", fields="*", limit=1)[0] self.assertNotEqual(permitted_record, full_record) self.assertSequenceSubset(post.meta.get_search_fields(), permitted_record) def test_user_permissions_in_doc(self): - add_user_permission("Blog Category", "-test-blog-category-1", "test2@example.com") + add_user_permission("Test Blog Category", "_Test Blog Category 1", "test2@example.com") frappe.set_user("test2@example.com") - post = frappe.get_doc("Blog Post", "-test-blog-post") + post = frappe.get_doc("Test Blog Post", "_Test Blog Post") self.assertFalse(post.has_permission("read")) self.assertFalse(get_doc_permissions(post).get("read")) - post1 = frappe.get_doc("Blog Post", "-test-blog-post-1") + post1 = frappe.get_doc("Test Blog Post", "_Test Blog Post 1") self.assertTrue(post1.has_permission("read")) self.assertTrue(get_doc_permissions(post1).get("read")) def test_user_permissions_in_report(self): - add_user_permission("Blog Category", "-test-blog-category-1", "test2@example.com") + add_user_permission("Test Blog Category", "_Test Blog Category 1", "test2@example.com") frappe.set_user("test2@example.com") - names = [d.name for d in frappe.get_list("Blog Post", fields=["name", "blog_category"])] + names = [d.name for d in frappe.get_list("Test Blog Post", fields=["name", "blog_category"])] - self.assertTrue("-test-blog-post-1" in names) - self.assertFalse("-test-blog-post" in names) + self.assertTrue("_Test Blog Post 1" in names) + self.assertFalse("_Test Blog Post" in names) def test_default_values(self): - doc = frappe.new_doc("Blog Post") + doc = frappe.new_doc("Test Blog Post") self.assertFalse(doc.get("blog_category")) # Fetch default based on single user permission - add_user_permission("Blog Category", "-test-blog-category-1", "test2@example.com") + add_user_permission("Test Blog Category", "_Test Blog Category 1", "test2@example.com") frappe.set_user("test2@example.com") - doc = frappe.new_doc("Blog Post") - self.assertEqual(doc.get("blog_category"), "-test-blog-category-1") + doc = frappe.new_doc("Test Blog Post") + self.assertEqual(doc.get("blog_category"), "_Test Blog Category 1") # Don't fetch default if user permissions is more than 1 add_user_permission( - "Blog Category", "-test-blog-category", "test2@example.com", ignore_permissions=True + "Test Blog Category", "_Test Blog Category", "test2@example.com", ignore_permissions=True ) frappe.clear_cache() - doc = frappe.new_doc("Blog Post") + doc = frappe.new_doc("Test Blog Post") self.assertFalse(doc.get("blog_category")) # Fetch user permission set as default from multiple user permission add_user_permission( - "Blog Category", - "-test-blog-category-2", + "Test Blog Category", + "_Test Blog Category 2", "test2@example.com", ignore_permissions=True, is_default=1, ) frappe.clear_cache() - doc = frappe.new_doc("Blog Post") - self.assertEqual(doc.get("blog_category"), "-test-blog-category-2") + doc = frappe.new_doc("Test Blog Post") + self.assertEqual(doc.get("blog_category"), "_Test Blog Category 2") def test_user_link_match_doc(self): - blogger = frappe.get_doc("Blogger", "_Test Blogger 1") + blogger = frappe.get_doc("Test Blogger", "_Test Blogger 1") blogger.user = "test2@example.com" blogger.save() + frappe.permissions.add_user_permission("Test Blogger", blogger.name, blogger.user) frappe.set_user("test2@example.com") - post = frappe.get_doc("Blog Post", "-test-blog-post-2") + post = frappe.get_doc("Test Blog Post", "_Test Blog Post 2") self.assertTrue(post.has_permission("read")) - - post1 = frappe.get_doc("Blog Post", "-test-blog-post-1") + post1 = frappe.get_doc("Test Blog Post", "_Test Blog Post 1") self.assertFalse(post1.has_permission("read")) def test_user_link_match_report(self): - blogger = frappe.get_doc("Blogger", "_Test Blogger 1") + blogger = frappe.get_doc("Test Blogger", "_Test Blogger 1") blogger.user = "test2@example.com" blogger.save() + frappe.permissions.add_user_permission("Test Blogger", blogger.name, blogger.user) frappe.set_user("test2@example.com") - names = [d.name for d in frappe.get_list("Blog Post", fields=["name", "owner"])] - self.assertTrue("-test-blog-post-2" in names) - self.assertFalse("-test-blog-post-1" in names) + names = [d.name for d in frappe.get_list("Test Blog Post", fields=["name", "owner"])] + self.assertTrue("_Test Blog Post 2" in names) + self.assertFalse("_Test Blog Post 1" in names) def test_set_user_permissions(self): frappe.set_user("test1@example.com") - add_user_permission("Blog Post", "-test-blog-post", "test2@example.com") + add_user_permission("Test Blog Post", "_Test Blog Post", "test2@example.com") def test_not_allowed_to_set_user_permissions(self): frappe.set_user("test2@example.com") # this user can't add user permissions self.assertRaises( - frappe.PermissionError, add_user_permission, "Blog Post", "-test-blog-post", "test2@example.com" + frappe.PermissionError, + add_user_permission, + "Test Blog Post", + "_Test Blog Post", + "test2@example.com", ) def test_read_if_explicit_user_permissions_are_set(self): @@ -194,11 +203,11 @@ class TestPermissions(IntegrationTestCase): frappe.set_user("test2@example.com") # user can only access permitted blog post - doc = frappe.get_doc("Blog Post", "-test-blog-post") + doc = frappe.get_doc("Test Blog Post", "_Test Blog Post") self.assertTrue(doc.has_permission("read")) # and not this one - doc = frappe.get_doc("Blog Post", "-test-blog-post-1") + doc = frappe.get_doc("Test Blog Post", "_Test Blog Post 1") self.assertFalse(doc.has_permission("read")) def test_not_allowed_to_remove_user_permissions(self): @@ -210,24 +219,24 @@ class TestPermissions(IntegrationTestCase): self.assertRaises( frappe.PermissionError, remove_user_permission, - "Blog Post", - "-test-blog-post", + "Test Blog Post", + "_Test Blog Post", "test2@example.com", ) def test_user_permissions_if_applied_on_doc_being_evaluated(self): frappe.set_user("test2@example.com") - doc = frappe.get_doc("Blog Post", "-test-blog-post-1") + doc = frappe.get_doc("Test Blog Post", "_Test Blog Post 1") self.assertTrue(doc.has_permission("read")) frappe.set_user("test1@example.com") - add_user_permission("Blog Post", "-test-blog-post", "test2@example.com") + add_user_permission("Test Blog Post", "_Test Blog Post", "test2@example.com") frappe.set_user("test2@example.com") - doc = frappe.get_doc("Blog Post", "-test-blog-post-1") + doc = frappe.get_doc("Test Blog Post", "_Test Blog Post 1") self.assertFalse(doc.has_permission("read")) - doc = frappe.get_doc("Blog Post", "-test-blog-post") + doc = frappe.get_doc("Test Blog Post", "_Test Blog Post") self.assertTrue(doc.has_permission("read")) def test_set_standard_fields_manually(self): @@ -257,8 +266,8 @@ class TestPermissions(IntegrationTestCase): self.assertRaises(frappe.CannotChangeConstantError, user.save) def test_set_only_once(self): - blog_post = frappe.get_meta("Blog Post") - doc = frappe.get_doc("Blog Post", "-test-blog-post-1") + blog_post = frappe.get_meta("Test Blog Post") + doc = frappe.get_doc("Test Blog Post", "_Test Blog Post 1") doc.db_set("title", "Old") blog_post.get_field("title").set_only_once = 1 doc.title = "New" @@ -268,7 +277,7 @@ class TestPermissions(IntegrationTestCase): def test_set_only_once_child_table_rows(self): doctype_meta = frappe.get_meta("DocType") doctype_meta.get_field("fields").set_only_once = 1 - doc = frappe.get_doc("DocType", "Blog Post") + doc = frappe.get_doc("DocType", "Test Blog Post") # remove last one doc.fields = doc.fields[:-1] @@ -278,51 +287,50 @@ class TestPermissions(IntegrationTestCase): def test_set_only_once_child_table_row_value(self): doctype_meta = frappe.get_meta("DocType") doctype_meta.get_field("fields").set_only_once = 1 - doc = frappe.get_doc("DocType", "Blog Post") - + doc = frappe.get_doc("DocType", "Test Blog Post") # change one property from the child table - doc.fields[-1].fieldtype = "Check" + doc.fields[-3].fieldtype = "Check" self.assertRaises(frappe.CannotChangeConstantError, doc.save) frappe.clear_cache(doctype="DocType") def test_set_only_once_child_table_okay(self): doctype_meta = frappe.get_meta("DocType") doctype_meta.get_field("fields").set_only_once = 1 - doc = frappe.get_doc("DocType", "Blog Post") + doc = frappe.get_doc("DocType", "Test Blog Post") doc.load_doc_before_save() self.assertFalse(doc.validate_set_only_once()) frappe.clear_cache(doctype="DocType") def test_user_permission_doctypes(self): - add_user_permission("Blog Category", "-test-blog-category-1", "test2@example.com") - add_user_permission("Blogger", "_Test Blogger 1", "test2@example.com") + add_user_permission("Test Blog Category", "_Test Blog Category 1", "test2@example.com") + add_user_permission("Test Blogger", "_Test Blogger 1", "test2@example.com") frappe.set_user("test2@example.com") - frappe.clear_cache(doctype="Blog Post") + frappe.clear_cache(doctype="Test Blog Post") - doc = frappe.get_doc("Blog Post", "-test-blog-post") + doc = frappe.get_doc("Test Blog Post", "_Test Blog Post") self.assertFalse(doc.has_permission("read")) - doc = frappe.get_doc("Blog Post", "-test-blog-post-2") + doc = frappe.get_doc("Test Blog Post", "_Test Blog Post 2") self.assertTrue(doc.has_permission("read")) - frappe.clear_cache(doctype="Blog Post") + frappe.clear_cache(doctype="Test Blog Post") def if_owner_setup(self): - update("Blog Post", "Blogger", 0, "if_owner", 1) + update("Test Blog Post", "Blogger", 0, "if_owner", 1) - add_user_permission("Blog Category", "-test-blog-category-1", "test2@example.com") - add_user_permission("Blogger", "_Test Blogger 1", "test2@example.com") + add_user_permission("Test Blog Category", "_Test Blog Category 1", "test2@example.com") + add_user_permission("Test Blogger", "_Test Blogger 1", "test2@example.com") - frappe.clear_cache(doctype="Blog Post") + frappe.clear_cache(doctype="Test Blog Post") def test_insert_if_owner_with_user_permissions(self): """If `If Owner` is checked for a Role, check if that document is allowed to be read, updated, submitted, etc. except be created, even if the document is restricted based on User Permissions.""" - frappe.delete_doc("Blog Post", "-test-blog-post-title") + frappe.delete_doc("Test Blog Post", "-test-blog-post-title") self.if_owner_setup() @@ -330,8 +338,8 @@ class TestPermissions(IntegrationTestCase): doc = frappe.get_doc( { - "doctype": "Blog Post", - "blog_category": "-test-blog-category", + "doctype": "Test Blog Post", + "blog_category": "_Test Blog Category", "blogger": "_Test Blogger 1", "title": "_Test Blog Post Title", "content": "_Test Blog Post Content", @@ -341,34 +349,35 @@ class TestPermissions(IntegrationTestCase): self.assertRaises(frappe.PermissionError, doc.insert) frappe.set_user("test1@example.com") - add_user_permission("Blog Category", "-test-blog-category", "test2@example.com") + add_user_permission("Test Blog Category", "_Test Blog Category", "test2@example.com") frappe.set_user("test2@example.com") doc.insert() frappe.set_user("Administrator") - remove_user_permission("Blog Category", "-test-blog-category", "test2@example.com") - + remove_user_permission("Test Blog Category", "_Test Blog Category", "test2@example.com") + frappe.clear_cache() frappe.set_user("test2@example.com") doc = frappe.get_doc(doc.doctype, doc.name) + self.assertTrue(doc.has_permission("read")) self.assertTrue(doc.has_permission("write")) self.assertFalse(doc.has_permission("create")) # delete created record frappe.set_user("Administrator") - frappe.delete_doc("Blog Post", "-test-blog-post-title") + frappe.delete_doc("Test Blog Post", "_Test Blog Post Title") def test_ignore_user_permissions_if_missing(self): """If there are no user permissions, then allow as per role""" - add_user_permission("Blog Category", "-test-blog-category", "test2@example.com") + add_user_permission("Test Blog Category", "_Test Blog Category", "test2@example.com") frappe.set_user("test2@example.com") doc = frappe.get_doc( { - "doctype": "Blog Post", - "blog_category": "-test-blog-category-2", + "doctype": "Test Blog Post", + "blog_category": "_Test Blog Category 2", "blogger": "_Test Blogger 1", "title": "_Test Blog Post Title", "content": "_Test Blog Post Content", @@ -378,7 +387,7 @@ class TestPermissions(IntegrationTestCase): self.assertFalse(doc.has_permission("write")) frappe.set_user("Administrator") - remove_user_permission("Blog Category", "-test-blog-category", "test2@example.com") + remove_user_permission("Test Blog Category", "_Test Blog Category", "test2@example.com") frappe.set_user("test2@example.com") self.assertTrue(doc.has_permission("write")) @@ -428,9 +437,9 @@ class TestPermissions(IntegrationTestCase): clear_user_permissions_for_doctype("Contact") def test_user_permission_is_not_applied_if_user_roles_does_not_have_permission(self): - add_user_permission("Blog Post", "-test-blog-post-1", "test3@example.com") + add_user_permission("Test Blog Post", "_Test Blog Post 1", "test3@example.com") frappe.set_user("test3@example.com") - doc = frappe.get_doc("Blog Post", "-test-blog-post-1") + doc = frappe.get_doc("Test Blog Post", "_Test Blog Post 1") self.assertFalse(doc.has_permission("read")) frappe.set_user("Administrator") @@ -444,20 +453,22 @@ class TestPermissions(IntegrationTestCase): def test_contextual_user_permission(self): # should be applicable for across all doctypes - add_user_permission("Blogger", "_Test Blogger", "test2@example.com") + add_user_permission("Test Blogger", "_Test Blogger", "test2@example.com") # should be applicable only while accessing Blog Post - add_user_permission("Blogger", "_Test Blogger 1", "test2@example.com", applicable_for="Blog Post") + add_user_permission( + "Test Blogger", "_Test Blogger 1", "test2@example.com", applicable_for="Test Blog Post" + ) # should be applicable only while accessing User - add_user_permission("Blogger", "_Test Blogger 2", "test2@example.com", applicable_for="User") + add_user_permission("Test Blogger", "_Test Blogger 2", "test2@example.com", applicable_for="User") - posts = frappe.get_all("Blog Post", fields=["name", "blogger"]) + posts = frappe.get_all("Test Blog Post", fields=["name", "blogger"]) # Get all posts for admin self.assertEqual(len(posts), 4) frappe.set_user("test2@example.com") - posts = frappe.get_list("Blog Post", fields=["name", "blogger"]) + posts = frappe.get_list("Test Blog Post", fields=["name", "blogger"]) # Should get only posts with allowed blogger via user permission # only '_Test Blogger', '_Test Blogger 1' are allowed in Blog Post @@ -473,32 +484,32 @@ class TestPermissions(IntegrationTestCase): def test_if_owner_permission_overrides_properly(self): # check if user is not granted access if the user is not the owner of the doc # Blogger has only read access on the blog post unless he is the owner of the blog - update("Blog Post", "Blogger", 0, "if_owner", 1) - update("Blog Post", "Blogger", 0, "read", 1, 1) - update("Blog Post", "Blogger", 0, "write", 1, 1) - update("Blog Post", "Blogger", 0, "delete", 1, 1) + update("Test Blog Post", "Blogger", 0, "if_owner", 1) + update("Test Blog Post", "Blogger", 0, "read", 1, 1) + update("Test Blog Post", "Blogger", 0, "write", 1, 1) + update("Test Blog Post", "Blogger", 0, "delete", 1, 1) # currently test2 user has not created any document # still he should be able to do get_list query which should # not raise permission error but simply return empty list frappe.set_user("test2@example.com") - self.assertEqual(frappe.get_list("Blog Post"), []) + self.assertEqual(frappe.get_list("Test Blog Post"), []) frappe.set_user("Administrator") # creates a custom docperm with just read access # now any user can read any blog post (but other rights are limited to the blog post owner) - add_permission("Blog Post", "Blogger") - frappe.clear_cache(doctype="Blog Post") + add_permission("Test Blog Post", "Blogger") + frappe.clear_cache(doctype="Test Blog Post") - frappe.delete_doc("Blog Post", "-test-blog-post-title") + frappe.delete_doc("Test Blog Post", "_Test Blog Post Title") frappe.set_user("test1@example.com") doc = frappe.get_doc( { - "doctype": "Blog Post", - "blog_category": "-test-blog-category", + "doctype": "Test Blog Post", + "blog_category": "_Test Blog Category", "blogger": "_Test Blogger 1", "title": "_Test Blog Post Title", "content": "_Test Blog Post Content", @@ -523,21 +534,21 @@ class TestPermissions(IntegrationTestCase): self.assertTrue(doc.has_permission("delete")) # delete the created doc - frappe.delete_doc("Blog Post", "-test-blog-post-title") + frappe.delete_doc("Test Blog Post", "_Test Blog Post Title") def test_if_owner_permission_on_getdoc(self): - update("Blog Post", "Blogger", 0, "if_owner", 1) - update("Blog Post", "Blogger", 0, "read", 1) - update("Blog Post", "Blogger", 0, "write", 1) - update("Blog Post", "Blogger", 0, "delete", 1) - frappe.clear_cache(doctype="Blog Post") + update("Test Blog Post", "Blogger", 0, "if_owner", 1) + update("Test Blog Post", "Blogger", 0, "read", 1) + update("Test Blog Post", "Blogger", 0, "write", 1) + update("Test Blog Post", "Blogger", 0, "delete", 1) + frappe.clear_cache(doctype="Test Blog Post") frappe.set_user("test1@example.com") doc = frappe.get_doc( { - "doctype": "Blog Post", - "blog_category": "-test-blog-category", + "doctype": "Test Blog Post", + "blog_category": "_Test Blog Category", "blogger": "_Test Blogger 1", "title": "_Test Blog Post Title New", "content": "_Test Blog Post Content", @@ -546,18 +557,18 @@ class TestPermissions(IntegrationTestCase): doc.insert() - getdoc("Blog Post", doc.name) + getdoc("Test Blog Post", doc.name) doclist = [d.name for d in frappe.response.docs] self.assertTrue(doc.name in doclist) frappe.set_user("test2@example.com") - self.assertRaises(frappe.PermissionError, getdoc, "Blog Post", doc.name) + self.assertRaises(frappe.PermissionError, getdoc, "Test Blog Post", doc.name) def test_if_owner_permission_on_get_list(self): doc = frappe.get_doc( { - "doctype": "Blog Post", - "blog_category": "-test-blog-category", + "doctype": "Test Blog Post", + "blog_category": "_Test Blog Category", "blogger": "_Test Blogger 1", "title": "_Test If Owner Permissions on Get List", "content": "_Test Blog Post Content", @@ -566,39 +577,39 @@ class TestPermissions(IntegrationTestCase): doc.insert(ignore_if_duplicate=True) - update("Blog Post", "Blogger", 0, "if_owner", 1) - update("Blog Post", "Blogger", 0, "read", 1) + update("Test Blog Post", "Blogger", 0, "if_owner", 1) + update("Test Blog Post", "Blogger", 0, "read", 1) user = frappe.get_doc("User", "test2@example.com") user.add_roles("Website Manager") - frappe.clear_cache(doctype="Blog Post") + frappe.clear_cache(doctype="Test Blog Post") frappe.set_user("test2@example.com") - self.assertIn(doc.name, frappe.get_list("Blog Post", pluck="name")) + self.assertIn(doc.name, frappe.get_list("Test Blog Post", pluck="name")) # Become system manager to remove role frappe.set_user("test1@example.com") user.remove_roles("Website Manager") - frappe.clear_cache(doctype="Blog Post") + frappe.clear_cache(doctype="Test Blog Post") frappe.set_user("test2@example.com") - self.assertNotIn(doc.name, frappe.get_list("Blog Post", pluck="name")) + self.assertNotIn(doc.name, frappe.get_list("Test Blog Post", pluck="name")) def test_if_owner_permission_on_delete(self): - update("Blog Post", "Blogger", 0, "if_owner", 1) - update("Blog Post", "Blogger", 0, "read", 1, 1) - update("Blog Post", "Blogger", 0, "write", 1, 1) - update("Blog Post", "Blogger", 0, "delete", 1, 1) + update("Test Blog Post", "Blogger", 0, "if_owner", 1) + update("Test Blog Post", "Blogger", 0, "read", 1, 1) + update("Test Blog Post", "Blogger", 0, "write", 1, 1) + update("Test Blog Post", "Blogger", 0, "delete", 1, 1) # Remove delete perm - update("Blog Post", "Website Manager", 0, "delete", 0) + update("Test Blog Post", "Website Manager", 0, "delete", 0) - frappe.clear_cache(doctype="Blog Post") + frappe.clear_cache(doctype="Test Blog Post") with self.set_user("test2@example.com"): doc = frappe.get_doc( { - "doctype": "Blog Post", - "blog_category": "-test-blog-category", + "doctype": "Test Blog Post", + "blog_category": "_Test Blog Category", "blogger": "_Test Blogger 1", "title": "_Test Blog Post Title New 1", "content": "_Test Blog Post Content", @@ -607,46 +618,46 @@ class TestPermissions(IntegrationTestCase): doc.insert() - getdoc("Blog Post", doc.name) + getdoc("Test Blog Post", doc.name) doclist = [d.name for d in frappe.response.docs] self.assertTrue(doc.name in doclist) with self.set_user("testperm@example.com"): # Website Manager able to read - getdoc("Blog Post", doc.name) + getdoc("Test Blog Post", doc.name) doclist = [d.name for d in frappe.response.docs] self.assertTrue(doc.name in doclist) # Website Manager should not be able to delete - self.assertRaises(frappe.PermissionError, frappe.delete_doc, "Blog Post", doc.name) + self.assertRaises(frappe.PermissionError, frappe.delete_doc, "Test Blog Post", doc.name) with self.set_user("test2@example.com"): - frappe.delete_doc("Blog Post", "-test-blog-post-title-new-1") + frappe.delete_doc("Test Blog Post", "_Test Blog Post Title New 1") - update("Blog Post", "Website Manager", 0, "delete", 1, 1) + update("Test Blog Post", "Website Manager", 0, "delete", 1, 1) def test_clear_user_permissions(self): current_user = frappe.session.user frappe.set_user("Administrator") - clear_user_permissions_for_doctype("Blog Category", "test2@example.com") - clear_user_permissions_for_doctype("Blog Post", "test2@example.com") + clear_user_permissions_for_doctype("Test Blog Category", "test2@example.com") + clear_user_permissions_for_doctype("Test Blog Post", "test2@example.com") - add_user_permission("Blog Post", "-test-blog-post-1", "test2@example.com") - add_user_permission("Blog Post", "-test-blog-post-2", "test2@example.com") - add_user_permission("Blog Category", "-test-blog-category-1", "test2@example.com") + add_user_permission("Test Blog Post", "_Test Blog Post 1", "test2@example.com") + add_user_permission("Test Blog Post", "_Test Blog Post 2", "test2@example.com") + add_user_permission("Test Blog Category", "_Test Blog Category 1", "test2@example.com") - deleted_user_permission_count = clear_user_permissions("test2@example.com", "Blog Post") + deleted_user_permission_count = clear_user_permissions("test2@example.com", "Test Blog Post") self.assertEqual(deleted_user_permission_count, 2) blog_post_user_permission_count = frappe.db.count( - "User Permission", filters={"user": "test2@example.com", "allow": "Blog Post"} + "User Permission", filters={"user": "test2@example.com", "allow": "Test Blog Post"} ) self.assertEqual(blog_post_user_permission_count, 0) blog_category_user_permission_count = frappe.db.count( - "User Permission", filters={"user": "test2@example.com", "allow": "Blog Category"} + "User Permission", filters={"user": "test2@example.com", "allow": "Test Blog Category"} ) self.assertEqual(blog_category_user_permission_count, 1) diff --git a/frappe/tests/test_query.py b/frappe/tests/test_query.py index c8e7f93a9c..c5a65f9cb5 100644 --- a/frappe/tests/test_query.py +++ b/frappe/tests/test_query.py @@ -13,10 +13,11 @@ from frappe.tests.test_db_query import ( setup_patched_blog_post, setup_test_user, ) +from frappe.tests.test_helpers import setup_for_tests from frappe.tests.test_query_builder import db_type_is, run_only_if from frappe.utils.nestedset import get_ancestors_of, get_descendants_of -EXTRA_TEST_RECORD_DEPENDENCIES = ["User", "Blog Post", "Blog Category", "Blogger"] +EXTRA_TEST_RECORD_DEPENDENCIES = ["User"] def create_tree_docs(): @@ -63,6 +64,9 @@ def create_tree_docs(): class TestQuery(IntegrationTestCase): + def setUp(self): + setup_for_tests() + @run_only_if(db_type_is.MARIADB) def test_multiple_tables_in_filters(self): self.assertEqual( @@ -719,31 +723,30 @@ class TestQuery(IntegrationTestCase): def test_build_match_conditions(self): from frappe.permissions import add_user_permission, clear_user_permissions_for_doctype - clear_user_permissions_for_doctype("Blog Post", "test2@example.com") + clear_user_permissions_for_doctype("Test Blog Post", "test2@example.com") test2user = frappe.get_doc("User", "test2@example.com") test2user.add_roles("Blogger") frappe.set_user("test2@example.com") # Before any user permission is applied, there should be no conditions - query = frappe.qb.get_query("Blog Post", ignore_permissions=False) + query = frappe.qb.get_query("Test Blog Post", ignore_permissions=False) self.assertNotIn("(`tabBlog Post`.`name` in (", str(query)) - # Add user permissions - add_user_permission("Blog Post", "-test-blog-post", "test2@example.com", True) - add_user_permission("Blog Post", "-test-blog-post-1", "test2@example.com", True) + add_user_permission("Test Blog Post", "_Test Blog Post", "test2@example.com", True) + add_user_permission("Test Blog Post", "_Test Blog Post 1", "test2@example.com", True) # After applying user permission, condition should be in query - query = str(frappe.qb.get_query("Blog Post", ignore_permissions=False)) + query = str(frappe.qb.get_query("Test Blog Post", ignore_permissions=False)) # Check for user permission condition in the query string if frappe.db.db_type == "mariadb": - self.assertIn("`name` IS NULL OR `name` IN ('-test-blog-post-1','-test-blog-post')", query) + self.assertIn("`name` IS NULL OR `name` IN ('_Test Blog Post 1','_Test Blog Post')", query) elif frappe.db.db_type == "postgres": - self.assertIn("\"name\" IS NULL OR \"name\" IN ('-test-blog-post-1','-test-blog-post')", query) + self.assertIn("\"name\" IS NULL OR \"name\" IN ('_Test Blog Post 1','_Test Blog Post')", query) frappe.set_user("Administrator") - clear_user_permissions_for_doctype("Blog Post", "test2@example.com") + clear_user_permissions_for_doctype("Test Blog Post", "test2@example.com") test2user.remove_roles("Blogger") def test_ignore_permissions_for_query(self): @@ -763,17 +766,17 @@ class TestQuery(IntegrationTestCase): # Create a test blog post test_post = frappe.get_doc( { - "doctype": "Blog Post", + "doctype": "Test Blog Post", "title": "Test Permission Post", "content": "Test Content", - "blog_category": "-test-blog-category", + "blog_category": "_Test Blog Category", "published": 1, } ).insert(ignore_permissions=True, ignore_mandatory=True) # Without proper permission, published field should be filtered out data = frappe.qb.get_query( - "Blog Post", + "Test Blog Post", filters={"name": test_post.name}, fields=["name", "published", "title"], ignore_permissions=False, @@ -787,7 +790,7 @@ class TestQuery(IntegrationTestCase): # With Administrator, all fields should be accessible frappe.set_user("Administrator") data = frappe.qb.get_query( - "Blog Post", + "Test Blog Post", filters={"name": test_post.name}, fields=["name", "published", "title"], ignore_permissions=False, @@ -1055,10 +1058,10 @@ class TestQuery(IntegrationTestCase): # Create a test blog post test_post = frappe.get_doc( { - "doctype": "Blog Post", + "doctype": "Test Blog Post", "title": "Test Filter Permission Post", "content": "Test Content", - "blog_category": "-test-blog-category", + "blog_category": "_Test Blog Category", "published": 1, # permlevel 1 } ).insert(ignore_permissions=True, ignore_mandatory=True, ignore_if_duplicate=True) @@ -1067,7 +1070,7 @@ class TestQuery(IntegrationTestCase): # Try filtering on permitted field (title - permlevel 0) try: frappe.qb.get_query( - "Blog Post", + "Test Blog Post", filters={"title": test_post.title}, ignore_permissions=False, user=user.name, @@ -1078,7 +1081,7 @@ class TestQuery(IntegrationTestCase): # Try filtering on non-permitted field (published - permlevel 1) with self.assertRaises(frappe.PermissionError) as cm: frappe.qb.get_query( - "Blog Post", + "Test Blog Post", filters={"published": 1}, ignore_permissions=False, user=user.name, diff --git a/frappe/tests/test_sitemap.py b/frappe/tests/test_sitemap.py index 8b5ae0e172..c71b5415b9 100644 --- a/frappe/tests/test_sitemap.py +++ b/frappe/tests/test_sitemap.py @@ -5,11 +5,6 @@ from frappe.utils import get_html_for_route class TestSitemap(IntegrationTestCase): def test_sitemap(self): - from frappe.tests.utils import make_test_records - - make_test_records("Blog Post") - blogs = frappe.get_all("Blog Post", {"published": 1}, ["route"], limit=1) xml = get_html_for_route("sitemap.xml") self.assertTrue("/about" in xml) self.assertTrue("/contact" in xml) - self.assertTrue(blogs[0].route in xml) diff --git a/frappe/tests/ui_test_helpers.py b/frappe/tests/ui_test_helpers.py index a06fa09eef..871edde18b 100644 --- a/frappe/tests/ui_test_helpers.py +++ b/frappe/tests/ui_test_helpers.py @@ -1,6 +1,7 @@ import frappe from frappe import _ from frappe.permissions import AUTOMATIC_ROLES +from frappe.tests.test_helpers import create_test_blog_category from frappe.utils import add_to_date, now UI_TEST_USER = "frappe@example.com" @@ -85,6 +86,13 @@ def prepare_webform_test(): frappe.delete_doc_if_exists("Web Form", "note") +@whitelist_for_tests +def create_doctype_for_attachment(): + create_test_blog_category() + doc = frappe.get_doc("Test Blog Category", "_Test Blog Category 2") + return doc + + @whitelist_for_tests def create_communication_record(): doc = frappe.get_doc( @@ -397,33 +405,6 @@ def insert_translations(): frappe.get_doc(doc).insert(ignore_if_duplicate=True) -@whitelist_for_tests -def create_blog_post(): - blog_category = frappe.get_doc( - {"name": "general", "doctype": "Blog Category", "title": "general"} - ).insert(ignore_if_duplicate=True) - - blogger = frappe.get_doc( - { - "name": "attachment blogger", - "doctype": "Blogger", - "full_name": "attachment blogger", - "short_name": "attachment blogger", - } - ).insert(ignore_if_duplicate=True) - - return frappe.get_doc( - { - "name": "test-blog-attachment-post", - "doctype": "Blog Post", - "title": "test-blog-attachment-post", - "blog_category": blog_category.name, - "blogger": blogger.name, - "content_type": "Rich Text", - }, - ).insert(ignore_if_duplicate=True) - - @whitelist_for_tests def create_test_user(username=None): name = username or UI_TEST_USER diff --git a/frappe/website/doctype/blog_category/README.md b/frappe/website/doctype/blog_category/README.md deleted file mode 100644 index af14b5dc14..0000000000 --- a/frappe/website/doctype/blog_category/README.md +++ /dev/null @@ -1 +0,0 @@ -Blog category. \ No newline at end of file diff --git a/frappe/website/doctype/blog_category/__init__.py b/frappe/website/doctype/blog_category/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/frappe/website/doctype/blog_category/blog_category.js b/frappe/website/doctype/blog_category/blog_category.js deleted file mode 100644 index 193531c73c..0000000000 --- a/frappe/website/doctype/blog_category/blog_category.js +++ /dev/null @@ -1,6 +0,0 @@ -// Copyright (c) 2016, Frappe Technologies and contributors -// For license information, please see license.txt - -frappe.ui.form.on("Blog Category", { - refresh: function (frm) {}, -}); diff --git a/frappe/website/doctype/blog_category/blog_category.json b/frappe/website/doctype/blog_category/blog_category.json deleted file mode 100644 index db0aa29546..0000000000 --- a/frappe/website/doctype/blog_category/blog_category.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "actions": [], - "allow_guest_to_view": 1, - "allow_import": 1, - "allow_rename": 1, - "creation": "2013-03-08 09:41:11", - "doctype": "DocType", - "document_type": "Setup", - "engine": "InnoDB", - "field_order": [ - "published", - "title", - "route", - "preview_image", - "description" - ], - "fields": [ - { - "fieldname": "title", - "fieldtype": "Data", - "in_list_view": 1, - "label": "Title", - "no_copy": 1, - "reqd": 1 - }, - { - "default": "1", - "fieldname": "published", - "fieldtype": "Check", - "in_list_view": 1, - "label": "Published" - }, - { - "depends_on": "published", - "fieldname": "route", - "fieldtype": "Data", - "label": "Route", - "read_only": 1, - "unique": 1 - }, - { - "fieldname": "description", - "fieldtype": "Small Text", - "label": "Description" - }, - { - "fieldname": "preview_image", - "fieldtype": "Attach Image", - "label": "Preview Image" - } - ], - "has_web_view": 1, - "icon": "fa fa-tag", - "idx": 1, - "index_web_pages_for_search": 1, - "is_published_field": "published", - "links": [ - { - "link_doctype": "Blog Post", - "link_fieldname": "blog_category" - } - ], - "make_attachments_public": 1, - "modified": "2024-08-15 19:03:00.345431", - "modified_by": "Administrator", - "module": "Website", - "name": "Blog Category", - "owner": "Administrator", - "permissions": [ - { - "create": 1, - "delete": 1, - "email": 1, - "print": 1, - "read": 1, - "report": 1, - "role": "Website Manager", - "share": 1, - "write": 1 - }, - { - "email": 1, - "print": 1, - "read": 1, - "role": "Blogger" - } - ], - "quick_entry": 1, - "sort_field": "creation", - "sort_order": "DESC", - "states": [], - "title_field": "title", - "track_changes": 1 -} \ No newline at end of file diff --git a/frappe/website/doctype/blog_category/blog_category.py b/frappe/website/doctype/blog_category/blog_category.py deleted file mode 100644 index fac00370f6..0000000000 --- a/frappe/website/doctype/blog_category/blog_category.py +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -# License: MIT. See LICENSE - -from frappe.website.utils import clear_cache -from frappe.website.website_generator import WebsiteGenerator - - -class BlogCategory(WebsiteGenerator): - # begin: auto-generated types - # This code is auto-generated. Do not modify anything in this block. - - from typing import TYPE_CHECKING - - if TYPE_CHECKING: - from frappe.types import DF - - description: DF.SmallText | None - preview_image: DF.AttachImage | None - published: DF.Check - route: DF.Data | None - title: DF.Data - # end: auto-generated types - - def autoname(self): - # to override autoname of WebsiteGenerator - self.name = self.scrub(self.title) - - def on_update(self): - clear_cache() - - def set_route(self): - # Override blog route since it has to been templated - self.route = "blog/" + self.name diff --git a/frappe/website/doctype/blog_category/templates/blog_category.html b/frappe/website/doctype/blog_category/templates/blog_category.html deleted file mode 100644 index 99817d7808..0000000000 --- a/frappe/website/doctype/blog_category/templates/blog_category.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "templates/pages/blog.html" %} - -{% block title %}{{ title }}{% endblock %} - -{% block script %} - -{% endblock %} diff --git a/frappe/website/doctype/blog_category/templates/blog_category_row.html b/frappe/website/doctype/blog_category/templates/blog_category_row.html deleted file mode 100644 index 2b999819cb..0000000000 --- a/frappe/website/doctype/blog_category/templates/blog_category_row.html +++ /dev/null @@ -1,4 +0,0 @@ -- ${date} ${seo_description} -
-- {{ blog_intro }} -
-{{ blog_introduction or '' }}
-{{ post.intro }}
-