test(MigrateColumn): mock alter column to improve field compare
This commit is contained in:
		
							parent
							
								
									b13d1757fa
								
							
						
					
					
						commit
						2d41bda929
					
				@ -8,7 +8,10 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"gorm.io/driver/mysql"
 | 
				
			||||||
	"gorm.io/driver/postgres"
 | 
						"gorm.io/driver/postgres"
 | 
				
			||||||
 | 
						"gorm.io/driver/sqlite"
 | 
				
			||||||
 | 
						"gorm.io/driver/sqlserver"
 | 
				
			||||||
	"gorm.io/gorm"
 | 
						"gorm.io/gorm"
 | 
				
			||||||
	"gorm.io/gorm/schema"
 | 
						"gorm.io/gorm/schema"
 | 
				
			||||||
	. "gorm.io/gorm/utils/tests"
 | 
						. "gorm.io/gorm/utils/tests"
 | 
				
			||||||
@ -959,3 +962,89 @@ func TestMigrateArrayTypeModel(t *testing.T) {
 | 
				
			|||||||
	AssertEqual(t, nil, err)
 | 
						AssertEqual(t, nil, err)
 | 
				
			||||||
	AssertEqual(t, "integer[]", ct.DatabaseTypeName())
 | 
						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)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user