Skip to content

Commit

Permalink
[#6372] Add test code
Browse files Browse the repository at this point in the history
  • Loading branch information
wookie0 committed Nov 7, 2024
1 parent 2c10b8b commit 68dccca
Showing 1 changed file with 65 additions and 16 deletions.
81 changes: 65 additions & 16 deletions tests/migrate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,6 @@ func TestSmartMigrateColumn(t *testing.T) {
ID uint
Name string
Salary float64
Bonus float64 `gorm:"not null"`
Stock float64
Birthday time.Time `gorm:"precision:4"`
}

Expand All @@ -159,10 +157,8 @@ func TestSmartMigrateColumn(t *testing.T) {

type UserMigrateColumn2 struct {
ID uint
Name string `gorm:"size:128"`
Salary float64 `gorm:"precision:2"`
Bonus float64
Stock float64 `gorm:"not null"`
Name string `gorm:"size:128"`
Salary float64 `gorm:"precision:2"`
Birthday time.Time `gorm:"precision:2"`
NameIgnoreMigration string `gorm:"size:100"`
}
Expand All @@ -186,16 +182,6 @@ func TestSmartMigrateColumn(t *testing.T) {
if precision, o, _ := columnType.DecimalSize(); (fullSupported || precision != 0) && precision != 2 {
t.Fatalf("salary's precision should be 2, but got %v %v", precision, o)
}
case "bonus":
// allow to change non-nullable to nullable
if nullable, _ := columnType.Nullable(); !nullable {
t.Fatalf("bonus's nullable should be true, bug got %t", nullable)
}
case "stock":
// do not allow to change nullable to non-nullable
if nullable, _ := columnType.Nullable(); !nullable {
t.Fatalf("stock's nullable should be true, bug got %t", nullable)
}
case "birthday":
if precision, _, _ := columnType.DecimalSize(); (fullSupported || precision != 0) && precision != 2 {
t.Fatalf("birthday's precision should be 2, but got %v", precision)
Expand Down Expand Up @@ -1959,3 +1945,66 @@ func TestMigrateWithUniqueIndexAndUnique(t *testing.T) {
}
}
}

func TestSmartMigrateColumnNullable(t *testing.T) {
fullSupported := map[string]bool{"mysql": true, "postgres": true}[DB.Dialector.Name()]

type UserMigrateColumn struct {
ID uint
Name string
Salary float64
Bonus float64 `gorm:"not null"`
Stock float64
Birthday time.Time `gorm:"precision:4"`
}

DB.Migrator().DropTable(&UserMigrateColumn{})

DB.AutoMigrate(&UserMigrateColumn{})

type UserMigrateColumn2 struct {
ID uint
Name string `gorm:"size:128"`
Salary float64 `gorm:"precision:2"`
Bonus float64
Stock float64 `gorm:"not null"`
Birthday time.Time `gorm:"precision:2"`
NameIgnoreMigration string `gorm:"size:100"`
}

if err := DB.Table("user_migrate_columns").AutoMigrate(&UserMigrateColumn2{}); err != nil {
t.Fatalf("failed to auto migrate, got error: %v", err)
}

columnTypes, err := DB.Table("user_migrate_columns").Migrator().ColumnTypes(&UserMigrateColumn{})
if err != nil {
t.Fatalf("failed to get column types, got error: %v", err)
}

for _, columnType := range columnTypes {
switch columnType.Name() {
case "name":
if length, _ := columnType.Length(); (fullSupported || length != 0) && length != 128 {
t.Fatalf("name's length should be 128, but got %v", length)
}
case "salary":
if precision, o, _ := columnType.DecimalSize(); (fullSupported || precision != 0) && precision != 2 {
t.Fatalf("salary's precision should be 2, but got %v %v", precision, o)
}
case "bonus":
// allow to change non-nullable to nullable
if nullable, _ := columnType.Nullable(); !nullable {
t.Fatalf("bonus's nullable should be true, bug got %t", nullable)
}
case "stock":
// do not allow to change nullable to non-nullable
if nullable, _ := columnType.Nullable(); !nullable {
t.Fatalf("stock's nullable should be true, bug got %t", nullable)
}
case "birthday":
if precision, _, _ := columnType.DecimalSize(); (fullSupported || precision != 0) && precision != 2 {
t.Fatalf("birthday's precision should be 2, but got %v", precision)
}
}
}
}

0 comments on commit 68dccca

Please sign in to comment.