From eb96f0429f9251dd9af89f986339202ad066c33f Mon Sep 17 00:00:00 2001 From: diptanilsaha Date: Thu, 21 May 2026 12:27:39 +0530 Subject: [PATCH] test: add tests for supplier group hierarchy and use_for_shopping_cart filter Co-Authored-By: Claude Sonnet 4.6 (cherry picked from commit 8c4311872569d38ee8c989eff46905825a5728fe) --- .../doctype/tax_rule/test_tax_rule.py | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/erpnext/accounts/doctype/tax_rule/test_tax_rule.py b/erpnext/accounts/doctype/tax_rule/test_tax_rule.py index 335b4835630..963199c2ff8 100644 --- a/erpnext/accounts/doctype/tax_rule/test_tax_rule.py +++ b/erpnext/accounts/doctype/tax_rule/test_tax_rule.py @@ -72,6 +72,117 @@ class TestTaxRule(unittest.TestCase): "_Test Sales Taxes and Charges Template - _TC", ) + def test_for_parent_supplier_group(self): + purchase_template = "_Test Purchase Taxes and Charges Template - _TC" + if not frappe.db.exists("Purchase Taxes and Charges Template", purchase_template): + frappe.get_doc( + { + "doctype": "Purchase Taxes and Charges Template", + "title": "_Test Purchase Taxes and Charges Template", + "company": "_Test Company", + "taxes": [ + { + "account_head": "_Test Account VAT - _TC", + "charge_type": "On Net Total", + "description": "VAT", + "doctype": "Purchase Taxes and Charges", + "cost_center": "Main - _TC", + "rate": 6, + } + ], + } + ).insert() + + make_tax_rule( + supplier_group="All Supplier Groups", + tax_type="Purchase", + purchase_tax_template=purchase_template, + priority=1, + use_for_shopping_cart=0, + from_date="2015-01-01", + save=1, + ) + + # "_Test Supplier Group" has "All Supplier Groups" as its parent — should match hierarchically + self.assertEqual( + get_tax_template( + "2015-01-01", + { + "supplier_group": "_Test Supplier Group", + "tax_type": "Purchase", + "use_for_shopping_cart": 0, + }, + ), + purchase_template, + ) + + def test_use_for_shopping_cart_filter(self): + city = "Test Cart City" + # higher priority ensures this rule wins when use_for_shopping_cart is not filtered + make_tax_rule( + customer="_Test Customer", + billing_city=city, + sales_tax_template="_Test Sales Taxes and Charges Template - _TC", + use_for_shopping_cart=0, + priority=2, + save=1, + ) + make_tax_rule( + customer="_Test Customer", + billing_city=city, + sales_tax_template="_Test Sales Taxes and Charges Template 1 - _TC", + use_for_shopping_cart=1, + priority=1, + save=1, + ) + + # Cart request (use_for_shopping_cart=1) filters to cart rules only + self.assertEqual( + get_tax_template( + "2015-01-01", + {"customer": "_Test Customer", "billing_city": city, "use_for_shopping_cart": 1}, + ), + "_Test Sales Taxes and Charges Template 1 - _TC", + ) + + # Non-cart request omits use_for_shopping_cart — no filter is applied, both rules + # are candidates; non-cart rule wins by higher priority + self.assertEqual( + get_tax_template( + "2015-01-01", + {"customer": "_Test Customer", "billing_city": city}, + ), + "_Test Sales Taxes and Charges Template - _TC", + ) + + def test_use_for_shopping_cart_default(self): + city = "Test Default Cart City" + # use_for_shopping_cart not set — Check field defaults to 0 + make_tax_rule( + customer="_Test Customer", + billing_city=city, + sales_tax_template="_Test Sales Taxes and Charges Template - _TC", + use_for_shopping_cart=0, # Default is set to 1. + save=1, + ) + + # Non-cart request (no use_for_shopping_cart in args) matches the rule + self.assertEqual( + get_tax_template( + "2015-01-01", + {"customer": "_Test Customer", "billing_city": city}, + ), + "_Test Sales Taxes and Charges Template - _TC", + ) + + # Cart request (use_for_shopping_cart=1) does not match — rule has default 0 + self.assertIsNone( + get_tax_template( + "2015-01-01", + {"customer": "_Test Customer", "billing_city": city, "use_for_shopping_cart": 1}, + ) + ) + def test_conflict_with_overlapping_dates(self): tax_rule1 = make_tax_rule( customer="_Test Customer",