package agent import ( "strings" "testing" "time" "git.ipao.vip/rogee/go-sip/internal/contract" ) func TestEventWriterBuildsApprovedRealtimeTranscript(t *testing.T) { writer := EventWriter{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 TestEventWriterRejectsUnverifiedRecordingAndWrongArchiveEvent(t *testing.T) { writer := EventWriter{TenantID: "tenant-1", TenantKey: "tenant-demo-key", TraceID: "trace-1"} if _, err := writer.RecordingReady(time.Unix(100, 0), "event-1", "call-1", "recording-1", "", "wav", 1, 16000, 1000, 100, strings.Repeat("a", 64)); err == nil { t.Fatal("expected missing OSS verification ID to be rejected") } 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") } }