def test_rename_doctype(self): from frappe.core.doctype.doctype.test_doctype import new_doctype fields =[{ "label": "Linked To", "fieldname": "linked_to_doctype", "fieldtype": "Link", "options": "DocType", "unique": 0 }] if not frappe.db.exists("DocType", "Rename This"): new_doctype("Rename This", unique=0, fields=fields).insert() to_rename_record = frappe.get_doc({ "doctype": "Rename This", "linked_to_doctype": "Rename This" }) to_rename_record.insert() # Rename doctype self.assertEqual("Renamed Doc", frappe.rename_doc("DocType", "Rename This", "Renamed Doc", force=True)) # Test if Doctype value has changed in Link field renamed_doctype_record = frappe.get_doc("Renamed Doc", to_rename_record.name) self.assertEqual(renamed_doctype_record.linked_to_doctype, "Renamed Doc") # Test if there are conflicts between a record and a DocType # having the same name old_name = to_rename_record.name new_name = "ToDo" self.assertEqual(new_name, frappe.rename_doc("Renamed Doc", old_name, new_name, force=True)) frappe.delete_doc_if_exists("Renamed Doc", "ToDo") frappe.delete_doc_if_exists("DocType", "Renamed Doc")
def test_child_table_naming(self): child_dt_with_naming = new_doctype( "childtable_with_autonaming", istable=1, autoname="field:some_fieldname").insert() dt_with_child_autoname = new_doctype( "dt_with_childtable_naming", fields=[{ "label": "table with naming", "fieldname": "table_with_naming", "options": "childtable_with_autonaming", "fieldtype": "Table", }], ).insert() name = frappe.generate_hash(length=10) doc = frappe.new_doc("dt_with_childtable_naming") doc.append("table_with_naming", {"some_fieldname": name}) doc.save() self.assertEqual(doc.table_with_naming[0].name, name) # change autoname field doc.table_with_naming[0].some_fieldname = "Something else" doc.save() self.assertEqual(doc.table_with_naming[0].name, name) self.assertEqual(doc.table_with_naming[0].some_fieldname, name) doc.delete() dt_with_child_autoname.delete() child_dt_with_naming.delete()
def test_fieldname_starting_with_int(self): from frappe.core.doctype.doctype.test_doctype import new_doctype dt = new_doctype( "dt_with_int_named_fieldname", fields=[{ "label": "1field", "fieldname": "1field", "fieldtype": "Data" }], ).insert(ignore_permissions=True) frappe.get_doc({ "doctype": "dt_with_int_named_fieldname", "1field": "10" }).insert(ignore_permissions=True) query = DatabaseQuery("dt_with_int_named_fieldname") self.assertTrue(query.execute(filters={"1field": "10"})) self.assertTrue(query.execute(filters={"1field": ["like", "1%"]})) self.assertTrue(query.execute(filters={"1field": ["in", "1,2,10"]})) self.assertTrue(query.execute(filters={"1field": ["is", "set"]})) self.assertFalse(query.execute(filters={"1field": ["not like", "1%"]})) dt.delete()
def test_user_perm_on_new_doc_with_field_default(self): """Test User Perm impact on frappe.new_doc. with *field* default value""" frappe.set_user("Administrator") user = create_user("*****@*****.**", "Blogger") # make a doctype "Doc A" with 'doctype' link field and default value ToDo if not frappe.db.exists("DocType", "Doc A"): doc = new_doctype( "Doc A", fields=[ { "label": "DocType", "fieldname": "doc", "fieldtype": "Link", "options": "DocType", "default": "ToDo", } ], unique=0, ) doc.insert() # make User Perm on DocType 'ToDo' in Assignment Rule (unrelated doctype) add_user_permissions(get_params(user, "DocType", "ToDo", applicable=["Assignment Rule"])) frappe.set_user("*****@*****.**") new_doc = frappe.new_doc("Doc A") # User perm is created on ToDo but for doctype Assignment Rule only # it should not have impact on Doc A self.assertEquals(new_doc.doc, "ToDo") frappe.set_user("Administrator") remove_applicable(["Assignment Rule"], "*****@*****.**", "DocType", "ToDo")
def test_rename_doctype(self): """Rename DocType via frappe.rename_doc""" from frappe.core.doctype.doctype.test_doctype import new_doctype if not frappe.db.exists("DocType", "Rename This"): new_doctype( "Rename This", fields=[{ "label": "Linked To", "fieldname": "linked_to_doctype", "fieldtype": "Link", "options": "DocType", "unique": 0, }], ).insert() to_rename_record = frappe.get_doc({ "doctype": "Rename This", "linked_to_doctype": "Rename This" }).insert() # Rename doctype self.assertEqual( "Renamed Doc", frappe.rename_doc("DocType", "Rename This", "Renamed Doc", force=True)) # Test if Doctype value has changed in Link field linked_to_doctype = frappe.db.get_value("Renamed Doc", to_rename_record.name, "linked_to_doctype") self.assertEqual(linked_to_doctype, "Renamed Doc") # Test if there are conflicts between a record and a DocType # having the same name old_name = to_rename_record.name new_name = "ToDo" self.assertEqual( new_name, frappe.rename_doc("Renamed Doc", old_name, new_name, force=True)) # delete_doc doesnt drop tables # this is done to bypass inconsistencies in the db frappe.delete_doc_if_exists("DocType", "Renamed Doc") frappe.db.sql_ddl("drop table if exists `tabRenamed Doc`")
def test_user_perm_for_nested_doctype(self): """Test if descendants' visibility is controlled for a nested DocType.""" from frappe.core.doctype.doctype.test_doctype import new_doctype user = create_user("*****@*****.**", "Blogger") if not frappe.db.exists("DocType", "Person"): doc = new_doctype("Person", fields=[{ "label": "Person Name", "fieldname": "person_name", "fieldtype": "Data" }], unique=0) doc.is_tree = 1 doc.insert() parent_record = frappe.get_doc({ "doctype": "Person", "person_name": "Parent", "is_group": 1 }).insert() child_record = frappe.get_doc({ "doctype": "Person", "person_name": "Child", "is_group": 0, "parent_person": parent_record.name }).insert() add_user_permissions(get_params(user, "Person", parent_record.name)) # check if adding perm on a group record, makes child record visible self.assertTrue( has_user_permission(frappe.get_doc("Person", parent_record.name), user.name)) self.assertTrue( has_user_permission(frappe.get_doc("Person", child_record.name), user.name)) frappe.db.set_value("User Permission", { "allow": "Person", "for_value": parent_record.name }, "hide_descendants", 1) frappe.cache().delete_value("user_permissions") # check if adding perm on a group record with hide_descendants enabled, # hides child records self.assertTrue( has_user_permission(frappe.get_doc("Person", parent_record.name), user.name)) self.assertFalse( has_user_permission(frappe.get_doc("Person", child_record.name), user.name))
def test_user_perm_on_new_doc_with_user_default(self): """Test User Perm impact on frappe.new_doc. with *user* default value""" from frappe.core.doctype.session_default_settings.session_default_settings import ( clear_session_defaults, set_session_default_values, ) frappe.set_user("Administrator") user = create_user("*****@*****.**", "Blogger") # make a doctype "Doc A" with 'doctype' link field if not frappe.db.exists("DocType", "Doc A"): doc = new_doctype( "Doc A", fields=[ { "label": "DocType", "fieldname": "doc", "fieldtype": "Link", "options": "DocType", } ], unique=0, ) doc.insert() # create a 'DocType' session default field if not frappe.db.exists("Session Default", {"ref_doctype": "DocType"}): settings = frappe.get_single("Session Default Settings") settings.append("session_defaults", {"ref_doctype": "DocType"}) settings.save() # make User Perm on DocType 'ToDo' in Assignment Rule (unrelated doctype) add_user_permissions(get_params(user, "DocType", "ToDo", applicable=["Assignment Rule"])) # User default Doctype value is ToDo via Session Defaults frappe.set_user("*****@*****.**") set_session_default_values({"doc": "ToDo"}) new_doc = frappe.new_doc("Doc A") # User perm is created on ToDo but for doctype Assignment Rule only # it should not have impact on Doc A self.assertEquals(new_doc.doc, "ToDo") frappe.set_user("Administrator") clear_session_defaults() remove_applicable(["Assignment Rule"], "*****@*****.**", "DocType", "ToDo")
def test_custom_link(self): try: # create a dummy doctype linked to Event testdt_name = 'Test Link for Event' testdt = new_doctype(testdt_name, fields=[ dict(fieldtype='Link', fieldname='event', options='Event') ]).insert() testdt_name1 = 'Test Link for Event 1' testdt1 = new_doctype(testdt_name1, fields=[ dict(fieldtype='Link', fieldname='event', options='Event') ]).insert() # add a custom link d = self.get_customize_form("Event") d.append( 'links', dict(link_doctype=testdt_name, link_fieldname='event', group='Tests')) d.append( 'links', dict(link_doctype=testdt_name1, link_fieldname='event', group='Tests')) d.run_method("save_customization") frappe.clear_cache() event = frappe.get_meta('Event') # check links exist self.assertTrue( [d.name for d in event.links if d.link_doctype == testdt_name]) self.assertTrue([ d.name for d in event.links if d.link_doctype == testdt_name1 ]) # check order order = json.loads(event.links_order) self.assertListEqual(order, [d.name for d in event.links]) # remove the link d = self.get_customize_form("Event") d.links = [] d.run_method("save_customization") frappe.clear_cache() event = frappe.get_meta('Event') self.assertFalse([ d.name for d in (event.links or []) if d.link_doctype == testdt_name ]) finally: testdt.delete() testdt1.delete()