Files
ai-customer-service/internal/service/platformevents/builder_test.go
Your Name 22384d155b refactor(platformevent): remove CallbackTarget field and all usages
D-01: callback_target contract drift cleanup.

- Remove CallbackTarget from Event struct and Validate
- Remove CallbackTarget from PlatformInboundMeta
- Remove defaultCallbackTarget and assignment from builder
- Remove callback_target column from INSERT/SELECT/dead_letter SQL
- Clean up all test literals and assertions

DB migration left untouched; column remains empty until a future schema
cleanup migration.
2026-05-11 13:09:50 +08:00

75 lines
2.3 KiB
Go

package platformevents
import (
"testing"
"time"
intentdomain "github.com/bridge/ai-customer-service/internal/domain/intent"
"github.com/bridge/ai-customer-service/internal/domain/message"
"github.com/bridge/ai-customer-service/internal/platformadapter"
"github.com/bridge/ai-customer-service/internal/service/dialog"
"github.com/bridge/ai-customer-service/internal/service/handoff"
)
func TestBuildInboundEvents_ShouldBuildReplyFlowEvents(t *testing.T) {
now := time.Now().UTC().Truncate(time.Second)
events, err := BuildInboundEvents(
&message.UnifiedMessage{OpenID: "u1", Content: "我要退款", ContentType: "text"},
&dialog.Result{
SessionID: "sess-1",
Reply: "好的",
Intent: &intentdomain.Result{Intent: intentdomain.IntentRefund, Confidence: 0.92},
},
&platformadapter.PlatformInboundMeta{
Platform: "sub2api",
Channel: "sub2api",
SourceMessageID: "m1",
},
now,
)
if err != nil {
t.Fatalf("BuildInboundEvents() error = %v", err)
}
if len(events) != 4 {
t.Fatalf("events len = %d, want 4", len(events))
}
if events[0].EventType != "message.received" {
t.Fatalf("first event type = %s", events[0].EventType)
}
if events[len(events)-1].EventType != "reply.generated" {
t.Fatalf("last event type = %s", events[len(events)-1].EventType)
}
}
func TestBuildInboundEvents_ShouldIncludeHandoffAndTicketCreated(t *testing.T) {
now := time.Now().UTC().Truncate(time.Second)
events, err := BuildInboundEvents(
&message.UnifiedMessage{OpenID: "u1", Content: "我要投诉"},
&dialog.Result{
SessionID: "sess-1",
Reply: "已转人工",
Intent: &intentdomain.Result{Intent: intentdomain.IntentHandoff, Confidence: 0.88},
Handoff: &handoff.Decision{ShouldHandoff: true, Priority: "P1", Reason: "complaint"},
TicketID: "ticket-1",
},
&platformadapter.PlatformInboundMeta{
Platform: "sub2api",
Channel: "sub2api",
SourceMessageID: "m1",
},
now,
)
if err != nil {
t.Fatalf("BuildInboundEvents() error = %v", err)
}
if len(events) != 6 {
t.Fatalf("events len = %d, want 6", len(events))
}
if events[3].EventType != "handoff.triggered" {
t.Fatalf("handoff event type = %s", events[3].EventType)
}
if events[4].EventType != "ticket.created" {
t.Fatalf("ticket event type = %s", events[4].EventType)
}
}