fix: validate doc naming when set via prompt or by passing set_name

This commit is contained in:
Rucha Mahabal 2022-01-27 12:24:22 +05:30
parent 028bb9eb06
commit 66c8fb9cfa
2 changed files with 49 additions and 3 deletions

View file

@ -5,7 +5,7 @@ import time
from frappe import _, msgprint, is_whitelisted
from frappe.utils import flt, cstr, now, get_datetime_str, file_lock, date_diff
from frappe.model.base_document import BaseDocument, get_controller
from frappe.model.naming import set_new_name, gen_new_name_for_cancelled_doc
from frappe.model.naming import set_new_name, gen_new_name_for_cancelled_doc, validate_name
from werkzeug.exceptions import NotFound, Forbidden
import hashlib, json
from frappe.model import optional_fields, table_fields
@ -415,12 +415,12 @@ class Document(BaseDocument):
# If autoname has set as Prompt (name)
if self.get("__newname"):
self.name = self.get("__newname")
self.name = validate_name(self.doctype, self.get("__newname"))
self.flags.name_set = True
return
if set_name:
self.name = set_name
self.name = validate_name(self.doctype, set_name)
else:
set_new_name(self)

View file

@ -10,12 +10,18 @@ from frappe.model.naming import append_number_if_name_exists, revert_series_if_l
from frappe.model.naming import determine_consecutive_week_number, parse_naming_series
class TestNaming(unittest.TestCase):
def setUp(self):
frappe.db.sql('delete from `tabNote`')
frappe.db.sql('delete from `tabToDo`')
def tearDown(self):
# Reset ToDo autoname to hash
todo_doctype = frappe.get_doc('DocType', 'ToDo')
todo_doctype.autoname = 'hash'
todo_doctype.save()
frappe.db.rollback()
def test_append_number_if_name_exists(self):
'''
Append number to name based on existing values
@ -208,3 +214,43 @@ class TestNaming(unittest.TestCase):
dt = datetime.fromisoformat("2021-12-31")
w = determine_consecutive_week_number(dt)
self.assertEqual(w, "52")
def test_naming_validations(self):
# case 1: check same name as doctype
# set name via prompt
tag = frappe.get_doc({
'doctype': 'Tag',
'__newname': 'Tag'
})
self.assertRaises(frappe.NameError, tag.insert)
# set by passing set_name as ToDo
self.assertRaises(frappe.NameError, make_invalid_todo)
# set new name - Note
note = frappe.get_doc({
'doctype': 'Note',
'title': 'Note'
})
self.assertRaises(frappe.NameError, note.insert)
# case 2: set name with "New ---"
tag = frappe.get_doc({
'doctype': 'Tag',
'__newname': 'New Tag'
})
self.assertRaises(frappe.NameError, tag.insert)
# case 3: set name with special characters
tag = frappe.get_doc({
'doctype': 'Tag',
'__newname': 'Tag<>'
})
self.assertRaises(frappe.NameError, tag.insert)
def make_invalid_todo():
frappe.get_doc({
'doctype': 'ToDo',
'description': 'Test'
}).insert(set_name='ToDo')