156 lines
3.3 KiB
Go
156 lines
3.3 KiB
Go
|
|
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")
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|