test(MigrateColumn): mock alter column to improve field compare

This commit is contained in:
a631807682 2022-07-09 14:39:36 +08:00
parent b13d1757fa
commit 2d41bda929
No known key found for this signature in database
GPG Key ID: 137D1D75522168AB

View File

@ -8,7 +8,10 @@ import (
"testing"
"time"
"gorm.io/driver/mysql"
"gorm.io/driver/postgres"
"gorm.io/driver/sqlite"
"gorm.io/driver/sqlserver"
"gorm.io/gorm"
"gorm.io/gorm/schema"
. "gorm.io/gorm/utils/tests"
@ -959,3 +962,89 @@ func TestMigrateArrayTypeModel(t *testing.T) {
AssertEqual(t, nil, err)
AssertEqual(t, "integer[]", ct.DatabaseTypeName())
}
type mockMigrator struct {
gorm.Migrator
}
func (mm mockMigrator) AlterColumn(dst interface{}, field string) error {
err := mm.Migrator.AlterColumn(dst, field)
if err != nil {
return err
}
return fmt.Errorf("trigger alter column error, field:%s", field)
}
type mockDialector struct {
gorm.Dialector
m gorm.Migrator
}
func (md mockDialector) Migrator(db *gorm.DB) gorm.Migrator {
return mockMigrator{
Migrator: md.m,
}
}
func (mm mockMigrator) AutoMigrate(dst ...interface{}) error {
switch dm := mm.Migrator.(type) {
case postgres.Migrator:
d := mockDialector{
Dialector: postgres.Dialector{},
m: mm,
}
dm.DB.Dialector = d
case mysql.Migrator:
d := mockDialector{
Dialector: mysql.Dialector{},
m: mm,
}
dm.DB.Dialector = d
case sqlite.Migrator:
d := mockDialector{
Dialector: sqlite.Dialector{},
m: mm,
}
dm.DB.Dialector = d
case sqlserver.Migrator:
d := mockDialector{
Dialector: sqlserver.Dialector{},
m: mm,
}
dm.DB.Dialector = d
}
return mm.Migrator.AutoMigrate(dst...)
}
func TestMigrateDonotAlterColumn(t *testing.T) {
var wrapMockMigrator = func(m gorm.Migrator) mockMigrator {
return mockMigrator{
Migrator: m,
}
}
m := DB.Migrator()
mockM := wrapMockMigrator(m)
type NotTriggerUpdate struct {
ID uint
F1 uint16
F2 uint32
F3 int
F4 int64
F5 string
F6 float32
F7 float64
F8 time.Time
F9 bool
F10 []byte
}
var err error
err = mockM.DropTable(&NotTriggerUpdate{})
AssertEqual(t, err, nil)
err = mockM.AutoMigrate(&NotTriggerUpdate{})
AssertEqual(t, err, nil)
err = mockM.AutoMigrate(&NotTriggerUpdate{})
AssertEqual(t, err, nil)
}