test: add comprehensive ListCursor tests with keyword, time range, and role filters
This commit is contained in:
@@ -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