Files
ai-agent/internal/builders/ticket_builder_test.go
T
mlogclub 101577f163 Refactor internal services to use agent-desk package structure
- Updated import paths in multiple service files to reflect the new agent-desk module.
- Added a new configuration file for agent-desk in the Docker setup.
2026-05-31 18:43:48 +08:00

123 lines
3.4 KiB
Go

package builders
import (
"testing"
"time"
"agent-desk/internal/models"
"agent-desk/internal/pkg/enums"
)
func TestBuildLightweightTicket(t *testing.T) {
now := time.Date(2026, 5, 2, 12, 30, 0, 0, time.Local)
ticket := &models.Ticket{
ID: 12,
TicketNo: "TK202605020001",
Title: "登录失败",
Description: "客户反馈无法登录",
Source: enums.TicketSourceManual,
Channel: "web",
CustomerID: 3,
ConversationID: 4,
Status: enums.TicketStatusPending,
CurrentAssigneeID: 5,
AuditFields: models.AuditFields{
CreateUserID: 1,
CreateUserName: "admin",
CreatedAt: now,
UpdatedAt: now,
},
}
ctx := &TicketBuildContext{
TagsByTicketID: map[int64][]models.Tag{
12: {{ID: 8, Name: "登录", Status: enums.StatusOk}},
},
Users: map[int64]*models.User{
5: {ID: 5, Username: "agent", Nickname: "客服"},
},
Customers: map[int64]*models.Customer{
3: {ID: 3, Name: "客户"},
},
}
out := BuildTicketWithContext(ticket, ctx)
if out == nil {
t.Fatalf("expected ticket response")
}
if out.ID != ticket.ID || out.TicketNo != ticket.TicketNo || out.Status != ticket.Status {
t.Fatalf("unexpected ticket response: %+v", out)
}
if out.CurrentAssigneeName != "客服" {
t.Fatalf("expected assignee name, got %q", out.CurrentAssigneeName)
}
if len(out.Tags) != 1 || out.Tags[0].ID != 8 {
t.Fatalf("expected tag response, got %+v", out.Tags)
}
if out.Customer == nil || out.Customer.ID != 3 {
t.Fatalf("expected customer response, got %+v", out.Customer)
}
}
func TestBuildTicketWithoutContextLeavesOptionalLookupsEmpty(t *testing.T) {
now := time.Date(2026, 5, 2, 12, 30, 0, 0, time.Local)
ticket := &models.Ticket{
ID: 12,
TicketNo: "TK202605020001",
Title: "登录失败",
Description: "客户反馈无法登录",
CustomerID: 3,
CurrentAssigneeID: 5,
Status: enums.TicketStatusPending,
AuditFields: models.AuditFields{
CreateUserID: 1,
CreateUserName: "admin",
CreatedAt: now,
UpdatedAt: now,
},
}
out := BuildTicket(ticket)
if out == nil {
t.Fatalf("expected ticket response")
}
if out.Tags != nil {
t.Fatalf("expected tags to stay empty without context, got %+v", out.Tags)
}
if out.Customer != nil {
t.Fatalf("expected customer to stay empty without context, got %+v", out.Customer)
}
if out.CurrentAssigneeName != "" {
t.Fatalf("expected assignee name to stay empty without context, got %q", out.CurrentAssigneeName)
}
}
func TestBuildTicketProgress(t *testing.T) {
now := time.Date(2026, 5, 2, 12, 30, 0, 0, time.Local)
progress := &models.TicketProgress{
ID: 1,
TicketID: 2,
Content: "已联系客户",
AuthorID: 3,
CreatedAt: now,
}
ctx := &TicketDetailBuildContext{
Users: map[int64]*models.User{
3: {ID: 3, Username: "agent", Nickname: "客服"},
},
}
out := BuildTicketProgressWithContext(progress, ctx)
if out == nil {
t.Fatalf("expected progress response")
}
if out.ID != progress.ID || out.TicketID != progress.TicketID || out.Content != progress.Content {
t.Fatalf("unexpected progress response: %+v", out)
}
if out.AuthorName != "客服" {
t.Fatalf("expected author name, got %q", out.AuthorName)
}
if out.CreatedAt == "" {
t.Fatalf("expected createdAt to be formatted")
}
}