package application import ( "context" "testing" "time" "git.cin.su/m/Assistant/contracts/work" ) type recoveryOnlyStore struct { recovered int64 claimed bool } func (s *recoveryOnlyStore) RecoverStaleClaims(context.Context, int64, int64) (int64, error) { return s.recovered, nil } func (s *recoveryOnlyStore) ClaimNextDispatch(context.Context, string, int64) (work.AgentDispatchQueueItem, error) { s.claimed = true return work.AgentDispatchQueueItem{}, nil } func (s *recoveryOnlyStore) LoadDispatchIntent(context.Context, string) (work.AgentDispatchIntent, error) { return work.AgentDispatchIntent{}, nil } func (s *recoveryOnlyStore) CompleteDispatch(context.Context, string, string, work.AgentDispatchQueueState, int64) error { return nil } func (s *recoveryOnlyStore) RetryDispatch(context.Context, string, string, int64, time.Duration) error { return nil } func (s *recoveryOnlyStore) SaveDispatchIntent(context.Context, work.AgentDispatchIntent) error { return nil } func (s *recoveryOnlyStore) SaveAgentLease(context.Context, work.AgentLease) error { return nil } func (s *recoveryOnlyStore) RenewAgentLease(context.Context, work.AgentLease, time.Time) error { return nil } func (s *recoveryOnlyStore) AcceptAgentCallback(context.Context, work.AgentCallback) error { return nil } func TestRecoverOnlyWorkerCycleNeverClaimsDispatch(t *testing.T) { store := &recoveryOnlyStore{recovered: 2} result, err := RecoverOnlyWorkerCycle(context.Background(), store, time.UnixMilli(1_700_000_000_000), time.Minute) if err != nil { t.Fatal(err) } if result.RecoveredClaims != 2 || !result.Idle || store.claimed { t.Fatalf("unexpected recovery-only result: %+v claimed=%t", result, store.claimed) } }