package fav_test import ( "context" "errors" "testing" "chat-agent-system/internal/app/fav" "chat-agent-system/internal/events" ) func TestFavSubscriberDefaultsDisabled(t *testing.T) { if fav.DefaultEnabled() { t.Fatal("fav subscriber DefaultEnabled must be false") } c := &fav.EventConsumer{} if c.Enabled { t.Fatal("zero-value EventConsumer.Enabled must be false") } err := c.HandleLease(context.Background(), events.Lease{}, nil) if !errors.Is(err, events.ErrDisabledConsumer) { t.Fatalf("disabled HandleLease: %v", err) } } func TestFavSubscriberStillDisabledWhenFlagOnWithoutRegistryApproval(t *testing.T) { c := &fav.EventConsumer{Enabled: true, Env: "dev"} err := c.HandleLease(context.Background(), events.Lease{Environment: "dev"}, nil) if !errors.Is(err, events.ErrDisabledConsumer) { t.Fatalf("enabled stub must still refuse until cutover approved: %v", err) } if err := events.NewRegistry().Register(events.ConsumerFAV); err == nil { t.Fatal("Registry.Register(fav) must remain fail-closed") } } func TestFavSubscriberShadowComputesIntendedOutcomeWithoutWrites(t *testing.T) { t.Setenv("FAV_DEGRADED_READ", "false") t.Setenv("FAV_PUBLISHER_ENABLED", "false") c := &fav.EventConsumer{Enabled: false, Env: "dev"} out, err := c.ObserveShadow(events.Lease{ EventName: "document.finalized", AggregateType: "document", AggregateID: "doc_1", }) if err != nil { t.Fatal(err) } if out.WouldStage || out.WouldPublish || out.DegradedReadUsed { t.Fatalf("shadow must not claim writes: %+v", out) } if out.LogicalResource != "document:doc_1" { t.Fatalf("logical=%s", out.LogicalResource) } err = c.HandleLease(context.Background(), events.Lease{}, nil) if !errors.Is(err, events.ErrDisabledConsumer) { t.Fatalf("HandleLease still disabled: %v", err) } c.AllowDegradedRead = true if _, err := c.ObserveShadow(events.Lease{}); err == nil { t.Fatal("shadow must refuse degraded read") } c.AllowDegradedRead = false t.Setenv("FAV_DEGRADED_READ", "true") if _, err := c.ObserveShadow(events.Lease{AggregateType: "document", AggregateID: "doc_2"}); err == nil { t.Fatal("shadow must refuse process env FAV_DEGRADED_READ") } }