Test Updates
This commit is contained in:
		
							parent
							
								
									abae7f71c5
								
							
						
					
					
						commit
						028c9d6e17
					
				| @ -164,7 +164,7 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) { | ||||
| 		case reflect.Struct: | ||||
| 			set = make([]clause.Assignment, 0, len(stmt.Schema.FieldsByDBName)) | ||||
| 			for _, field := range stmt.Schema.FieldsByDBName { | ||||
| 				if !field.PrimaryKey || stmt.Dest != stmt.Model { | ||||
| 				if !field.PrimaryKey || (!stmt.ReflectValue.CanAddr() || stmt.Dest != stmt.Model) { | ||||
| 					if v, ok := selectColumns[field.DBName]; (ok && v) || (!ok && !restricted) { | ||||
| 						value, isZero := field.ValueOf(stmt.ReflectValue) | ||||
| 						if field.AutoUpdateTime > 0 { | ||||
| @ -186,7 +186,7 @@ func ConvertToAssignments(stmt *gorm.Statement) (set clause.Set) { | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if stmt.Dest != stmt.Model { | ||||
| 	if !stmt.ReflectValue.CanAddr() || stmt.Dest != stmt.Model { | ||||
| 		reflectValue := reflect.Indirect(reflect.ValueOf(stmt.Model)) | ||||
| 		switch reflectValue.Kind() { | ||||
| 		case reflect.Slice, reflect.Array: | ||||
|  | ||||
| @ -1,35 +0,0 @@ | ||||
| package mssql_test | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/jinzhu/gorm" | ||||
| 	"github.com/jinzhu/gorm/dialects/mssql" | ||||
| 	"github.com/jinzhu/gorm/tests" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	DB  *gorm.DB | ||||
| 	err error | ||||
| ) | ||||
| 
 | ||||
| func init() { | ||||
| 	dsn := "sqlserver://gorm:LoremIpsum86@localhost:9930?database=gorm" | ||||
| 	if os.Getenv("GORM_DSN") != "" { | ||||
| 		dsn = os.Getenv("GORM_DSN") | ||||
| 	} | ||||
| 
 | ||||
| 	if DB, err = gorm.Open(mssql.Open(dsn), &gorm.Config{}); err != nil { | ||||
| 		panic(fmt.Sprintf("failed to initialize database, got error %v", err)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestCURD(t *testing.T) { | ||||
| 	tests.RunTestsSuit(t, DB) | ||||
| } | ||||
| 
 | ||||
| func TestMigrate(t *testing.T) { | ||||
| 	tests.TestMigrate(t, DB) | ||||
| } | ||||
| @ -1,35 +0,0 @@ | ||||
| package mysql_test | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/jinzhu/gorm" | ||||
| 	"github.com/jinzhu/gorm/dialects/mysql" | ||||
| 	"github.com/jinzhu/gorm/tests" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	DB  *gorm.DB | ||||
| 	err error | ||||
| ) | ||||
| 
 | ||||
| func init() { | ||||
| 	dsn := "gorm:gorm@tcp(localhost:9910)/gorm?charset=utf8&parseTime=True&loc=Local" | ||||
| 	if os.Getenv("GORM_DSN") != "" { | ||||
| 		dsn = os.Getenv("GORM_DSN") | ||||
| 	} | ||||
| 
 | ||||
| 	if DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{}); err != nil { | ||||
| 		panic(fmt.Sprintf("failed to initialize database, got error %v", err)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestCURD(t *testing.T) { | ||||
| 	tests.RunTestsSuit(t, DB) | ||||
| } | ||||
| 
 | ||||
| func TestMigrate(t *testing.T) { | ||||
| 	tests.TestMigrate(t, DB) | ||||
| } | ||||
| @ -1,35 +0,0 @@ | ||||
| package postgres_test | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/jinzhu/gorm" | ||||
| 	"github.com/jinzhu/gorm/dialects/postgres" | ||||
| 	"github.com/jinzhu/gorm/tests" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	DB  *gorm.DB | ||||
| 	err error | ||||
| ) | ||||
| 
 | ||||
| func init() { | ||||
| 	dsn := "user=gorm password=gorm DB.name=gorm port=9920 sslmode=disable TimeZone=Asia/Shanghai" | ||||
| 	if os.Getenv("GORM_DSN") != "" { | ||||
| 		dsn = os.Getenv("GORM_DSN") | ||||
| 	} | ||||
| 
 | ||||
| 	if DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{}); err != nil { | ||||
| 		panic(fmt.Sprintf("failed to initialize database, got error %v", err)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestCURD(t *testing.T) { | ||||
| 	tests.RunTestsSuit(t, DB) | ||||
| } | ||||
| 
 | ||||
| func TestMigrate(t *testing.T) { | ||||
| 	tests.TestMigrate(t, DB) | ||||
| } | ||||
| @ -1,31 +0,0 @@ | ||||
| package sqlite_test | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| 	"path/filepath" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/jinzhu/gorm" | ||||
| 	"github.com/jinzhu/gorm/dialects/sqlite" | ||||
| 	"github.com/jinzhu/gorm/tests" | ||||
| ) | ||||
| 
 | ||||
| var ( | ||||
| 	DB  *gorm.DB | ||||
| 	err error | ||||
| ) | ||||
| 
 | ||||
| func init() { | ||||
| 	if DB, err = gorm.Open(sqlite.Open(filepath.Join(os.TempDir(), "gorm.db")), &gorm.Config{}); err != nil { | ||||
| 		panic(fmt.Sprintf("failed to initialize database, got error %v", err)) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestCURD(t *testing.T) { | ||||
| 	tests.RunTestsSuit(t, DB) | ||||
| } | ||||
| 
 | ||||
| func TestMigrate(t *testing.T) { | ||||
| 	tests.TestMigrate(t, DB) | ||||
| } | ||||
							
								
								
									
										4
									
								
								gorm.go
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								gorm.go
									
									
									
									
									
								
							| @ -189,3 +189,7 @@ func (db *DB) getInstance() *DB { | ||||
| 
 | ||||
| 	return db | ||||
| } | ||||
| 
 | ||||
| func Expr(expr string, args ...interface{}) clause.Expr { | ||||
| 	return clause.Expr{SQL: expr, Vars: args} | ||||
| } | ||||
|  | ||||
| @ -19,7 +19,7 @@ func TestFieldValuerAndSetter(t *testing.T) { | ||||
| 			Model: gorm.Model{ | ||||
| 				ID:        10, | ||||
| 				CreatedAt: time.Now(), | ||||
| 				DeletedAt: tests.Now(), | ||||
| 				DeletedAt: gorm.DeletedAt{Time: time.Now(), Valid: true}, | ||||
| 			}, | ||||
| 			Name:     "valuer_and_setter", | ||||
| 			Age:      18, | ||||
| @ -46,7 +46,7 @@ func TestFieldValuerAndSetter(t *testing.T) { | ||||
| 		"name":       "valuer_and_setter_2", | ||||
| 		"id":         2, | ||||
| 		"created_at": time.Now(), | ||||
| 		"deleted_at": tests.Now(), | ||||
| 		"deleted_at": time.Now(), | ||||
| 		"age":        20, | ||||
| 		"birthday":   time.Now(), | ||||
| 		"active":     false, | ||||
| @ -89,7 +89,7 @@ func TestPointerFieldValuerAndSetter(t *testing.T) { | ||||
| 			Model: &gorm.Model{ | ||||
| 				ID:        10, | ||||
| 				CreatedAt: time.Now(), | ||||
| 				DeletedAt: tests.Now(), | ||||
| 				DeletedAt: gorm.DeletedAt{Time: time.Now(), Valid: true}, | ||||
| 			}, | ||||
| 			Name:     &name, | ||||
| 			Age:      &age, | ||||
| @ -116,7 +116,7 @@ func TestPointerFieldValuerAndSetter(t *testing.T) { | ||||
| 		"name":       "valuer_and_setter_2", | ||||
| 		"id":         2, | ||||
| 		"created_at": time.Now(), | ||||
| 		"deleted_at": tests.Now(), | ||||
| 		"deleted_at": time.Now(), | ||||
| 		"age":        20, | ||||
| 		"birthday":   time.Now(), | ||||
| 		"active":     false, | ||||
|  | ||||
| @ -9,16 +9,8 @@ for dialect in "${dialects[@]}" ; do | ||||
|   then | ||||
|     if [ "$GORM_VERBOSE" = "" ] | ||||
|     then | ||||
|       cd dialects/${dialect} | ||||
|       DEBUG=false GORM_DIALECT=${dialect} go test -race ./... | ||||
|       cd ../.. | ||||
| 
 | ||||
|       DEBUG=false GORM_DIALECT=${dialect} go test -race ./... | ||||
|     else | ||||
|       cd dialects/${dialect} | ||||
|       DEBUG=false GORM_DIALECT=${dialect} go test -race ./... | ||||
|       cd ../.. | ||||
| 
 | ||||
|       DEBUG=false GORM_DIALECT=${dialect} go test -race -v ./... | ||||
|     fi | ||||
|   fi | ||||
|  | ||||
| @ -4,6 +4,7 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/jinzhu/gorm" | ||||
| 	. "github.com/jinzhu/gorm/tests" | ||||
| ) | ||||
| 
 | ||||
| @ -114,3 +115,47 @@ func TestUpdate(t *testing.T) { | ||||
| 		CheckUser(t, result4, *user) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func TestUpdates(t *testing.T) { | ||||
| 	var users = []*User{ | ||||
| 		GetUser("updates_01", Config{}), | ||||
| 		GetUser("updates_02", Config{}), | ||||
| 	} | ||||
| 
 | ||||
| 	DB.Create(&users) | ||||
| 	lastUpdatedAt := users[0].UpdatedAt | ||||
| 
 | ||||
| 	// update with map
 | ||||
| 	DB.Model(users[0]).Updates(map[string]interface{}{"name": "updates_01_newname", "age": 100}) | ||||
| 	if users[0].Name != "updates_01_newname" || users[0].Age != 100 { | ||||
| 		t.Errorf("Record should be updated also with map") | ||||
| 	} | ||||
| 
 | ||||
| 	if users[0].UpdatedAt.UnixNano() == lastUpdatedAt.UnixNano() { | ||||
| 		t.Errorf("User's updated at should be changed, but got %v, was %v", users[0].UpdatedAt.UnixNano(), lastUpdatedAt) | ||||
| 	} | ||||
| 
 | ||||
| 	// user2 should not be updated
 | ||||
| 	var user1, user2 User | ||||
| 	DB.First(&user1, users[0].ID) | ||||
| 	DB.First(&user2, users[1].ID) | ||||
| 	CheckUser(t, user1, *users[0]) | ||||
| 	CheckUser(t, user2, *users[1]) | ||||
| 
 | ||||
| 	// update with struct
 | ||||
| 	DB.Table("users").Where("name in ?", []string{users[1].Name}).Updates(User{Name: "updates_02_newname"}) | ||||
| 
 | ||||
| 	var user3 User | ||||
| 	if DB.First(&user3, "name = ?", "updates_02_newname").RecordNotFound() { | ||||
| 		t.Errorf("User2's name should be updated") | ||||
| 	} | ||||
| 	AssertEqual(t, user2.UpdatedAt, user3.UpdatedAt) | ||||
| 
 | ||||
| 	// update with gorm exprs
 | ||||
| 	DB.Model(&user3).Updates(map[string]interface{}{"age": gorm.Expr("age + ?", 100)}) | ||||
| 	var user4 User | ||||
| 	DB.First(&user4, user3.ID) | ||||
| 
 | ||||
| 	user3.Age += 100 | ||||
| 	AssertEqual(t, user4.UpdatedAt, user3.UpdatedAt) | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinzhu
						Jinzhu