package agent import ( "strings" "testing" "time" "git.ipao.vip/rogee/go-sip/internal/contract" ) func TestEventWriterBuildsApprovedRealtimeTranscript(t *testing.T) { writer := EventWriter{DispatcherID: "11111111-1111-4111-8111-111111111111", TenantID: "tenant-1", TenantKey: "tenant-demo-key", TraceID: "trace-1"} event, err := writer.TranscriptUpdated(time.Unix(100, 0), "event-1", "call-1", "turn-1", "segment-1", "customer", "您好", 1, true, 0, 600) if err != nil { t.Fatal(err) } if err := contract.ValidateEvent(event); err != nil { t.Fatal(err) } if string(event) == "" || strings.Contains(string(event), "call.transcript") { t.Fatal("invalid transcript alias or empty event") } spool, err := NewSpool(t.TempDir(), time.Now) if err != nil { t.Fatal(err) } if _, err := spool.Start("execution-1", 1, "session-1"); err != nil { t.Fatal(err) } if err := spool.AppendApprovedEvent("execution-1", event); err != nil { t.Fatal(err) } } func TestEventWriterRejectsLegacyRecordingEventAndWrongArchiveEvent(t *testing.T) { spool, err := NewSpool(t.TempDir(), time.Now) if err != nil { t.Fatal(err) } if _, err := spool.Start("execution-1", 1, "session-1"); err != nil { t.Fatal(err) } if err := spool.AppendApprovedEvent("execution-1", []byte(`{"event_type":"call.transcript"}`)); err == nil { t.Fatal("expected invalid realtime event name to be rejected") } if err := spool.AppendApprovedEvent("execution-1", []byte(`{"event_type":"recording.ready"}`)); err == nil { t.Fatal("legacy recording.ready must not enter the Agent archive") } }