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