// Package models_test 包含对 models 包的单元测试 package models_test import ( "testing" "git.huangwc.com/pig/pig-farm-controller/internal/infra/models" "github.com/stretchr/testify/assert" "golang.org/x/crypto/bcrypt" ) func TestUser_CheckPassword(t *testing.T) { plainPassword := "my-secret-password" // 1. 生成一个密码哈希用于测试 hashedPassword, err := bcrypt.GenerateFromPassword([]byte(plainPassword), bcrypt.DefaultCost) assert.NoError(t, err, "生成密码哈希不应出错") user := &models.User{ Password: string(hashedPassword), } t.Run("密码正确", func(t *testing.T) { // 2. 使用正确的明文密码进行校验 match := user.CheckPassword(plainPassword) assert.True(t, match, "正确的密码应该校验通过") }) t.Run("密码错误", func(t *testing.T) { // 3. 使用错误的明文密码进行校验 match := user.CheckPassword("wrong-password") assert.False(t, match, "错误的密码应该校验失败") }) t.Run("空密码", func(t *testing.T) { // 4. 使用空字符串作为密码进行校验 match := user.CheckPassword("") assert.False(t, match, "空密码应该校验失败") }) } // 注意:BeforeSave 钩子是一个 GORM 框架的回调,它的正确性 // 将在 repository 的集成测试中,通过实际创建一个用户来得到验证, // 而不是在这里进行孤立的、脆弱的单元测试。