Files
GL/application/health/service_test.go
T

64 lines
1.9 KiB
Go

package health
import (
"context"
"errors"
"testing"
"gl/domain/ledger"
)
type databaseStub struct{ err error }
func (s databaseStub) Ping(context.Context) error { return s.err }
type settlementStub struct {
stats ledger.SettlementStats
err error
}
func (s settlementStub) Stats(context.Context) (ledger.SettlementStats, error) {
return s.stats, s.err
}
func TestCheckReportsDatabaseReadiness(t *testing.T) {
for _, tc := range []struct {
name string
db Database
ready bool
}{
{name: "not connected", db: nil, ready: false},
{name: "ready", db: databaseStub{}, ready: true},
{name: "unavailable", db: databaseStub{err: errors.New("down")}, ready: false},
} {
t.Run(tc.name, func(t *testing.T) {
got := NewService(tc.db).Check(context.Background())
if got.Serving != tc.ready || got.DatabaseReady != tc.ready {
t.Fatalf("unexpected status: %+v", got)
}
})
}
}
func TestCheckReportsSettlementBacklog(t *testing.T) {
monitor := settlementStub{stats: ledger.SettlementStats{Pending: 2, Retryable: 3, OldestPendingSeconds: 60}}
got := NewService(databaseStub{}, monitor).Check(context.Background())
if !got.Serving || !got.DatabaseReady || !got.SettlementEnabled || !got.SettlementReady || got.SettlementStats != monitor.stats {
t.Fatalf("unexpected status: %+v", got)
}
}
func TestCheckExposesManualReviewWithoutStoppingSettlementQueue(t *testing.T) {
got := NewService(databaseStub{}, settlementStub{stats: ledger.SettlementStats{ManualReview: 1}}).Check(context.Background())
if !got.Serving || !got.SettlementReady || got.SettlementStats.ManualReview != 1 {
t.Fatalf("unexpected status: %+v", got)
}
}
func TestCheckReportsSettlementQueryFailure(t *testing.T) {
got := NewService(databaseStub{}, settlementStub{err: errors.New("query failed")}).Check(context.Background())
if !got.Serving || got.SettlementReady {
t.Fatalf("unexpected status: %+v", got)
}
}