From 993692ba32b348359ee88217e14be818b65e4168 Mon Sep 17 00:00:00 2001 From: tundebabzy Date: Mon, 24 Jul 2017 06:57:59 +0100 Subject: [PATCH] Issue changing 'Unique' field option in v8 (#3760) * fix wrong query * test unique constraint removal --- frappe/core/doctype/doctype/test_doctype.py | 31 +++++++++++++++++++-- frappe/model/db_schema.py | 2 +- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/frappe/core/doctype/doctype/test_doctype.py b/frappe/core/doctype/doctype/test_doctype.py index 678e52451a..6a0794c7a1 100644 --- a/frappe/core/doctype/doctype/test_doctype.py +++ b/frappe/core/doctype/doctype/test_doctype.py @@ -8,13 +8,14 @@ import unittest # test_records = frappe.get_test_records('DocType') + class TestDocType(unittest.TestCase): - def new_doctype(self, name): + def new_doctype(self, name, unique=0): return frappe.get_doc({ "doctype": "DocType", "module": "Core", "custom": 1, - "fields": [{"label": "Some Field", "fieldname": "some_fieldname", "fieldtype": "Data"}], + "fields": [{"label": "Some Field", "fieldname": "some_fieldname", "fieldtype": "Data", "unique": unique}], "permissions": [{"role": "System Manager", "read": 1}], "name": name }) @@ -28,4 +29,28 @@ class TestDocType(unittest.TestCase): frappe.delete_doc("DocType", name) doc = self.new_doctype(name).insert() - doc.delete() \ No newline at end of file + doc.delete() + + def test_doctype_unique_constraint_dropped(self): + if frappe.db.exists("DocType", "With_Unique"): + frappe.delete_doc("DocType", "With_Unique") + + dt = self.new_doctype("With_Unique", unique=1) + dt.insert() + + doc1 = frappe.new_doc("With_Unique") + doc2 = frappe.new_doc("With_Unique") + doc1.some_fieldname = "Something" + doc1.name = "one" + doc2.some_fieldname = "Something" + doc2.name = "two" + + doc1.insert() + self.assertRaises(frappe.UniqueValidationError, doc2.insert) + + dt.fields[0].unique = 0 + dt.save() + + doc2.insert() + doc1.delete() + doc2.delete() diff --git a/frappe/model/db_schema.py b/frappe/model/db_schema.py index a99a783e1f..01725e12a6 100644 --- a/frappe/model/db_schema.py +++ b/frappe/model/db_schema.py @@ -314,7 +314,7 @@ class DbTable: # if index key exists if frappe.db.sql("""show index from `{0}` where key_name=%s - and Non_unique=%s""".format(self.name), (col.fieldname, 0 if col.unique else 1)): + and Non_unique=%s""".format(self.name), (col.fieldname, col.unique)): query.append("drop index `{}`".format(col.fieldname)) for col in self.set_default: