101577f163
- 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.
101 lines
2.7 KiB
Go
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
|
|
}
|