fix: validate doc naming when set via prompt or by passing set_name
This commit is contained in:
parent
028bb9eb06
commit
66c8fb9cfa
2 changed files with 49 additions and 3 deletions
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
Loading…
Add table
Reference in a new issue