Couldn't seem to sanely get postgres default state Signed-off-by: Akhil Narang <me@akhilnarang.dev>
62 lines
2 KiB
Python
62 lines
2 KiB
Python
import frappe
|
|
from frappe.core.doctype.doctype.test_doctype import new_doctype
|
|
from frappe.database.schema import DBTable
|
|
from frappe.tests.utils import FrappeTestCase
|
|
|
|
|
|
class TestNonNullableDocfield(FrappeTestCase):
|
|
def setUp(self):
|
|
doc = new_doctype(
|
|
fields=[
|
|
{
|
|
"fieldname": "test_field",
|
|
"fieldtype": "Data",
|
|
"label": "test_field",
|
|
"not_nullable": 1,
|
|
},
|
|
],
|
|
)
|
|
doc.insert()
|
|
self.doctype_name = doc.name
|
|
|
|
nullable_doc = new_doctype(
|
|
fields=[
|
|
{
|
|
"fieldname": "test_field",
|
|
"fieldtype": "Data",
|
|
"label": "test_field",
|
|
}
|
|
]
|
|
)
|
|
nullable_doc.insert()
|
|
self.nullable_doctype_name = nullable_doc.name
|
|
|
|
def test_non_nullable_field(self):
|
|
doc = frappe.new_doc(doctype=self.doctype_name)
|
|
doc.insert()
|
|
inserted_doc = frappe.db.get(self.doctype_name, {"name": doc.name})
|
|
self.assertEqual(inserted_doc.test_field, "")
|
|
|
|
def test_edit_field_nullable_status(self):
|
|
doc = frappe.new_doc(doctype=self.nullable_doctype_name)
|
|
doc.insert()
|
|
inserted_doc = frappe.db.get(self.nullable_doctype_name, {"name": doc.name})
|
|
self.assertEqual(inserted_doc.test_field, None)
|
|
table = DBTable(self.nullable_doctype_name)
|
|
query = "SELECT column_name AS name, column_default is NULL AS default_null,is_nullable = 'NO' AS not_nullable FROM information_schema.columns WHERE table_name=%s"
|
|
for column in frappe.db.sql(query, table.table_name, as_dict=True):
|
|
if column.name == "test_field":
|
|
self.assertFalse(column.not_nullable)
|
|
|
|
doctype_doc = frappe.get_doc("DocType", self.nullable_doctype_name)
|
|
for field in doctype_doc.fields:
|
|
if field.fieldname == "test_field":
|
|
field.not_nullable = 1
|
|
break
|
|
doctype_doc.save()
|
|
for column in frappe.db.sql(query, table.table_name, as_dict=True):
|
|
if column.name == "test_field":
|
|
self.assertFalse(column.default_null)
|
|
self.assertTrue(column.not_nullable)
|
|
inserted_doc = frappe.db.get(self.nullable_doctype_name, {"name": doc.name})
|
|
self.assertEqual(inserted_doc.test_field, "")
|