40 lines
1.8 KiB
Go
40 lines
1.8 KiB
Go
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))
|
||
|
|
}
|
||
|
|
}
|