import { describe, it, expect } from 'bun:test' import { TaxService } from '../../src/services/tax.service.js' describe('TaxService.calculateTax', () => { it('calculates tax on a simple amount', () => { // 8.25% on $100 expect(TaxService.calculateTax(100, 0.0825)).toBe(8.25) }) it('rounds to 2 decimal places', () => { // 8.25% on $10.01 = 0.825825 → 0.83 expect(TaxService.calculateTax(10.01, 0.0825)).toBe(0.83) }) it('returns 0 for zero rate', () => { expect(TaxService.calculateTax(100, 0)).toBe(0) }) it('returns 0 for zero amount', () => { expect(TaxService.calculateTax(0, 0.0825)).toBe(0) }) it('handles small amounts', () => { // 8.25% on $0.99 = 0.081675 → 0.08 expect(TaxService.calculateTax(0.99, 0.0825)).toBe(0.08) }) it('handles large amounts', () => { // 8.25% on $9999.99 = 824.999175 → 825.00 expect(TaxService.calculateTax(9999.99, 0.0825)).toBe(825) }) it('handles 5% service tax rate', () => { // 5% on $60 = 3.00 expect(TaxService.calculateTax(60, 0.05)).toBe(3) }) it('handles fractional cent rounding down', () => { // 7% on $1.01 = 0.0707 → 0.07 expect(TaxService.calculateTax(1.01, 0.07)).toBe(0.07) }) it('handles fractional cent rounding up', () => { // 7% on $1.05 = 0.0735 → 0.07 expect(TaxService.calculateTax(1.05, 0.07)).toBe(0.07) }) }) describe('TaxService.roundToNickel', () => { it('rounds .01 down to .00', () => { expect(TaxService.roundToNickel(10.01)).toBe(10.00) }) it('rounds .02 down to .00', () => { expect(TaxService.roundToNickel(10.02)).toBe(10.00) }) it('rounds .03 up to .05', () => { expect(TaxService.roundToNickel(10.03)).toBe(10.05) }) it('rounds .04 up to .05', () => { expect(TaxService.roundToNickel(10.04)).toBe(10.05) }) it('keeps .05 as is', () => { expect(TaxService.roundToNickel(10.05)).toBe(10.05) }) it('rounds .06 down to .05', () => { expect(TaxService.roundToNickel(10.06)).toBe(10.05) }) it('rounds .07 down to .05', () => { expect(TaxService.roundToNickel(10.07)).toBe(10.05) }) it('rounds .08 up to .10', () => { expect(TaxService.roundToNickel(10.08)).toBe(10.10) }) it('rounds .09 up to .10', () => { expect(TaxService.roundToNickel(10.09)).toBe(10.10) }) it('keeps .00 as is', () => { expect(TaxService.roundToNickel(10.00)).toBe(10.00) }) it('keeps .10 as is', () => { expect(TaxService.roundToNickel(10.10)).toBe(10.10) }) it('handles zero', () => { expect(TaxService.roundToNickel(0)).toBe(0) }) }) describe('TaxService.repairItemTypeToTaxCategory', () => { it('maps labor to service', () => { expect(TaxService.repairItemTypeToTaxCategory('labor')).toBe('service') }) it('maps part to goods', () => { expect(TaxService.repairItemTypeToTaxCategory('part')).toBe('goods') }) it('maps flat_rate to goods', () => { expect(TaxService.repairItemTypeToTaxCategory('flat_rate')).toBe('goods') }) it('maps misc to goods', () => { expect(TaxService.repairItemTypeToTaxCategory('misc')).toBe('goods') }) it('maps unknown type to goods (default)', () => { expect(TaxService.repairItemTypeToTaxCategory('something_else')).toBe('goods') }) })