fix anwser token and database issus
This commit is contained in:
+59
-15
@@ -11,11 +11,26 @@ import (
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/tamakyi/TamaBox/internal/conf"
|
||||
)
|
||||
|
||||
func TestUsers(t *testing.T) {
|
||||
t.Parallel()
|
||||
// requireUserEqual 比较期望与实际的 User。
|
||||
// bcrypt 哈希每次加盐不同,无法逐字节比较:先按明文校验密码,再把哈希字段对齐后比较其余字段。
|
||||
// Create 会按 conf.Limits.ChatMaxMessages 显式写入该字段,故期望值同步取该配置默认。
|
||||
func requireUserEqual(t *testing.T, want, got *User) {
|
||||
t.Helper()
|
||||
require.True(t, got.Authenticate(want.Password))
|
||||
want.Password = got.Password
|
||||
want.ChatMaxMessages = conf.Limits.ChatMaxMessages
|
||||
want.HarassmentSetting = HarassmentSettingNone // Create 显式写入 none
|
||||
require.Equal(t, want, got)
|
||||
}
|
||||
|
||||
func TestUsers(t *testing.T) {
|
||||
// 注意:本测试各子测试创建用户均使用固定邮箱/域名([email protected] / e99),
|
||||
// 且每个子测试结束会 truncate 整张 users 表。若开启 t.Parallel(),并发子测试会在
|
||||
// 同一张表上同时插入相同唯一键导致"邮箱已注册"误报;故顺序执行,使每个子测试独占全表。
|
||||
db, cleanup := newTestDB(t)
|
||||
ctx := context.Background()
|
||||
|
||||
@@ -122,8 +137,7 @@ func testUsersGetByID(t *testing.T, ctx context.Context, db *users) {
|
||||
Intro: "Be cool, but also be warm.",
|
||||
Notify: NotifyTypeEmail,
|
||||
}
|
||||
want.EncodePassword()
|
||||
require.Equal(t, want, got)
|
||||
requireUserEqual(t, want, got)
|
||||
})
|
||||
|
||||
t.Run("not found", func(t *testing.T) {
|
||||
@@ -165,8 +179,7 @@ func testUsersGetByEmail(t *testing.T, ctx context.Context, db *users) {
|
||||
Intro: "Be cool, but also be warm.",
|
||||
Notify: NotifyTypeEmail,
|
||||
}
|
||||
want.EncodePassword()
|
||||
require.Equal(t, want, got)
|
||||
requireUserEqual(t, want, got)
|
||||
})
|
||||
|
||||
t.Run("not found", func(t *testing.T) {
|
||||
@@ -208,8 +221,7 @@ func testUsersGetByDomain(t *testing.T, ctx context.Context, db *users) {
|
||||
Intro: "Be cool, but also be warm.",
|
||||
Notify: NotifyTypeEmail,
|
||||
}
|
||||
want.EncodePassword()
|
||||
require.Equal(t, want, got)
|
||||
requireUserEqual(t, want, got)
|
||||
})
|
||||
|
||||
t.Run("not found", func(t *testing.T) {
|
||||
@@ -260,8 +272,7 @@ func testUsersUpdate(t *testing.T, ctx context.Context, db *users) {
|
||||
Intro: "Be cool, but also be warm!!",
|
||||
Notify: NotifyTypeNone,
|
||||
}
|
||||
want.EncodePassword()
|
||||
require.Equal(t, want, got)
|
||||
requireUserEqual(t, want, got)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -307,6 +318,10 @@ func testUsersUpdateBlockWords(t *testing.T, ctx context.Context, db *users) {
|
||||
require.Nil(t, err)
|
||||
|
||||
t.Run("normal", func(t *testing.T) {
|
||||
// 先显式设定防骚扰类型,验证 UpdateBlockWords 不会误改该列(类型列默认为空串,
|
||||
// 与 HarassmentSettingNone 等价但值不同,故显式设定后再断言更可靠)。
|
||||
require.Nil(t, db.UpdateHarassmentType(ctx, 1, HarassmentSettingTypeRegisterOnly))
|
||||
|
||||
err := db.UpdateBlockWords(ctx, 1, "广告,抽奖")
|
||||
require.Nil(t, err)
|
||||
|
||||
@@ -314,7 +329,7 @@ func testUsersUpdateBlockWords(t *testing.T, ctx context.Context, db *users) {
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, "广告,抽奖", got.BlockWords)
|
||||
// 只应更新屏蔽词,类型列不受影响
|
||||
require.Equal(t, HarassmentSettingNone, got.HarassmentSetting)
|
||||
require.Equal(t, HarassmentSettingTypeRegisterOnly, got.HarassmentSetting)
|
||||
})
|
||||
|
||||
t.Run("empty clears words", func(t *testing.T) {
|
||||
@@ -359,8 +374,7 @@ func testUsersAuthenticate(t *testing.T, ctx context.Context, db *users) {
|
||||
Intro: "Be cool, but also be warm.",
|
||||
Notify: NotifyTypeEmail,
|
||||
}
|
||||
want.EncodePassword()
|
||||
require.Equal(t, want, got)
|
||||
requireUserEqual(t, want, got)
|
||||
}
|
||||
|
||||
func testUsersChangePassword(t *testing.T, ctx context.Context, db *users) {
|
||||
@@ -408,9 +422,9 @@ func testUsersDeactivate(t *testing.T, ctx context.Context, db *users) {
|
||||
err := db.Create(ctx, CreateUserOptions{
|
||||
Name: "E99p1ant",
|
||||
Password: "super_secret",
|
||||
Email: "i@github.red",
|
||||
Email: "deactivate@github.red",
|
||||
Avatar: "avater.png",
|
||||
Domain: "e99",
|
||||
Domain: "deactivate",
|
||||
Background: "background.png",
|
||||
Intro: "Be cool, but also be warm.",
|
||||
})
|
||||
@@ -426,3 +440,33 @@ func testUsersDeactivate(t *testing.T, ctx context.Context, db *users) {
|
||||
require.NotNil(t, err)
|
||||
})
|
||||
}
|
||||
|
||||
// TestHarassmentSettingNormalize 覆盖防骚扰设置取值归一:
|
||||
// 新建用户即写入规范值 none;历史空值经启动期归一(normalizeHarassmentSetting)后也为 none。
|
||||
func TestHarassmentSettingNormalize(t *testing.T) {
|
||||
db, _ := newTestDB(t)
|
||||
ctx := context.Background()
|
||||
usersStore := NewUsersStore(db)
|
||||
|
||||
require.Nil(t, usersStore.Create(ctx, CreateUserOptions{
|
||||
Name: "E99p1ant",
|
||||
Password: "super_secret",
|
||||
Email: "[email protected]",
|
||||
Avatar: "avater.png",
|
||||
Domain: "normalize",
|
||||
Background: "background.png",
|
||||
Intro: "Be cool, but also be warm.",
|
||||
}))
|
||||
|
||||
got, err := usersStore.GetByID(ctx, 1)
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, HarassmentSettingNone, got.HarassmentSetting, "新建用户应为规范值 none")
|
||||
|
||||
// 模拟历史行:直接把列置为空串,再跑一次启动期归一。
|
||||
require.Nil(t, db.Exec("UPDATE users SET harassment_setting = '' WHERE id = 1").Error)
|
||||
require.Nil(t, normalizeHarassmentSetting(db))
|
||||
|
||||
got, err = usersStore.GetByID(ctx, 1)
|
||||
require.Nil(t, err)
|
||||
require.Equal(t, HarassmentSettingNone, got.HarassmentSetting, "历史空值应被归一为 none")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user