| 212 | } |
| 213 | |
| 214 | func TestShardedScanner_ScanUsers(t *testing.T) { |
| 215 | t.Parallel() |
| 216 | |
| 217 | ctx := context.Background() |
| 218 | logger := log.NewNopLogger() |
| 219 | |
| 220 | tests := map[string]struct { |
| 221 | baseScanner Scanner |
| 222 | isOwned func(string) (bool, error) |
| 223 | expectedActive []string |
| 224 | expectedDeleting []string |
| 225 | expectedDeleted []string |
| 226 | expectErr bool |
| 227 | }{ |
| 228 | "successful scan with ownership check": { |
| 229 | baseScanner: &mockScanner{ |
| 230 | active: []string{"user-1", "user-2", "user-3"}, |
| 231 | deleting: []string{"user-4", "user-5"}, |
| 232 | deleted: []string{"user-6", "user-7"}, |
| 233 | }, |
| 234 | isOwned: func(userID string) (bool, error) { |
| 235 | return userID == "user-1" || userID == "user-4" || userID == "user-6", nil |
| 236 | }, |
| 237 | expectedActive: []string{"user-1"}, |
| 238 | expectedDeleting: []string{"user-4"}, |
| 239 | expectedDeleted: []string{"user-6"}, |
| 240 | expectErr: false, |
| 241 | }, |
| 242 | "ownership check error": { |
| 243 | baseScanner: &mockScanner{ |
| 244 | active: []string{"user-1"}, |
| 245 | deleting: []string{}, |
| 246 | deleted: []string{}, |
| 247 | }, |
| 248 | isOwned: func(userID string) (bool, error) { |
| 249 | return false, errors.New("failed to check ownership") |
| 250 | }, |
| 251 | expectedActive: []string{}, |
| 252 | expectedDeleting: []string{}, |
| 253 | expectedDeleted: []string{}, |
| 254 | expectErr: false, |
| 255 | }, |
| 256 | "base scanner error": { |
| 257 | baseScanner: &mockScanner{ |
| 258 | err: errors.New("base scanner error"), |
| 259 | }, |
| 260 | isOwned: func(userID string) (bool, error) { |
| 261 | return true, nil |
| 262 | }, |
| 263 | expectErr: true, |
| 264 | }, |
| 265 | } |
| 266 | |
| 267 | for testName, testData := range tests { |
| 268 | t.Run(testName, func(t *testing.T) { |
| 269 | t.Parallel() |
| 270 | |
| 271 | scanner := &shardedScanner{ |