package prospective_memory_test import ( "errors" "testing" "git.cin.su/m/Assistant/contracts/continuity" continuitydomain "git.cin.su/m/Assistant/modules/continuity/domain" ) func TestDeliveredItemCanBeSatisfiedExactlyAtExpectedRevision(t *testing.T) { item := continuity.ProspectiveItem{ID: "prospective-1", State: continuity.ProspectiveDelivered, Revision: 4} store := continuitydomain.Recover([]continuity.ProspectiveItem{item}) updated, err := store.SatisfyDelivered(item.ID, item.Revision, "artifact://evidence/1") if err != nil || updated.State != continuity.ProspectiveSatisfied || updated.Revision != 5 { t.Fatalf("satisfaction = %#v, %v", updated, err) } if _, err := store.SatisfyDelivered(item.ID, item.Revision, "artifact://evidence/1"); !errors.Is(err, continuitydomain.ErrProspectiveRevision) { t.Fatalf("stale satisfaction error = %v", err) } } func TestSatisfactionRejectsMissingEvidenceAndWrongState(t *testing.T) { store := continuitydomain.Recover([]continuity.ProspectiveItem{{ID: "prospective-1", State: continuity.ProspectiveArmed, Revision: 1}}) if _, err := store.SatisfyDelivered("prospective-1", 1, "evidence"); !errors.Is(err, continuitydomain.ErrInvalidTransition) { t.Fatalf("wrong state error = %v", err) } store = continuitydomain.Recover([]continuity.ProspectiveItem{{ID: "prospective-2", State: continuity.ProspectiveDelivered, Revision: 1}}) if _, err := store.SatisfyDelivered("prospective-2", 1, " "); !errors.Is(err, continuitydomain.ErrInvalidTransition) { t.Fatalf("missing evidence error = %v", err) } }