package processor import ( "testing" "github.com/stretchr/testify/assert" ) func TestComputePointPaymentLimits(t *testing.T) { for name, c := range map[string]struct { total, paid, paidWithPoints float64 percent, value, balance int64 wantRemaining, wantMax int64 }{ // The F9 example: Rp 87.550 left, 50.000 EnakPoint, 100%, Rp 1 a point. "PRD example": {87550, 0, 0, 100, 1, 50000, 8755000, 50000}, "balance covers it all": {87550, 0, 0, 100, 1, 100000, 8755000, 87550}, "part already paid": {100000, 30000, 0, 100, 1, 100000, 7000000, 70000}, "capped by percent": {100000, 0, 0, 50, 1, 100000, 10000000, 50000}, "percent counts EnakPoint already used": {100000, 20000, 20000, 50, 1, 100000, 8000000, 30000}, "percent cap already used": {100000, 50000, 50000, 50, 1, 100000, 5000000, 0}, "point worth more than Rp 1": {87550, 0, 0, 100, 100, 1000, 8755000, 875}, "nothing left": {50000, 50000, 0, 100, 1, 100000, 0, 0}, "overpaid": {50000, 60000, 0, 100, 1, 100000, 0, 0}, "no balance": {50000, 0, 0, 100, 1, 0, 5000000, 0}, "cents left over": {10000.50, 0, 0, 100, 1, 100000, 1000050, 10000}, } { got := computePointPaymentLimits(c.total, c.paid, c.paidWithPoints, c.percent, c.value, c.balance) assert.Equal(t, c.wantRemaining, got.RemainingCents, name) assert.Equal(t, c.wantMax, got.MaxPoints, name) assert.LessOrEqual(t, got.MaxPoints*c.value*100, got.RemainingCents, "%s: never more than what is left", name) } } func TestFormatRupiah(t *testing.T) { for n, want := range map[int64]string{0: "0", 999: "999", 1000: "1.000", 50000: "50.000", 1234567: "1.234.567"} { assert.Equal(t, want, formatRupiah(n)) } }