mirror of
https://git.boos.lat/aibo/BossChat.git
synced 2026-10-30 15:16:11 +00:00
0f40930a41
- Rename Go module: cs-agent → bosschat - Rename all import paths across 200+ Go files - Rename SDK: cs-ai-agent-sdk → bosschat-sdk - Rename message protocol: cs-agent:* → bosschat:* - Rename JS globals: CSAgentConfig → BossChatConfig - Rename CSS classes: cs-agent-* → bosschat-* - Update Makefile APP_NAME and ARCHIVE_NAME - Update logo assets - Fix display name: BoosChat → BossChat
101 lines
2.7 KiB
Go
101 lines
2.7 KiB
Go
package services_test
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"bosschat/internal/models"
|
|
"bosschat/internal/pkg/enums"
|
|
"bosschat/internal/pkg/openidentity"
|
|
"bosschat/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
|
|
}
|