|
1 | 1 | package main
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "context" |
| 5 | + "slices" |
4 | 6 | "testing"
|
5 | 7 | )
|
6 | 8 |
|
7 | 9 | // GORM_REPO: https://github.com/go-gorm/gorm.git
|
8 | 10 | // GORM_BRANCH: master
|
9 | 11 | // TEST_DRIVERS: sqlite, mysql, postgres, sqlserver
|
10 |
| - |
11 | 12 | func TestGORM(t *testing.T) {
|
12 |
| - user := User{Name: "jinzhu"} |
13 |
| - |
14 |
| - DB.Create(&user) |
| 13 | + arrayInput := []string{"A", "B", "C"} |
| 14 | + arraySave := []string{"A1", "B1", "C1"} |
15 | 15 |
|
16 |
| - var result User |
17 |
| - if err := DB.First(&result, user.ID).Error; err != nil { |
18 |
| - t.Errorf("Failed, got error: %v", err) |
| 16 | + data := Model{ |
| 17 | + JsonField: JsonField{ |
| 18 | + Array: slices.Clone(arrayInput), |
| 19 | + }, |
19 | 20 | }
|
| 21 | + |
| 22 | + t.Run("Create", func(t *testing.T) { |
| 23 | + err := DB.WithContext(context.TODO()).Model(&Model{}). |
| 24 | + Create(&data). |
| 25 | + Error |
| 26 | + if err != nil { |
| 27 | + t.Errorf("Failed, create error: %v", err) |
| 28 | + } |
| 29 | + |
| 30 | + arrayCreate := data.JsonField.Array |
| 31 | + t.Logf("arrayCreate is %v", arrayCreate) |
| 32 | + if !slices.Equal(arrayCreate, arrayInput) { |
| 33 | + t.Errorf("Failed, json field arrayCreate %v not equal arrayInput %v", arrayCreate, arrayInput) |
| 34 | + } |
| 35 | + }) |
| 36 | + |
| 37 | + t.Run("Find With SkipCustomMethod", func(t *testing.T) { |
| 38 | + var modelSkip *ModelSkip |
| 39 | + err := DB.WithContext(context.TODO()).Model(&Model{}). |
| 40 | + Where("id", data.ID). |
| 41 | + Find(&modelSkip). |
| 42 | + Error |
| 43 | + if err != nil { |
| 44 | + t.Errorf("Failed, get error: %v", err) |
| 45 | + } |
| 46 | + |
| 47 | + arraySkip := modelSkip.JsonField.Array |
| 48 | + t.Logf("arraySkip is %v", arraySkip) |
| 49 | + if !slices.Equal(arraySkip, arraySave) { |
| 50 | + t.Errorf("Failed, modelSkip field arraySkip %v not equal arraySave %v", arraySkip, arraySave) |
| 51 | + } |
| 52 | + }) |
| 53 | + |
| 54 | + t.Run("Find", func(t *testing.T) { |
| 55 | + var row *Model |
| 56 | + err := DB.WithContext(context.TODO()).Model(&Model{}). |
| 57 | + Where("id", data.ID). |
| 58 | + Find(&row). |
| 59 | + Error |
| 60 | + if err != nil { |
| 61 | + t.Errorf("Failed, find error: %v", err) |
| 62 | + } |
| 63 | + |
| 64 | + arrayFind := row.JsonField.Array |
| 65 | + t.Logf("arrayFind is %v", arrayFind) |
| 66 | + if !slices.Equal(arrayFind, arrayInput) { |
| 67 | + t.Errorf("Failed, json field arrayFind %v not equal arrayInput %v", arrayFind, arrayInput) |
| 68 | + } |
| 69 | + }) |
| 70 | + |
| 71 | + t.Run("Update", func(t *testing.T) { |
| 72 | + arrayUpdate := []string{"X", "Y", "Z"} |
| 73 | + arrayUpdateSave := []string{"X1", "Y1", "Z1"} |
| 74 | + |
| 75 | + err := DB.WithContext(context.TODO()).Model(&Model{}). |
| 76 | + Where("id", data.ID). |
| 77 | + Updates(Model{ |
| 78 | + JsonField: JsonField{ |
| 79 | + Array: slices.Clone(arrayUpdate), |
| 80 | + }, |
| 81 | + }). |
| 82 | + Error |
| 83 | + if err != nil { |
| 84 | + t.Errorf("Failed, update error: %v", err) |
| 85 | + } |
| 86 | + |
| 87 | + t.Run("ModelSkip", func(t *testing.T) { |
| 88 | + var modelSkip *ModelSkip |
| 89 | + err = DB.WithContext(context.TODO()).Model(&Model{}). |
| 90 | + Where("id", data.ID). |
| 91 | + Find(&modelSkip).Error |
| 92 | + if err != nil { |
| 93 | + t.Errorf("Failed, get error: %v", err) |
| 94 | + } |
| 95 | + |
| 96 | + arraySkip := modelSkip.JsonField.Array |
| 97 | + t.Logf("arraySkip is %v", arraySkip) |
| 98 | + if !slices.Equal(arraySkip, arrayUpdateSave) { |
| 99 | + t.Errorf("Failed, json field %v arrayInput not equal arrayUpdateSave %v", arraySkip, arrayUpdateSave) |
| 100 | + } |
| 101 | + }) |
| 102 | + }) |
| 103 | + |
20 | 104 | }
|
0 commit comments