Files
apskel-pos-backend/internal/service/earning_backfill_job_test.go
T
2026-09-30 15:31:44 +07:00

47 lines
1.1 KiB
Go

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