Files
backend/internal/repository/user_repository_test.go
lan 4b4980820f
Some checks failed
SonarQube Analysis / sonarqube (push) Has been cancelled
Test / test (push) Has been cancelled
Test / lint (push) Has been cancelled
Test / build (push) Has been cancelled
chore: 初始化仓库,排除二进制文件和覆盖率文件
2025-11-28 23:30:49 +08:00

156 lines
3.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package repository
import (
"testing"
)
// TestUserRepository_QueryConditions 测试用户查询条件逻辑
func TestUserRepository_QueryConditions(t *testing.T) {
tests := []struct {
name string
id int64
status int16
wantValid bool
}{
{
name: "有效的用户ID和状态",
id: 1,
status: 1,
wantValid: true,
},
{
name: "用户ID为0时无效",
id: 0,
status: 1,
wantValid: false,
},
{
name: "状态为-1已删除应该被排除",
id: 1,
status: -1,
wantValid: false,
},
{
name: "状态为0禁用可能有效",
id: 1,
status: 0,
wantValid: true, // 查询条件中只排除-1
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// 测试查询条件逻辑status != -1
isValid := tt.id > 0 && tt.status != -1
if isValid != tt.wantValid {
t.Errorf("Query condition validation failed: got %v, want %v", isValid, tt.wantValid)
}
})
}
}
// TestUserRepository_DeleteLogic 测试软删除逻辑
func TestUserRepository_DeleteLogic(t *testing.T) {
tests := []struct {
name string
oldStatus int16
newStatus int16
}{
{
name: "软删除应该将状态设置为-1",
oldStatus: 1,
newStatus: -1,
},
{
name: "从禁用状态删除",
oldStatus: 0,
newStatus: -1,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// 验证软删除逻辑:状态应该变为-1
if tt.newStatus != -1 {
t.Errorf("Delete should set status to -1, got %d", tt.newStatus)
}
})
}
}
// TestUserRepository_UpdateFieldsLogic 测试更新字段逻辑
func TestUserRepository_UpdateFieldsLogic(t *testing.T) {
tests := []struct {
name string
fields map[string]interface{}
wantValid bool
}{
{
name: "有效的更新字段",
fields: map[string]interface{}{
"email": "new@example.com",
"avatar": "https://example.com/avatar.png",
},
wantValid: true,
},
{
name: "空字段映射",
fields: map[string]interface{}{},
wantValid: true, // 空映射也是有效的,只是不会更新任何字段
},
{
name: "包含nil值的字段",
fields: map[string]interface{}{
"email": "new@example.com",
"avatar": nil,
},
wantValid: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// 验证字段映射逻辑
isValid := tt.fields != nil
if isValid != tt.wantValid {
t.Errorf("Update fields validation failed: got %v, want %v", isValid, tt.wantValid)
}
})
}
}
// TestUserRepository_ErrorHandling 测试错误处理逻辑
func TestUserRepository_ErrorHandling(t *testing.T) {
tests := []struct {
name string
err error
isNotFound bool
wantNilUser bool
}{
{
name: "记录未找到应该返回nil用户",
err: nil, // 模拟gorm.ErrRecordNotFound
isNotFound: true,
wantNilUser: true,
},
{
name: "其他错误应该返回错误",
err: nil,
isNotFound: false,
wantNilUser: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// 测试错误处理逻辑如果是RecordNotFound返回nil用户否则返回错误
if tt.isNotFound {
if !tt.wantNilUser {
t.Error("RecordNotFound should return nil user")
}
}
})
}
}