Reapply "feat(loyalty): EnakPoint & EnakCoin" (#32)
This reverts commit 4e24f9bbb0.
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
||||
"apskel-pos-be/internal/logger"
|
||||
)
|
||||
|
||||
type missingEarnerFake struct {
|
||||
since time.Time
|
||||
max int
|
||||
earned int
|
||||
err error
|
||||
calls int
|
||||
}
|
||||
|
||||
func (f *missingEarnerFake) EarnMissing(_ context.Context, since time.Time, maxOrders int) (int, int, error) {
|
||||
f.calls++
|
||||
f.since, f.max = since, maxOrders
|
||||
return f.earned * 2, f.earned, f.err
|
||||
}
|
||||
|
||||
func TestEarningBackfillJob(t *testing.T) {
|
||||
logger.Setup("fatal", "json")
|
||||
now := time.Date(2026, 9, 30, 12, 0, 0, 0, time.UTC)
|
||||
earner := &missingEarnerFake{earned: 3}
|
||||
job := NewEarningBackfillJob(earner)
|
||||
job.now = func() time.Time { return now }
|
||||
|
||||
assert.Equal(t, 3, job.RunOnce(context.Background()))
|
||||
assert.Equal(t, now.Add(-72*time.Hour), earner.since, "looks back three days")
|
||||
assert.Equal(t, earningBackfillMaxOrders, earner.max)
|
||||
|
||||
// A failing run is logged, not fatal.
|
||||
earner.earned, earner.err = 0, errors.New("db down")
|
||||
assert.Equal(t, 0, job.RunOnce(context.Background()))
|
||||
|
||||
job.Start(time.Hour)
|
||||
job.Stop()
|
||||
job.Stop()
|
||||
}
|
||||
Reference in New Issue
Block a user