package settlement import ( "context" "testing" "time" "gl/domain/ledger" ) type serviceRepository struct { retriedID, actor, reason string } func (*serviceRepository) Enqueue(context.Context, ledger.Settlement) (ledger.Settlement, bool, error) { return ledger.Settlement{}, false, nil } func (*serviceRepository) Get(context.Context, string, string) (ledger.Settlement, error) { return ledger.Settlement{}, nil } func (r *serviceRepository) RetryByOperator(_ context.Context, id, actor, reason string, _ time.Time) (ledger.Settlement, error) { r.retriedID, r.actor, r.reason = id, actor, reason return ledger.Settlement{ID: id, Status: ledger.SettlementRetryable}, nil } func TestRetryByOperatorRequiresCompleteAuditIdentity(t *testing.T) { service := NewService(&serviceRepository{}) if _, err := service.RetryByOperator(context.Background(), "id", "actor", ""); err == nil { t.Fatal("expected missing reason to be rejected") } } func TestRetryByOperatorPassesActorAndReasonToRepository(t *testing.T) { repository := &serviceRepository{} service := NewService(repository) got, err := service.RetryByOperator(context.Background(), "id", "actor-7", "Horizon outage resolved") if err != nil { t.Fatal(err) } if got.Status != ledger.SettlementRetryable || repository.retriedID != "id" || repository.actor != "actor-7" || repository.reason != "Horizon outage resolved" { t.Fatalf("unexpected retry: %+v repo=%+v", got, repository) } }