コード例 #1
0
	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")
コード例 #2
0
    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()
コード例 #3
0
    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()
コード例 #4
0
	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")
コード例 #5
0
ファイル: test_rename_doc.py プロジェクト: erpnext-tm/frappe
    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`")
コード例 #6
0
    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))
コード例 #7
0
	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")
コード例 #8
0
    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()