Files
ai-agent/internal/services/customer_service_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

101 lines
2.7 KiB
Go

package services_test
import (
"testing"
"time"
"agent-desk/internal/models"
"agent-desk/internal/pkg/enums"
"agent-desk/internal/pkg/openidentity"
"agent-desk/internal/services"
"github.com/glebarez/sqlite"
"github.com/mlogclub/simple/sqls"
"gorm.io/gorm"
"gorm.io/gorm/schema"
)
func TestEnsureExternalCustomerUpdatesNameFromExternalIdentity(t *testing.T) {
db := setupCustomerServiceTestDB(t)
var firstID int64
if err := sqls.WithTransaction(func(ctx *sqls.TxContext) error {
id, err := services.CustomerService.EnsureExternalCustomer(ctx, openidentity.ExternalUser{
ExternalSource: enums.ExternalSourceUser,
ExternalID: "user-1",
ExternalName: "张三",
})
firstID = id
return err
}); err != nil {
t.Fatalf("EnsureExternalCustomer() first error = %v", err)
}
conversation := &models.Conversation{
CustomerID: firstID,
CustomerName: "张三",
Status: enums.IMConversationStatusActive,
AuditFields: models.AuditFields{CreatedAt: time.Now(), UpdatedAt: time.Now()},
}
if err := db.Create(conversation).Error; err != nil {
t.Fatalf("create conversation error = %v", err)
}
var secondID int64
if err := sqls.WithTransaction(func(ctx *sqls.TxContext) error {
id, err := services.CustomerService.EnsureExternalCustomer(ctx, openidentity.ExternalUser{
ExternalSource: enums.ExternalSourceUser,
ExternalID: "user-1",
ExternalName: "李四",
})
secondID = id
return err
}); err != nil {
t.Fatalf("EnsureExternalCustomer() second error = %v", err)
}
if secondID != firstID {
t.Fatalf("expected same customer id, got %d and %d", firstID, secondID)
}
customer := services.CustomerService.Get(firstID)
if customer == nil {
t.Fatalf("expected customer to exist")
}
if customer.Name != "李四" {
t.Fatalf("expected customer name updated, got %q", customer.Name)
}
var updatedConversation models.Conversation
if err := db.First(&updatedConversation, conversation.ID).Error; err != nil {
t.Fatalf("get conversation error = %v", err)
}
if updatedConversation.CustomerName != "李四" {
t.Fatalf("expected conversation customer name updated, got %q", updatedConversation.CustomerName)
}
}
func setupCustomerServiceTestDB(t *testing.T) *gorm.DB {
t.Helper()
db, err := gorm.Open(sqlite.Open("file::memory:?cache=shared"), &gorm.Config{
NamingStrategy: schema.NamingStrategy{
TablePrefix: "t_",
SingularTable: true,
},
})
if err != nil {
t.Fatalf("open sqlite error = %v", err)
}
t.Cleanup(func() {
sqlDB, err := db.DB()
if err == nil {
_ = sqlDB.Close()
}
})
if err := db.AutoMigrate(&models.Customer{}, &models.CustomerIdentity{}, &models.Conversation{}); err != nil {
t.Fatalf("auto migrate error = %v", err)
}
sqls.SetDB(db)
return db
}