You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

59 lines
2.0 KiB

  1. """ smoak tests to check basic functionality calls on known form loads."""
  2. import frappe
  3. from frappe.desk.form.load import getdoc
  4. from frappe.tests.utils import FrappeTestCase, change_settings
  5. from frappe.www.printview import get_html_and_style
  6. class TestFormLoads(FrappeTestCase):
  7. @change_settings("Print Settings", {"allow_print_for_cancelled": 1})
  8. def test_load(self):
  9. erpnext_modules = frappe.get_all("Module Def", filters={"app_name": "erpnext"}, pluck="name")
  10. doctypes = frappe.get_all(
  11. "DocType",
  12. {"istable": 0, "issingle": 0, "is_virtual": 0, "module": ("in", erpnext_modules)},
  13. pluck="name",
  14. )
  15. for doctype in doctypes:
  16. last_doc = frappe.db.get_value(doctype, {}, "name", order_by="modified desc")
  17. if not last_doc:
  18. continue
  19. with self.subTest(msg=f"Loading {doctype} - {last_doc}", doctype=doctype, last_doc=last_doc):
  20. self.assertFormLoad(doctype, last_doc)
  21. self.assertDocPrint(doctype, last_doc)
  22. def assertFormLoad(self, doctype, docname):
  23. # reset previous response
  24. frappe.response = frappe._dict({"docs": []})
  25. frappe.response.docinfo = None
  26. try:
  27. getdoc(doctype, docname)
  28. except Exception as e:
  29. self.fail(f"Failed to load {doctype}-{docname}: {e}")
  30. self.assertTrue(
  31. frappe.response.docs, msg=f"expected document in reponse, found: {frappe.response.docs}"
  32. )
  33. self.assertTrue(
  34. frappe.response.docinfo, msg=f"expected docinfo in reponse, found: {frappe.response.docinfo}"
  35. )
  36. def assertDocPrint(self, doctype, docname):
  37. doc = frappe.get_doc(doctype, docname)
  38. doc.set("__onload", frappe._dict())
  39. doc.run_method("onload")
  40. messages_before = frappe.get_message_log()
  41. ret = get_html_and_style(doc=doc.as_json(), print_format="Standard", no_letterhead=1)
  42. messages_after = frappe.get_message_log()
  43. if len(messages_after) > len(messages_before):
  44. new_messages = messages_after[len(messages_before) :]
  45. self.fail("Print view showing error/warnings: \n" + "\n".join(str(msg) for msg in new_messages))
  46. # html should exist
  47. self.assertTrue(bool(ret["html"]))