26 lines
1.2 KiB
Go
26 lines
1.2 KiB
Go
package processor
|
||
|
||
import (
|
||
"testing"
|
||
|
||
"github.com/stretchr/testify/assert"
|
||
|
||
"apskel-pos-be/internal/entities"
|
||
"apskel-pos-be/internal/repository"
|
||
)
|
||
|
||
func TestEarningReversalTarget(t *testing.T) {
|
||
earn := entities.WalletTransaction{Amount: 875, Metadata: entities.Metadata{"basis": 87500.0}}
|
||
target := func(order repository.EarningOrder) int64 { return earningReversalTarget(&order, earn) }
|
||
|
||
assert.Equal(t, int64(0), target(repository.EarningOrder{}), "nothing refunded, nothing to take")
|
||
assert.Equal(t, int64(875), target(repository.EarningOrder{IsVoid: true}), "void takes everything")
|
||
assert.Equal(t, int64(200), target(repository.EarningOrder{RefundAmount: 20000}), "floor(875 × 20000 / 87500)")
|
||
assert.Equal(t, int64(299), target(repository.EarningOrder{RefundAmount: 29999.99}), "floor, not round")
|
||
assert.Equal(t, int64(875), target(repository.EarningOrder{RefundAmount: 87500}))
|
||
assert.Equal(t, int64(875), target(repository.EarningOrder{RefundAmount: 96250}), "a refund including tax cannot take more than was earned")
|
||
|
||
noBasis := entities.WalletTransaction{Amount: 10, Metadata: entities.Metadata{}}
|
||
assert.Equal(t, int64(10), earningReversalTarget(&repository.EarningOrder{RefundAmount: 1}, noBasis), "without a basis any refund takes it all")
|
||
}
|