| 324 | } |
| 325 | |
| 326 | func TestGenericsScopes(t *testing.T) { |
| 327 | ctx := context.Background() |
| 328 | |
| 329 | users := []User{{Name: "GenericsScopes1"}, {Name: "GenericsScopes2"}, {Name: "GenericsScopes3"}} |
| 330 | err := gorm.G[User](DB).CreateInBatches(ctx, &users, len(users)) |
| 331 | if err != nil { |
| 332 | t.Fatalf("CreateInBatches failed: %v", err) |
| 333 | } |
| 334 | |
| 335 | filterName1 := func(stmt *gorm.Statement) { |
| 336 | stmt.Where("name = ?", "GenericsScopes1") |
| 337 | } |
| 338 | |
| 339 | results, err := gorm.G[User](DB).Scopes(filterName1).Find(ctx) |
| 340 | if err != nil { |
| 341 | t.Fatalf("Scopes failed: %v", err) |
| 342 | } |
| 343 | if len(results) != 1 || results[0].Name != "GenericsScopes1" { |
| 344 | t.Fatalf("Scopes expected 1, got %d", len(results)) |
| 345 | } |
| 346 | |
| 347 | notResult, err := gorm.G[User](DB).Where("name like ?", "GenericsScopes%").Not("name = ?", "GenericsScopes1").Order("name").Find(ctx) |
| 348 | if len(notResult) != 2 { |
| 349 | t.Fatalf("expected 2 results, got %d", len(notResult)) |
| 350 | } else if notResult[0].Name != "GenericsScopes2" || notResult[1].Name != "GenericsScopes3" { |
| 351 | t.Fatalf("expected names 'GenericsScopes2' and 'GenericsScopes3', got %s and %s", notResult[0].Name, notResult[1].Name) |
| 352 | } |
| 353 | |
| 354 | orResult, err := gorm.G[User](DB).Or("name = ?", "GenericsScopes1").Or("name = ?", "GenericsScopes2").Order("name").Find(ctx) |
| 355 | if len(orResult) != 2 { |
| 356 | t.Fatalf("expected 2 results, got %d", len(notResult)) |
| 357 | } else if orResult[0].Name != "GenericsScopes1" || orResult[1].Name != "GenericsScopes2" { |
| 358 | t.Fatalf("expected names 'GenericsScopes2' and 'GenericsScopes3', got %s and %s", orResult[0].Name, orResult[1].Name) |
| 359 | } |
| 360 | } |
| 361 | |
| 362 | func TestGenericsJoins(t *testing.T) { |
| 363 | ctx := context.Background() |