diff --git a/erpnext/accounts/doctype/coupon_code/test_coupon_code.py b/erpnext/accounts/doctype/coupon_code/test_coupon_code.py index aad341e9e1d..293e3d2aa4b 100644 --- a/erpnext/accounts/doctype/coupon_code/test_coupon_code.py +++ b/erpnext/accounts/doctype/coupon_code/test_coupon_code.py @@ -142,3 +142,39 @@ class TestCouponCode(unittest.TestCase): so.submit() self.assertEqual(frappe.db.get_value("Coupon Code", "SAVE30", "used"), 1) + + def test_coupon_without_max_use(self): + from erpnext.accounts.doctype.pricing_rule.utils import ( + update_coupon_code_count, + validate_coupon_code, + ) + + coupon = frappe.get_doc( + { + "doctype": "Coupon Code", + "coupon_name": "_Test Coupon Without Max Use", + "coupon_code": "TESTUNLIMITED", + "from_external_ecomm_platform": 1, # avoids requirement for pricing rule + "valid_from": frappe.utils.nowdate(), + "maximum_use": 0, + "used": 0, + } + ) + coupon.insert(ignore_permissions=True) + + # Validate initial state + self.assertEqual(coupon.used, 0) + self.assertEqual(coupon.maximum_use, 0) + + # Use coupon multiple times + for _ in range(5): + validate_coupon_code(coupon.name) + update_coupon_code_count(coupon.name, "used") + coupon.reload() + + # Check that the coupon is still valid and usage count increased + self.assertEqual(coupon.used, 5) + validate_coupon_code(coupon.name) # This should not raise an error + + # Clean up + coupon.delete()