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