fix/status-review-sync-20260409 #1

Merged
long merged 65 commits from fix/status-review-sync-20260409 into main 2026-04-18 15:05:51 +00:00
Showing only changes of commit 1929c42e35 - Show all commits

View File

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