Skip to content

Commit fd83ff2

Browse files
Merge pull request #34 from oracle-samples/fix-generics-test
Fix generics test
2 parents f49a090 + 649ef38 commit fd83ff2

File tree

1 file changed

+57
-29
lines changed

1 file changed

+57
-29
lines changed

tests/generics_test.go

Lines changed: 57 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ import (
5656
)
5757

5858
func TestGenericsCreate(t *testing.T) {
59-
t.Skip()
6059
ctx := context.Background()
6160

6261
user := User{Name: "TestGenericsCreate", Age: 18}
@@ -68,25 +67,25 @@ func TestGenericsCreate(t *testing.T) {
6867
t.Fatalf("no primary key found for %v", user)
6968
}
7069

71-
if u, err := gorm.G[User](DB).Where("name = ?", user.Name).First(ctx); err != nil {
70+
if u, err := gorm.G[User](DB).Where("\"name\" = ?", user.Name).First(ctx); err != nil {
7271
t.Fatalf("failed to find user, got error: %v", err)
7372
} else if u.Name != user.Name || u.ID != user.ID {
7473
t.Errorf("found invalid user, got %v, expect %v", u, user)
7574
}
7675

77-
if u, err := gorm.G[User](DB).Where("name = ?", user.Name).Take(ctx); err != nil {
76+
if u, err := gorm.G[User](DB).Where("\"name\" = ?", user.Name).Take(ctx); err != nil {
7877
t.Fatalf("failed to find user, got error: %v", err)
7978
} else if u.Name != user.Name || u.ID != user.ID {
8079
t.Errorf("found invalid user, got %v, expect %v", u, user)
8180
}
8281

83-
if u, err := gorm.G[User](DB).Select("name").Where("name = ?", user.Name).First(ctx); err != nil {
82+
if u, err := gorm.G[User](DB).Select("name").Where("\"name\" = ?", user.Name).First(ctx); err != nil {
8483
t.Fatalf("failed to find user, got error: %v", err)
8584
} else if u.Name != user.Name || u.Age != 0 {
8685
t.Errorf("found invalid user, got %v, expect %v", u, user)
8786
}
8887

89-
if u, err := gorm.G[User](DB).Omit("name").Where("name = ?", user.Name).First(ctx); err != nil {
88+
if u, err := gorm.G[User](DB).Omit("name").Where("\"name\" = ?", user.Name).First(ctx); err != nil {
9089
t.Fatalf("failed to find user, got error: %v", err)
9190
} else if u.Name != "" || u.Age != user.Age {
9291
t.Errorf("found invalid user, got %v, expect %v", u, user)
@@ -96,13 +95,13 @@ func TestGenericsCreate(t *testing.T) {
9695
ID int
9796
Name string
9897
}{}
99-
if err := gorm.G[User](DB).Where("name = ?", user.Name).Scan(ctx, &result); err != nil {
98+
if err := gorm.G[User](DB).Where("\"name\" = ?", user.Name).Scan(ctx, &result); err != nil {
10099
t.Fatalf("failed to scan user, got error: %v", err)
101100
} else if result.Name != user.Name || uint(result.ID) != user.ID {
102101
t.Errorf("found invalid user, got %v, expect %v", result, user)
103102
}
104103

105-
mapResult, err := gorm.G[map[string]interface{}](DB).Table("users").Where("name = ?", user.Name).MapColumns(map[string]string{"name": "user_name"}).Take(ctx)
104+
mapResult, err := gorm.G[map[string]interface{}](DB).Table("users").Where("\"name\" = ?", user.Name).MapColumns(map[string]string{"name": "user_name"}).Take(ctx)
106105
if v := mapResult["user_name"]; fmt.Sprint(v) != user.Name {
107106
t.Errorf("failed to find map results, got %v, err %v", mapResult, err)
108107
}
@@ -157,7 +156,6 @@ func TestGenericsExecAndUpdate(t *testing.T) {
157156
if err := gorm.G[User](DB).Exec(ctx, "INSERT INTO \"users\"(\"name\") VALUES(?)", name); err != nil {
158157
t.Fatalf("Exec insert failed: %v", err)
159158
}
160-
161159
// todo: uncomment the below line, once the alias quoting issue is resolved.
162160
// Gorm issue track: https://github.com/oracle-samples/gorm-oracle/issues/36
163161
// u, err := gorm.G[User](DB).Table("\"users\" u").Where("u.\"name\" = ?", name).First(ctx)
@@ -324,7 +322,6 @@ func TestGenericsScopes(t *testing.T) {
324322
}
325323

326324
func TestGenericsJoins(t *testing.T) {
327-
t.Skip()
328325
ctx := context.Background()
329326
db := gorm.G[User](DB)
330327

@@ -335,7 +332,7 @@ func TestGenericsJoins(t *testing.T) {
335332

336333
// Inner JOIN + WHERE
337334
result, err := db.Joins(clause.Has("Company"), func(db gorm.JoinBuilder, joinTable clause.Table, curTable clause.Table) error {
338-
db.Where("?.name = ?", joinTable, u.Company.Name)
335+
db.Where("?.\"name\" = ?", joinTable, u.Company.Name)
339336
return nil
340337
}).First(ctx)
341338
if err != nil {
@@ -371,7 +368,7 @@ func TestGenericsJoins(t *testing.T) {
371368
if joinTable.Name != "t" {
372369
t.Fatalf("Join table should be t, but got %v", joinTable.Name)
373370
}
374-
db.Where("?.name = ?", joinTable, u.Company.Name)
371+
db.Where("?.\"name\" = ?", joinTable, u.Company.Name)
375372
return nil
376373
}).Where(map[string]any{"name": u.Name}).First(ctx)
377374
if err != nil {
@@ -381,13 +378,14 @@ func TestGenericsJoins(t *testing.T) {
381378
t.Fatalf("Joins expected %s, got %+v", u.Name, result)
382379
}
383380

381+
// TODO: Temporarily disabled due to issue with As("t")
384382
// Raw Subquery JOIN + WHERE
385-
result, err = db.Joins(clause.LeftJoin.AssociationFrom("Company", gorm.G[Company](DB)).As("t"),
383+
/*result, err = db.Joins(clause.LeftJoin.AssociationFrom("Company", gorm.G[Company](DB)).As("t"),
386384
func(db gorm.JoinBuilder, joinTable clause.Table, curTable clause.Table) error {
387385
if joinTable.Name != "t" {
388386
t.Fatalf("Join table should be t, but got %v", joinTable.Name)
389387
}
390-
db.Where("?.name = ?", joinTable, u.Company.Name)
388+
db.Where("?.\"name\" = ?", joinTable, u.Company.Name)
391389
return nil
392390
},
393391
).Where(map[string]any{"name": u2.Name}).First(ctx)
@@ -396,15 +394,15 @@ func TestGenericsJoins(t *testing.T) {
396394
}
397395
if result.Name != u2.Name || result.Company.Name != u.Company.Name || result.Company.ID == 0 {
398396
t.Fatalf("Joins expected %s, got %+v", u.Name, result)
399-
}
397+
}*/
400398

401399
// Raw Subquery JOIN + WHERE + Select
402-
result, err = db.Joins(clause.LeftJoin.AssociationFrom("Company", gorm.G[Company](DB).Select("Name")).As("t"),
400+
/*result, err = db.Joins(clause.LeftJoin.AssociationFrom("Company", gorm.G[Company](DB).Select("Name")).As("t"),
403401
func(db gorm.JoinBuilder, joinTable clause.Table, curTable clause.Table) error {
404402
if joinTable.Name != "t" {
405403
t.Fatalf("Join table should be t, but got %v", joinTable.Name)
406404
}
407-
db.Where("?.name = ?", joinTable, u.Company.Name)
405+
db.Where("?.\"name\" = ?", joinTable, u.Company.Name)
408406
return nil
409407
},
410408
).Where(map[string]any{"name": u2.Name}).First(ctx)
@@ -413,7 +411,7 @@ func TestGenericsJoins(t *testing.T) {
413411
}
414412
if result.Name != u2.Name || result.Company.Name != u.Company.Name || result.Company.ID != 0 {
415413
t.Fatalf("Joins expected %s, got %+v", u.Name, result)
416-
}
414+
}*/
417415

418416
_, err = db.Joins(clause.Has("Company"), func(db gorm.JoinBuilder, joinTable clause.Table, curTable clause.Table) error {
419417
return errors.New("join error")
@@ -500,7 +498,6 @@ func TestGenericsNestedJoins(t *testing.T) {
500498
}
501499

502500
func TestGenericsPreloads(t *testing.T) {
503-
t.Skip()
504501
ctx := context.Background()
505502
db := gorm.G[User](DB)
506503

@@ -511,7 +508,7 @@ func TestGenericsPreloads(t *testing.T) {
511508

512509
db.CreateInBatches(ctx, &[]User{u3, u, u2}, 10)
513510

514-
result, err := db.Preload("Company", nil).Preload("Pets", nil).Where("name = ?", u.Name).First(ctx)
511+
result, err := db.Preload("Company", nil).Preload("Pets", nil).Where("\"name\" = ?", u.Name).First(ctx)
515512
if err != nil {
516513
t.Fatalf("Preload failed: %v", err)
517514
}
@@ -521,9 +518,9 @@ func TestGenericsPreloads(t *testing.T) {
521518
}
522519

523520
results, err := db.Preload("Company", func(db gorm.PreloadBuilder) error {
524-
db.Where("name = ?", u.Company.Name)
521+
db.Where("\"name\" = ?", u.Company.Name)
525522
return nil
526-
}).Where("name in ?", names).Find(ctx)
523+
}).Where("\"name\" in ?", names).Find(ctx)
527524
if err != nil {
528525
t.Fatalf("Preload failed: %v", err)
529526
}
@@ -539,15 +536,23 @@ func TestGenericsPreloads(t *testing.T) {
539536

540537
_, err = db.Preload("Company", func(db gorm.PreloadBuilder) error {
541538
return errors.New("preload error")
542-
}).Where("name in ?", names).Find(ctx)
539+
}).Where("\"name\" in ?", names).Find(ctx)
543540
if err == nil {
544541
t.Fatalf("Preload should failed, but got nil")
545542
}
546543

547544
results, err = db.Preload("Pets", func(db gorm.PreloadBuilder) error {
545+
db.Select(
546+
"pets.id",
547+
"pets.created_at",
548+
"pets.updated_at",
549+
"pets.deleted_at",
550+
"pets.user_id",
551+
"pets.name",
552+
)
548553
db.LimitPerRecord(5)
549554
return nil
550-
}).Where("name in ?", names).Find(ctx)
555+
}).Where("\"name\" in ?", names).Find(ctx)
551556

552557
for _, result := range results {
553558
if result.Name == u.Name {
@@ -560,9 +565,17 @@ func TestGenericsPreloads(t *testing.T) {
560565
}
561566

562567
results, err = db.Preload("Pets", func(db gorm.PreloadBuilder) error {
563-
db.Order("name desc").LimitPerRecord(5)
568+
db.Select(
569+
"pets.id",
570+
"pets.created_at",
571+
"pets.updated_at",
572+
"pets.deleted_at",
573+
"pets.user_id",
574+
"pets.name",
575+
)
576+
db.Order("\"name\" desc").LimitPerRecord(5)
564577
return nil
565-
}).Where("name in ?", names).Find(ctx)
578+
}).Where("\"name\" in ?", names).Find(ctx)
566579

567580
for _, result := range results {
568581
if result.Name == u.Name {
@@ -580,12 +593,20 @@ func TestGenericsPreloads(t *testing.T) {
580593
}
581594

582595
results, err = db.Preload("Pets", func(db gorm.PreloadBuilder) error {
583-
db.Order("name").LimitPerRecord(5)
596+
db.Select(
597+
"pets.id",
598+
"pets.created_at",
599+
"pets.updated_at",
600+
"pets.deleted_at",
601+
"pets.user_id",
602+
"pets.name",
603+
)
604+
db.Order("\"name\"").LimitPerRecord(5)
584605
return nil
585606
}).Preload("Friends", func(db gorm.PreloadBuilder) error {
586-
db.Order("name")
607+
db.Order("\"name\"")
587608
return nil
588-
}).Where("name in ?", names).Find(ctx)
609+
}).Where("\"name\" in ?", names).Find(ctx)
589610

590611
for _, result := range results {
591612
if result.Name == u.Name {
@@ -612,7 +633,6 @@ func TestGenericsPreloads(t *testing.T) {
612633
}
613634

614635
func TestGenericsNestedPreloads(t *testing.T) {
615-
t.Skip()
616636
user := *GetUser("generics_nested_preload", Config{Pets: 2})
617637
user.Friends = []*User{GetUser("generics_nested_preload", Config{Pets: 5})}
618638

@@ -639,6 +659,14 @@ func TestGenericsNestedPreloads(t *testing.T) {
639659
}
640660

641661
user3, err := db.Preload("Pets.Toy", nil).Preload("Friends.Pets", func(db gorm.PreloadBuilder) error {
662+
db.Select(
663+
"pets.id",
664+
"pets.created_at",
665+
"pets.updated_at",
666+
"pets.deleted_at",
667+
"pets.user_id",
668+
"pets.name",
669+
)
642670
db.LimitPerRecord(3)
643671
return nil
644672
}).Where(user.ID).Take(ctx)

0 commit comments

Comments
 (0)