Buffer: B
Bytes: 1363
Lines: 36
SHA256: 349230a989275da6e0c6fc609eefe6c6d5accb95a01109add9285eb3a3e58705
Clear Use as NEW Use as CONTENT Use as patch payload Save to file
Clone: clone->A clone->NEW clone->PATCH clone->SCRATCH
import unittest
from relay_complex_math import InvoiceLine, calculate_invoice
class InvoiceTests(unittest.TestCase):
def test_basic_tax(self):
result = calculate_invoice([InvoiceLine(10.0, 2), InvoiceLine(5.0)], tax_pct=10)
self.assertEqual(result["subtotal"], 25.0)
self.assertEqual(result["tax"], 2.5)
self.assertEqual(result["total"], 27.5)
def test_discount_applies_before_tax(self):
result = calculate_invoice([InvoiceLine(100.0)], discount_pct=20, tax_pct=10)
self.assertEqual(result["discount"], 20.0)
self.assertEqual(result["taxable"], 80.0)
self.assertEqual(result["tax"], 8.0)
self.assertEqual(result["total"], 88.0)
def test_multiple_lines(self):
result = calculate_invoice([InvoiceLine(12.5, 2), InvoiceLine(7.25, 3)], discount_pct=10, tax_pct=6)
self.assertEqual(result["subtotal"], 46.75)
self.assertEqual(result["line_count"], 2)
self.assertEqual(result["taxable"], 42.08)
def test_validation(self):
with self.assertRaises(ValueError):
calculate_invoice([InvoiceLine(1)], discount_pct=101)
with self.assertRaises(ValueError):
InvoiceLine(-1).total()
with self.assertRaises(ValueError):
InvoiceLine(1, 0).total()
if __name__ == "__main__":
unittest.main()