59 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """ smoak tests to check basic functionality calls on known form loads."""
 | |
| 
 | |
| import frappe
 | |
| from frappe.desk.form.load import getdoc
 | |
| from frappe.tests.utils import FrappeTestCase, change_settings
 | |
| from frappe.www.printview import get_html_and_style
 | |
| 
 | |
| 
 | |
| class TestFormLoads(FrappeTestCase):
 | |
| 	@change_settings("Print Settings", {"allow_print_for_cancelled": 1})
 | |
| 	def test_load(self):
 | |
| 		erpnext_modules = frappe.get_all("Module Def", filters={"app_name": "erpnext"}, pluck="name")
 | |
| 		doctypes = frappe.get_all(
 | |
| 			"DocType",
 | |
| 			{"istable": 0, "issingle": 0, "is_virtual": 0, "module": ("in", erpnext_modules)},
 | |
| 			pluck="name",
 | |
| 		)
 | |
| 
 | |
| 		for doctype in doctypes:
 | |
| 			last_doc = frappe.db.get_value(doctype, {}, "name", order_by="modified desc")
 | |
| 			if not last_doc:
 | |
| 				continue
 | |
| 			with self.subTest(msg=f"Loading {doctype} - {last_doc}", doctype=doctype, last_doc=last_doc):
 | |
| 				self.assertFormLoad(doctype, last_doc)
 | |
| 				self.assertDocPrint(doctype, last_doc)
 | |
| 
 | |
| 	def assertFormLoad(self, doctype, docname):
 | |
| 		# reset previous response
 | |
| 		frappe.response = frappe._dict({"docs": []})
 | |
| 		frappe.response.docinfo = None
 | |
| 
 | |
| 		try:
 | |
| 			getdoc(doctype, docname)
 | |
| 		except Exception as e:
 | |
| 			self.fail(f"Failed to load {doctype}-{docname}: {e}")
 | |
| 
 | |
| 		self.assertTrue(
 | |
| 			frappe.response.docs, msg=f"expected document in reponse, found: {frappe.response.docs}"
 | |
| 		)
 | |
| 		self.assertTrue(
 | |
| 			frappe.response.docinfo, msg=f"expected docinfo in reponse, found: {frappe.response.docinfo}"
 | |
| 		)
 | |
| 
 | |
| 	def assertDocPrint(self, doctype, docname):
 | |
| 		doc = frappe.get_doc(doctype, docname)
 | |
| 		doc.set("__onload", frappe._dict())
 | |
| 		doc.run_method("onload")
 | |
| 
 | |
| 		messages_before = frappe.get_message_log()
 | |
| 		ret = get_html_and_style(doc=doc.as_json(), print_format="Standard", no_letterhead=1)
 | |
| 		messages_after = frappe.get_message_log()
 | |
| 
 | |
| 		if len(messages_after) > len(messages_before):
 | |
| 			new_messages = messages_after[len(messages_before) :]
 | |
| 			self.fail("Print view showing error/warnings: \n" + "\n".join(str(msg) for msg in new_messages))
 | |
| 
 | |
| 		# html should exist
 | |
| 		self.assertTrue(bool(ret["html"]))
 |