禁止已发放二维码回退待用
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
package chat
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"hfb_sys/backend/internal/model"
|
||||
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/logger"
|
||||
)
|
||||
|
||||
func setupQrCodeTestDB(t *testing.T) *gorm.DB {
|
||||
t.Helper()
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{
|
||||
Logger: logger.Default.LogMode(logger.Silent),
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("无法创建测试数据库: %v", err)
|
||||
}
|
||||
if err := db.AutoMigrate(&model.ChatQrCode{}); err != nil {
|
||||
t.Fatalf("数据库迁移失败: %v", err)
|
||||
}
|
||||
return db
|
||||
}
|
||||
|
||||
func TestUpdateQrCodeRejectsUsedToUnused(t *testing.T) {
|
||||
db := setupQrCodeTestDB(t)
|
||||
repo := NewRepository(db, nil)
|
||||
now := time.Date(2026, 6, 18, 12, 0, 0, 0, time.UTC)
|
||||
conversationID := uint64(1001)
|
||||
qrcode := model.ChatQrCode{
|
||||
ImageURL: "/api/files/object?key=qrcode/used.png",
|
||||
Status: QrCodeStatusUsed,
|
||||
ConversationID: &conversationID,
|
||||
UsedAt: &now,
|
||||
CreatedBy: 1,
|
||||
}
|
||||
if err := db.Create(&qrcode).Error; err != nil {
|
||||
t.Fatalf("创建二维码失败: %v", err)
|
||||
}
|
||||
|
||||
status := QrCodeStatusUnused
|
||||
err := repo.UpdateQrCode(t.Context(), qrcode.ID, UpdateQrCodeRequest{Status: &status})
|
||||
if !errors.Is(err, ErrQrCodeCannotReenable) {
|
||||
t.Fatalf("error = %v, want ErrQrCodeCannotReenable", err)
|
||||
}
|
||||
|
||||
var saved model.ChatQrCode
|
||||
if err := db.First(&saved, qrcode.ID).Error; err != nil {
|
||||
t.Fatalf("查询二维码失败: %v", err)
|
||||
}
|
||||
if saved.Status != QrCodeStatusUsed {
|
||||
t.Fatalf("二维码状态 = %q, want %q", saved.Status, QrCodeStatusUsed)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdateQrCodeRejectsIssuedDisabledToUnused(t *testing.T) {
|
||||
db := setupQrCodeTestDB(t)
|
||||
repo := NewRepository(db, nil)
|
||||
conversationID := uint64(1002)
|
||||
qrcode := model.ChatQrCode{
|
||||
ImageURL: "/api/files/object?key=qrcode/disabled.png",
|
||||
Status: QrCodeStatusDisabled,
|
||||
ConversationID: &conversationID,
|
||||
CreatedBy: 1,
|
||||
}
|
||||
if err := db.Create(&qrcode).Error; err != nil {
|
||||
t.Fatalf("创建二维码失败: %v", err)
|
||||
}
|
||||
|
||||
status := QrCodeStatusUnused
|
||||
err := repo.UpdateQrCode(t.Context(), qrcode.ID, UpdateQrCodeRequest{Status: &status})
|
||||
if !errors.Is(err, ErrQrCodeCannotReenable) {
|
||||
t.Fatalf("error = %v, want ErrQrCodeCannotReenable", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdateQrCodeAllowsUnusedToDisabled(t *testing.T) {
|
||||
db := setupQrCodeTestDB(t)
|
||||
repo := NewRepository(db, nil)
|
||||
qrcode := model.ChatQrCode{
|
||||
ImageURL: "/api/files/object?key=qrcode/unused.png",
|
||||
Status: QrCodeStatusUnused,
|
||||
CreatedBy: 1,
|
||||
}
|
||||
if err := db.Create(&qrcode).Error; err != nil {
|
||||
t.Fatalf("创建二维码失败: %v", err)
|
||||
}
|
||||
|
||||
status := QrCodeStatusDisabled
|
||||
if err := repo.UpdateQrCode(t.Context(), qrcode.ID, UpdateQrCodeRequest{Status: &status}); err != nil {
|
||||
t.Fatalf("更新二维码失败: %v", err)
|
||||
}
|
||||
|
||||
var saved model.ChatQrCode
|
||||
if err := db.First(&saved, qrcode.ID).Error; err != nil {
|
||||
t.Fatalf("查询二维码失败: %v", err)
|
||||
}
|
||||
if saved.Status != QrCodeStatusDisabled {
|
||||
t.Fatalf("二维码状态 = %q, want %q", saved.Status, QrCodeStatusDisabled)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user