fix: dont `db_set` on unsaved document (backport #18453)version-14
@@ -1173,6 +1173,9 @@ class Document(BaseDocument): | |||||
# to trigger notification on value change | # to trigger notification on value change | ||||
self.run_method("before_change") | self.run_method("before_change") | ||||
if self.name is None: | |||||
return | |||||
frappe.db.set_value( | frappe.db.set_value( | ||||
self.doctype, | self.doctype, | ||||
self.name, | self.name, | ||||
@@ -163,6 +163,12 @@ class TestDocument(FrappeTestCase): | |||||
self.assertRaises(frappe.ValidationError, d.run_method, "validate") | self.assertRaises(frappe.ValidationError, d.run_method, "validate") | ||||
self.assertRaises(frappe.ValidationError, d.save) | self.assertRaises(frappe.ValidationError, d.save) | ||||
def test_db_set_no_query_on_new_docs(self): | |||||
user = frappe.new_doc("User") | |||||
user.db_set("user_type", "Magical Wizard") | |||||
with self.assertQueryCount(0): | |||||
user.db_set("user_type", "Magical Wizard") | |||||
def test_update_after_submit(self): | def test_update_after_submit(self): | ||||
d = self.test_insert() | d = self.test_insert() | ||||
d.starts_on = "2014-09-09" | d.starts_on = "2014-09-09" | ||||
@@ -69,16 +69,18 @@ class FrappeTestCase(unittest.TestCase): | |||||
@contextmanager | @contextmanager | ||||
def assertQueryCount(self, count): | def assertQueryCount(self, count): | ||||
queries = [] | |||||
def _sql_with_count(*args, **kwargs): | def _sql_with_count(*args, **kwargs): | ||||
frappe.db.sql_query_count += 1 | |||||
return orig_sql(*args, **kwargs) | |||||
ret = orig_sql(*args, **kwargs) | |||||
queries.append(frappe.db.last_query) | |||||
return ret | |||||
try: | try: | ||||
orig_sql = frappe.db.sql | orig_sql = frappe.db.sql | ||||
frappe.db.sql_query_count = 0 | |||||
frappe.db.sql = _sql_with_count | frappe.db.sql = _sql_with_count | ||||
yield | yield | ||||
self.assertLessEqual(frappe.db.sql_query_count, count) | |||||
self.assertLessEqual(len(queries), count, msg="Queries executed: " + "\n\n".join(queries)) | |||||
finally: | finally: | ||||
frappe.db.sql = orig_sql | frappe.db.sql = orig_sql | ||||