fix/status-review-sync-20260409 #1
@@ -705,3 +705,105 @@ func TestUserRepository_ListCursor(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// TestUserRepository_ListCursor_WithKeyword 测试带关键字过滤的游标分页
|
||||
func TestUserRepository_ListCursor_WithKeyword(t *testing.T) {
|
||||
db := setupTestDB(t)
|
||||
repo := NewUserRepository(db)
|
||||
ctx := context.Background()
|
||||
|
||||
repo.Create(ctx, &domain.User{
|
||||
Username: "keyworduser1",
|
||||
Nickname: "张三",
|
||||
Password: "hash",
|
||||
Status: domain.UserStatusActive,
|
||||
})
|
||||
repo.Create(ctx, &domain.User{
|
||||
Username: "keyworduser2",
|
||||
Nickname: "李四",
|
||||
Password: "hash",
|
||||
Status: domain.UserStatusActive,
|
||||
})
|
||||
repo.Create(ctx, &domain.User{
|
||||
Username: "otheruser",
|
||||
Nickname: "王五",
|
||||
Password: "hash",
|
||||
Status: domain.UserStatusActive,
|
||||
})
|
||||
|
||||
filter := &AdvancedFilter{Keyword: "keyword", Status: -1, Offset: 0, Limit: 10}
|
||||
users, _, err := repo.ListCursor(ctx, filter, 10, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("ListCursor() error = %v", err)
|
||||
}
|
||||
if len(users) != 2 {
|
||||
t.Errorf("len(users) = %d, want 2", len(users))
|
||||
}
|
||||
}
|
||||
|
||||
// TestUserRepository_ListCursor_WithCreatedRange 测试带创建时间范围的游标分页
|
||||
func TestUserRepository_ListCursor_WithCreatedRange(t *testing.T) {
|
||||
db := setupTestDB(t)
|
||||
repo := NewUserRepository(db)
|
||||
ctx := context.Background()
|
||||
|
||||
repo.Create(ctx, &domain.User{
|
||||
Username: "timeuser1",
|
||||
Password: "hash",
|
||||
Status: domain.UserStatusActive,
|
||||
})
|
||||
repo.Create(ctx, &domain.User{
|
||||
Username: "timeuser2",
|
||||
Password: "hash",
|
||||
Status: domain.UserStatusActive,
|
||||
})
|
||||
|
||||
now := time.Now()
|
||||
filter := &AdvancedFilter{
|
||||
Status: -1,
|
||||
CreatedFrom: func() *time.Time { t := now.Add(-time.Hour); return &t }(),
|
||||
CreatedTo: func() *time.Time { return &now }(),
|
||||
Offset: 0,
|
||||
Limit: 10,
|
||||
}
|
||||
users, _, err := repo.ListCursor(ctx, filter, 10, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("ListCursor() error = %v", err)
|
||||
}
|
||||
if len(users) != 2 {
|
||||
t.Errorf("len(users) = %d, want 2", len(users))
|
||||
}
|
||||
}
|
||||
|
||||
// TestUserRepository_ListCursor_WithRoleIDs 测试带角色过滤的游标分页
|
||||
func TestUserRepository_ListCursor_WithRoleIDs(t *testing.T) {
|
||||
db := setupTestDB(t)
|
||||
repo := NewUserRepository(db)
|
||||
ctx := context.Background()
|
||||
|
||||
// 创建用户
|
||||
user1 := &domain.User{Username: "roleuser1", Password: "hash", Status: domain.UserStatusActive}
|
||||
user2 := &domain.User{Username: "roleuser2", Password: "hash", Status: domain.UserStatusActive}
|
||||
repo.Create(ctx, user1)
|
||||
repo.Create(ctx, user2)
|
||||
|
||||
// 创建角色
|
||||
role := &domain.Role{Code: "testrole", Name: "测试角色", Status: domain.RoleStatusEnabled}
|
||||
db.WithContext(ctx).Create(role)
|
||||
|
||||
// 分配角色给user1
|
||||
urRepo := NewUserRoleRepository(db)
|
||||
urRepo.Create(ctx, &domain.UserRole{UserID: user1.ID, RoleID: role.ID})
|
||||
|
||||
filter := &AdvancedFilter{RoleIDs: []int64{role.ID}, Status: -1, Offset: 0, Limit: 10}
|
||||
users, _, err := repo.ListCursor(ctx, filter, 10, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("ListCursor() error = %v", err)
|
||||
}
|
||||
if len(users) != 1 {
|
||||
t.Errorf("len(users) = %d, want 1", len(users))
|
||||
}
|
||||
if users[0].Username != "roleuser1" {
|
||||
t.Errorf("users[0].Username = %s, want roleuser1", users[0].Username)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user