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") }