Add tests for Tables
This commit is contained in:
		
							parent
							
								
									24285060d5
								
							
						
					
					
						commit
						d81179557d
					
				| @ -23,6 +23,36 @@ func (m Migrator) HasTable(value interface{}) bool { | ||||
| 	return count > 0 | ||||
| } | ||||
| 
 | ||||
| func (m Migrator) RenameTable(oldName, newName interface{}) error { | ||||
| 	var oldTable, newTable string | ||||
| 	if v, ok := oldName.(string); ok { | ||||
| 		oldTable = v | ||||
| 	} else { | ||||
| 		stmt := &gorm.Statement{DB: m.DB} | ||||
| 		if err := stmt.Parse(oldName); err == nil { | ||||
| 			oldTable = stmt.Table | ||||
| 		} else { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if v, ok := newName.(string); ok { | ||||
| 		newTable = v | ||||
| 	} else { | ||||
| 		stmt := &gorm.Statement{DB: m.DB} | ||||
| 		if err := stmt.Parse(newName); err == nil { | ||||
| 			newTable = stmt.Table | ||||
| 		} else { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return m.DB.Exec( | ||||
| 		"sp_rename @objname = ?, @newname = ?;", | ||||
| 		clause.Table{Name: oldTable}, clause.Table{Name: newTable}, | ||||
| 	).Error | ||||
| } | ||||
| 
 | ||||
| func (m Migrator) HasColumn(value interface{}, field string) bool { | ||||
| 	var count int64 | ||||
| 	m.RunWithValue(value, func(stmt *gorm.Statement) error { | ||||
|  | ||||
| @ -27,7 +27,7 @@ type Migrator interface { | ||||
| 	CreateTable(dst ...interface{}) error | ||||
| 	DropTable(dst ...interface{}) error | ||||
| 	HasTable(dst interface{}) bool | ||||
| 	RenameTable(oldName, newName string) error | ||||
| 	RenameTable(oldName, newName interface{}) error | ||||
| 
 | ||||
| 	// Columns
 | ||||
| 	AddColumn(dst interface{}, field string) error | ||||
|  | ||||
| @ -227,8 +227,31 @@ func (m Migrator) HasTable(value interface{}) bool { | ||||
| 	return count > 0 | ||||
| } | ||||
| 
 | ||||
| func (m Migrator) RenameTable(oldName, newName string) error { | ||||
| 	return m.DB.Exec("RENAME TABLE ? TO ?", oldName, newName).Error | ||||
| func (m Migrator) RenameTable(oldName, newName interface{}) error { | ||||
| 	var oldTable, newTable string | ||||
| 	if v, ok := oldName.(string); ok { | ||||
| 		oldTable = v | ||||
| 	} else { | ||||
| 		stmt := &gorm.Statement{DB: m.DB} | ||||
| 		if err := stmt.Parse(oldName); err == nil { | ||||
| 			oldTable = stmt.Table | ||||
| 		} else { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if v, ok := newName.(string); ok { | ||||
| 		newTable = v | ||||
| 	} else { | ||||
| 		stmt := &gorm.Statement{DB: m.DB} | ||||
| 		if err := stmt.Parse(newName); err == nil { | ||||
| 			newTable = stmt.Table | ||||
| 		} else { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return m.DB.Exec("ALTER TABLE ? RENAME TO ?", clause.Table{Name: oldTable}, clause.Table{Name: newTable}).Error | ||||
| } | ||||
| 
 | ||||
| func (m Migrator) AddColumn(value interface{}, field string) error { | ||||
|  | ||||
| @ -15,20 +15,53 @@ func TestMigrate(t *testing.T) { | ||||
| 	rand.Shuffle(len(allModels), func(i, j int) { allModels[i], allModels[j] = allModels[j], allModels[i] }) | ||||
| 
 | ||||
| 	if err := DB.Migrator().DropTable(allModels...); err != nil { | ||||
| 		t.Errorf("Failed to drop table, got error %v", err) | ||||
| 		t.Fatalf("Failed to drop table, got error %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if err := DB.AutoMigrate(allModels...); err != nil { | ||||
| 		t.Errorf("Failed to auto migrate, but got error %v", err) | ||||
| 		t.Fatalf("Failed to auto migrate, but got error %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	for _, m := range allModels { | ||||
| 		if !DB.Migrator().HasTable(m) { | ||||
| 			t.Errorf("Failed to create table for %#v", m) | ||||
| 			t.Fatalf("Failed to create table for %#v", m) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestTable(t *testing.T) { | ||||
| 	type TableStruct struct { | ||||
| 		gorm.Model | ||||
| 		Name string | ||||
| 	} | ||||
| 
 | ||||
| 	DB.Migrator().DropTable(&TableStruct{}) | ||||
| 	DB.AutoMigrate(&TableStruct{}) | ||||
| 
 | ||||
| 	if !DB.Migrator().HasTable(&TableStruct{}) { | ||||
| 		t.Fatalf("should found created table") | ||||
| 	} | ||||
| 
 | ||||
| 	type NewTableStruct struct { | ||||
| 		gorm.Model | ||||
| 		Name string | ||||
| 	} | ||||
| 
 | ||||
| 	if err := DB.Migrator().RenameTable(&TableStruct{}, &NewTableStruct{}); err != nil { | ||||
| 		t.Fatalf("Failed to rename table, got error %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if !DB.Migrator().HasTable("new_table_structs") { | ||||
| 		t.Fatal("should found renamed table") | ||||
| 	} | ||||
| 
 | ||||
| 	DB.Migrator().DropTable("new_table_structs") | ||||
| 
 | ||||
| 	if DB.Migrator().HasTable(&NewTableStruct{}) { | ||||
| 		t.Fatal("should not found droped table") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestIndexes(t *testing.T) { | ||||
| 	type IndexStruct struct { | ||||
| 		gorm.Model | ||||
| @ -39,43 +72,43 @@ func TestIndexes(t *testing.T) { | ||||
| 	DB.AutoMigrate(&IndexStruct{}) | ||||
| 
 | ||||
| 	if err := DB.Migrator().DropIndex(&IndexStruct{}, "Name"); err != nil { | ||||
| 		t.Errorf("Failed to drop index for user's name, got err %v", err) | ||||
| 		t.Fatalf("Failed to drop index for user's name, got err %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if err := DB.Migrator().CreateIndex(&IndexStruct{}, "Name"); err != nil { | ||||
| 		t.Errorf("Got error when tried to create index: %+v", err) | ||||
| 		t.Fatalf("Got error when tried to create index: %+v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if !DB.Migrator().HasIndex(&IndexStruct{}, "Name") { | ||||
| 		t.Errorf("Failed to find index for user's name") | ||||
| 		t.Fatalf("Failed to find index for user's name") | ||||
| 	} | ||||
| 
 | ||||
| 	if err := DB.Migrator().DropIndex(&IndexStruct{}, "Name"); err != nil { | ||||
| 		t.Errorf("Failed to drop index for user's name, got err %v", err) | ||||
| 		t.Fatalf("Failed to drop index for user's name, got err %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if DB.Migrator().HasIndex(&IndexStruct{}, "Name") { | ||||
| 		t.Errorf("Should not find index for user's name after delete") | ||||
| 		t.Fatalf("Should not find index for user's name after delete") | ||||
| 	} | ||||
| 
 | ||||
| 	if err := DB.Migrator().CreateIndex(&IndexStruct{}, "Name"); err != nil { | ||||
| 		t.Errorf("Got error when tried to create index: %+v", err) | ||||
| 		t.Fatalf("Got error when tried to create index: %+v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if err := DB.Migrator().RenameIndex(&IndexStruct{}, "idx_index_structs_name", "idx_users_name_1"); err != nil { | ||||
| 		t.Errorf("no error should happen when rename index, but got %v", err) | ||||
| 		t.Fatalf("no error should happen when rename index, but got %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if !DB.Migrator().HasIndex(&IndexStruct{}, "idx_users_name_1") { | ||||
| 		t.Errorf("Should find index for user's name after rename") | ||||
| 		t.Fatalf("Should find index for user's name after rename") | ||||
| 	} | ||||
| 
 | ||||
| 	if err := DB.Migrator().DropIndex(&IndexStruct{}, "idx_users_name_1"); err != nil { | ||||
| 		t.Errorf("Failed to drop index for user's name, got err %v", err) | ||||
| 		t.Fatalf("Failed to drop index for user's name, got err %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	if DB.Migrator().HasIndex(&IndexStruct{}, "idx_users_name_1") { | ||||
| 		t.Errorf("Should not find index for user's name after delete") | ||||
| 		t.Fatalf("Should not find index for user's name after delete") | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu