test: target leaf accounts and robust amount assertions in Consolidated Financial Statement

This commit is contained in:
Nabin Hait
2026-07-02 14:10:24 +05:30
parent 0e8b152c68
commit 5adbc7baba

View File

@@ -52,11 +52,19 @@ class TestConsolidatedFinancialStatement(ERPNextTestSuite):
je.submit()
return je
def get_row(self, data, account_name_fragment):
def get_row(self, data, account_name_fragment, last_match=False):
"""Return the first (or last) row whose account_name contains the fragment.
Pass ``last_match=True`` to get the leaf/most-specific match when the fragment
is also a prefix of a parent group account (parents precede children in tree order).
"""
found = None
for row in data:
if account_name_fragment in str(row.get("account_name") or ""):
return row
return None
if not last_match:
return row
found = row
return found
def test_profit_and_loss_reflects_child_company_income(self):
amount = 7000
@@ -67,9 +75,10 @@ class TestConsolidatedFinancialStatement(ERPNextTestSuite):
self.assertTrue(data, "Report returned no rows")
# child's Sales account is mapped onto the parent chart (Sales - PGCI)
sales_row = self.get_row(data, "Sales")
sales_row = self.get_row(data, "Sales", last_match=True)
self.assertIsNotNone(sales_row, "Sales row missing from consolidated P&L")
self.assertEqual(flt(sales_row.get(CHILD_COMPANY)), amount)
# >= so a pre-existing Sales balance in the fiscal year doesn't make this brittle
self.assertGreaterEqual(flt(sales_row.get(CHILD_COMPANY)), amount)
total_income_row = self.get_row(data, "Total Income (Credit)")
self.assertIsNotNone(total_income_row, "Total Income row missing")
@@ -81,9 +90,9 @@ class TestConsolidatedFinancialStatement(ERPNextTestSuite):
data = self.run_report(report="Profit and Loss Statement", accumulated_in_group_company=0)
expense_row = self.get_row(data, "Marketing Expenses")
expense_row = self.get_row(data, "Marketing Expenses", last_match=True)
self.assertIsNotNone(expense_row, "Marketing Expenses row missing from consolidated P&L")
self.assertEqual(flt(expense_row.get(CHILD_COMPANY)), amount)
self.assertGreaterEqual(flt(expense_row.get(CHILD_COMPANY)), amount)
total_expense_row = self.get_row(data, "Total Expense (Debit)")
self.assertIsNotNone(total_expense_row, "Total Expense row missing")
@@ -97,13 +106,15 @@ class TestConsolidatedFinancialStatement(ERPNextTestSuite):
data = self.run_report(report="Profit and Loss Statement", accumulated_in_group_company=1)
sales_row = self.get_row(data, "Sales")
sales_row = self.get_row(data, "Sales", last_match=True)
self.assertIsNotNone(sales_row)
self.assertEqual(flt(sales_row.get(CHILD_COMPANY)), amount)
child_value = flt(sales_row.get(CHILD_COMPANY))
self.assertGreaterEqual(child_value, amount)
# parent column picks up the child value when accumulated
self.assertEqual(flt(sales_row.get(PARENT_COMPANY)), amount)
# the total must equal the consolidated (group) value, not the sum of parent + child columns
self.assertEqual(flt(sales_row.get("total")), amount)
self.assertEqual(flt(sales_row.get(PARENT_COMPANY)), child_value)
# the total equals the consolidated (group) value, not the sum of parent + child
# columns -- this is the regression guard for the double-count fix
self.assertEqual(flt(sales_row.get("total")), child_value)
def test_balance_sheet_executes_and_returns_rows(self):
# posting income leaves a balancing entry in the child's Cash (Asset) account