Files
backend/internal/repository/user_repository_test.go

156 lines
3.3 KiB
Go
Raw Normal View History

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")
}
}
})
}
}