Files
Assistant/tests/prospective_memory/recovery_test.go
2026-08-16 15:22:49 +03:00

40 lines
1.6 KiB
Go

package prospective_memory_test
import (
"errors"
"testing"
"git.cin.su/m/Assistant/contracts/authority"
contract "git.cin.su/m/Assistant/contracts/continuity"
"git.cin.su/m/Assistant/contracts/identity"
"git.cin.su/m/Assistant/contracts/work"
"git.cin.su/m/Assistant/modules/continuity/domain"
"git.cin.su/m/Assistant/platform/ids"
)
func TestWS002SurvivesSchedulerLossAndRevalidatesBeforeDelivery(t *testing.T) {
item := contract.ProspectiveItem{ID: contract.ProspectiveItemID(ids.ID("reminder")), CommitmentID: contract.CommitmentID(ids.ID("commitment")), OwnerPrincipalID: identity.PrincipalID(ids.ID("creator")), ScopeID: authority.ScopeID(ids.ID("global")), GoalID: work.GoalID(ids.ID("goal")), TriggerAtUnixMillis: 1_800_000_000_000, State: contract.ProspectiveArmed, Revision: 1}
store := domain.Recover([]contract.ProspectiveItem{item})
// Scheduler state is discarded; only the canonical snapshot reconstructs work.
recovered := domain.Recover(store.Snapshot())
triggered, err := recovered.Trigger(item.ID, 1)
if err != nil {
t.Fatal(err)
}
if _, err := recovered.Trigger(item.ID, 1); !errors.Is(err, domain.ErrProspectiveRevision) {
t.Fatalf("duplicate trigger error = %v, want revision conflict", err)
}
revalidating, err := recovered.BeginRevalidation(item.ID, triggered.Revision)
if err != nil {
t.Fatal(err)
}
suppressed, err := recovered.FinishRevalidation(item.ID, revalidating.Revision, false)
if err != nil {
t.Fatal(err)
}
if suppressed.State != contract.ProspectiveSuppressed {
t.Fatalf("state = %s, want SUPPRESSED", suppressed.State)
}
}