mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-17 00:18:39 +00:00
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>
23 lines
909 B
Python
23 lines
909 B
Python
# 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))
|