40 lines
1.6 KiB
Go
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)
|
|
}
|
|
}
|