二维码自动补发

This commit is contained in:
yml2213
2026-06-19 17:08:57 +08:00
parent 5ff1ea40b0
commit 076ac6098e
7 changed files with 303 additions and 43 deletions
+96 -1
View File
@@ -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)
}
}