This commit is contained in:
wookie0 2024-11-08 13:44:10 +09:00
parent 60f2107394
commit d148cb2e6d

View File

@ -141,15 +141,55 @@ func TestAutoMigrateSelfReferential(t *testing.T) {
}
}
func TestAutoMigrateNullable(t *testing.T) {
type UserMigrateColumn struct {
ID uint
Bonus float64 `gorm:"not null"`
Stock float64
}
DB.Migrator().DropTable(&UserMigrateColumn{})
DB.AutoMigrate(&UserMigrateColumn{})
type UserMigrateColumn2 struct {
ID uint
Bonus float64
Stock float64 `gorm:"not null"`
}
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 "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)
}
}
}
}
func TestSmartMigrateColumn(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
ID uint
Name string
Salary float64
Birthday time.Time `gorm:"precision:4"`
}
@ -158,11 +198,9 @@ func TestSmartMigrateColumn(t *testing.T) {
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"`
ID uint
Name string `gorm:"size:128"`
Salary float64 `gorm:"precision:2"`
Birthday time.Time `gorm:"precision:2"`
NameIgnoreMigration string `gorm:"size:100"`
}
@ -186,16 +224,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)