mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-11 13:41:47 +00:00
refactor(startup): convert boot_session raw SQL to ORM (Postgres-valid)
boot_session used raw `frappe.db.sql`, including a MySQL-only `ifnull(account_type, '')` over Party Type that is invalid on Postgres. - customer_count: `SELECT count(*)` → `frappe.db.count` - setup_complete: `SELECT name ... LIMIT 1` → `frappe.db.get_all(limit=1)` - companies: raw select → `frappe.get_all`, preserving the `:Company` virtual-doc marker - party_account_types: `ifnull(account_type,'')` → `frappe.get_all` with a Python `account_type or ""`, which collapses NULL→'' and ''→'' identically on both engines (handles Postgres storing '' as NULL) Adds a test (no test file existed) that runs boot_session and asserts the company list and party_account_types are populated, on both engines. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -54,6 +54,7 @@ def boot_session(bootinfo):
|
||||
"country",
|
||||
"exchange_gain_loss_account",
|
||||
],
|
||||
limit_page_length=0, # intentionally unbounded: all companies are needed for boot
|
||||
)
|
||||
for company in companies:
|
||||
company.doctype = ":Company"
|
||||
|
||||
22
erpnext/startup/test_boot.py
Normal file
22
erpnext/startup/test_boot.py
Normal file
@@ -0,0 +1,22 @@
|
||||
# Copyright (c) 2025, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
import frappe
|
||||
|
||||
from erpnext.tests.utils import ERPNextTestSuite
|
||||
|
||||
|
||||
class TestBoot(ERPNextTestSuite):
|
||||
def test_boot_session_populates_companies_and_party_types(self):
|
||||
# boot_session reads Customer count, Company list and Party Type account types via ORM/qb
|
||||
# (formerly raw SQL with ifnull, which is invalid on Postgres). Exercises that on both engines.
|
||||
from erpnext.startup.boot import boot_session
|
||||
|
||||
bootinfo = frappe._dict(sysdefaults=frappe._dict(), page_info=frappe._dict(), docs=[])
|
||||
boot_session(bootinfo)
|
||||
|
||||
self.assertIsInstance(bootinfo.customer_count, int)
|
||||
self.assertIn("party_account_types", bootinfo)
|
||||
|
||||
company_docs = [d for d in bootinfo.docs if d.get("doctype") == ":Company"]
|
||||
self.assertTrue(any(d.get("name") == "_Test Company" for d in company_docs))
|
||||
Reference in New Issue
Block a user