二维码自动补发
This commit is contained in:
@@ -21,7 +21,19 @@ func setupQrCodeTestDB(t *testing.T) *gorm.DB {
|
||||
if err != nil {
|
||||
t.Fatalf("无法创建测试数据库: %v", err)
|
||||
}
|
||||
if err := db.AutoMigrate(&model.ChatQrCode{}, &model.ChatConversation{}, &model.SystemConfig{}); err != nil {
|
||||
if err := db.AutoMigrate(
|
||||
&model.ChatQrCode{},
|
||||
&model.ChatConversation{},
|
||||
&model.ChatParticipant{},
|
||||
&model.ChatMessage{},
|
||||
&model.ChatQrCodeDeliveryTask{},
|
||||
&model.ChatSupportGroup{},
|
||||
&model.ChatSupportGroupMember{},
|
||||
&model.AdminUser{},
|
||||
&model.AdminUserRole{},
|
||||
&model.Role{},
|
||||
&model.SystemConfig{},
|
||||
); err != nil {
|
||||
t.Fatalf("数据库迁移失败: %v", err)
|
||||
}
|
||||
return db
|
||||
@@ -218,3 +230,86 @@ func TestUpdateQrCodeGroupNameAndRenameFlag(t *testing.T) {
|
||||
t.Fatal("企微改名标记未保存")
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnsureListingConversationCreatesQrCodeDeliveryTaskWhenStockEmpty(t *testing.T) {
|
||||
db := setupQrCodeTestDB(t)
|
||||
listing := model.RentalListing{
|
||||
ID: 101,
|
||||
ListingNo: "L202606260001",
|
||||
OwnerID: 10,
|
||||
}
|
||||
|
||||
if err := db.Transaction(func(tx *gorm.DB) error {
|
||||
_, err := EnsureListingConversation(tx, listing, 0)
|
||||
return err
|
||||
}); err != nil {
|
||||
t.Fatalf("建发布群失败: %v", err)
|
||||
}
|
||||
|
||||
var task model.ChatQrCodeDeliveryTask
|
||||
if err := db.First(&task).Error; err != nil {
|
||||
t.Fatalf("未创建补发任务: %v", err)
|
||||
}
|
||||
if task.Status != "pending" {
|
||||
t.Fatalf("补发任务状态 = %q, want pending", task.Status)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBatchCreateQrCodeDeliversPendingTask(t *testing.T) {
|
||||
db := setupQrCodeTestDB(t)
|
||||
repo := NewRepository(db, nil)
|
||||
conversation := model.ChatConversation{
|
||||
Title: "账号群 L202606260002",
|
||||
Type: ConversationTypeListingGroup,
|
||||
Status: "active",
|
||||
}
|
||||
if err := db.Create(&conversation).Error; err != nil {
|
||||
t.Fatalf("创建群聊失败: %v", err)
|
||||
}
|
||||
task := model.ChatQrCodeDeliveryTask{
|
||||
ConversationID: conversation.ID,
|
||||
Status: "pending",
|
||||
}
|
||||
if err := db.Create(&task).Error; err != nil {
|
||||
t.Fatalf("创建补发任务失败: %v", err)
|
||||
}
|
||||
|
||||
_, err := repo.BatchCreateQrCode(t.Context(), 1, BatchCreateQrCodeRequest{
|
||||
Items: []CreateQrCodeRequest{
|
||||
{ImageURL: "/api/files/object?key=qrcode/replenish.png", GroupName: "补发群"},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("批量创建二维码失败: %v", err)
|
||||
}
|
||||
|
||||
var savedTask model.ChatQrCodeDeliveryTask
|
||||
if err := db.First(&savedTask, task.ID).Error; err != nil {
|
||||
t.Fatalf("查询补发任务失败: %v", err)
|
||||
}
|
||||
if savedTask.Status != "sent" {
|
||||
t.Fatalf("补发任务状态 = %q, want sent", savedTask.Status)
|
||||
}
|
||||
if savedTask.QrCodeID == nil {
|
||||
t.Fatal("补发任务未记录二维码 ID")
|
||||
}
|
||||
if savedTask.SentAt == nil {
|
||||
t.Fatal("补发任务未记录 sent_at")
|
||||
}
|
||||
|
||||
var qrcode model.ChatQrCode
|
||||
if err := db.First(&qrcode, *savedTask.QrCodeID).Error; err != nil {
|
||||
t.Fatalf("查询二维码失败: %v", err)
|
||||
}
|
||||
if qrcode.Status != QrCodeStatusUsed {
|
||||
t.Fatalf("二维码状态 = %q, want used", qrcode.Status)
|
||||
}
|
||||
if qrcode.ConversationID == nil || *qrcode.ConversationID != conversation.ID {
|
||||
t.Fatalf("二维码绑定会话 = %v, want %d", qrcode.ConversationID, conversation.ID)
|
||||
}
|
||||
|
||||
var message model.ChatMessage
|
||||
if err := db.Where("conversation_id = ? AND content_type = ?", conversation.ID, "image").First(&message).Error; err != nil {
|
||||
t.Fatalf("未生成二维码图片消息: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user