2014-07-29 06:59:13 +04:00
|
|
|
package gorm_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"reflect"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestCreate(t *testing.T) {
|
2014-07-29 08:32:58 +04:00
|
|
|
float := 35.03554004971999
|
|
|
|
user := User{Name: "CreateUser", Age: 18, Birthday: time.Now(), UserNum: Num(111), PasswordHash: []byte{'f', 'a', 'k', '4'}, Latitude: float}
|
2014-07-29 06:59:13 +04:00
|
|
|
|
2014-08-28 11:33:43 +04:00
|
|
|
if !DB.NewRecord(user) || !DB.NewRecord(&user) {
|
2014-07-29 06:59:13 +04:00
|
|
|
t.Error("User should be new record before create")
|
|
|
|
}
|
|
|
|
|
2014-08-28 11:33:43 +04:00
|
|
|
if count := DB.Save(&user).RowsAffected; count != 1 {
|
2014-07-29 06:59:13 +04:00
|
|
|
t.Error("There should be one record be affected when create record")
|
|
|
|
}
|
|
|
|
|
2014-08-28 11:33:43 +04:00
|
|
|
if DB.NewRecord(user) || DB.NewRecord(&user) {
|
2014-07-29 06:59:13 +04:00
|
|
|
t.Error("User should not new record after save")
|
|
|
|
}
|
|
|
|
|
|
|
|
var newUser User
|
2014-08-28 11:33:43 +04:00
|
|
|
DB.First(&newUser, user.Id)
|
2014-07-29 06:59:13 +04:00
|
|
|
|
|
|
|
if !reflect.DeepEqual(newUser.PasswordHash, []byte{'f', 'a', 'k', '4'}) {
|
|
|
|
t.Errorf("User's PasswordHash should be saved ([]byte)")
|
|
|
|
}
|
|
|
|
|
|
|
|
if newUser.Age != 18 {
|
|
|
|
t.Errorf("User's Age should be saved (int)")
|
|
|
|
}
|
|
|
|
|
|
|
|
if newUser.UserNum != Num(111) {
|
|
|
|
t.Errorf("User's UserNum should be saved (custom type)")
|
|
|
|
}
|
2014-07-29 08:32:58 +04:00
|
|
|
|
|
|
|
if newUser.Latitude != float {
|
|
|
|
t.Errorf("Float64 should not be changed after save")
|
|
|
|
}
|
|
|
|
|
|
|
|
if user.CreatedAt.IsZero() {
|
|
|
|
t.Errorf("Should have created_at after create")
|
|
|
|
}
|
|
|
|
|
|
|
|
if newUser.CreatedAt.IsZero() {
|
|
|
|
t.Errorf("Should have created_at after create")
|
|
|
|
}
|
|
|
|
|
2014-08-28 11:33:43 +04:00
|
|
|
DB.Model(user).Update("name", "create_user_new_name")
|
|
|
|
DB.First(&user, user.Id)
|
2014-07-29 08:32:58 +04:00
|
|
|
if user.CreatedAt != newUser.CreatedAt {
|
|
|
|
t.Errorf("CreatedAt should not be changed after update")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-07-29 14:21:36 +04:00
|
|
|
func TestCreateWithNoStdPrimaryKey(t *testing.T) {
|
|
|
|
animal := Animal{Name: "Ferdinand"}
|
2014-08-28 11:33:43 +04:00
|
|
|
if DB.Save(&animal).Error != nil {
|
2014-07-29 14:21:36 +04:00
|
|
|
t.Errorf("No error should happen when create an record without std primary key")
|
|
|
|
}
|
|
|
|
|
|
|
|
if animal.Counter == 0 {
|
|
|
|
t.Errorf("No std primary key should be filled value after create")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-07-29 08:32:58 +04:00
|
|
|
func TestAnonymousScanner(t *testing.T) {
|
|
|
|
user := User{Name: "anonymous_scanner", Role: Role{Name: "admin"}}
|
2014-08-28 11:33:43 +04:00
|
|
|
DB.Save(&user)
|
2014-07-29 08:32:58 +04:00
|
|
|
|
|
|
|
var user2 User
|
2014-08-28 11:33:43 +04:00
|
|
|
DB.First(&user2, "name = ?", "anonymous_scanner")
|
2014-07-29 08:32:58 +04:00
|
|
|
if user2.Role.Name != "admin" {
|
|
|
|
t.Errorf("Should be able to get anonymous scanner")
|
|
|
|
}
|
|
|
|
|
|
|
|
if !user2.IsAdmin() {
|
|
|
|
t.Errorf("Should be able to get anonymous scanner")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestAnonymousField(t *testing.T) {
|
|
|
|
user := User{Name: "anonymous_field", Company: Company{Name: "company"}}
|
2014-08-28 11:33:43 +04:00
|
|
|
DB.Save(&user)
|
2014-07-29 08:32:58 +04:00
|
|
|
|
|
|
|
var user2 User
|
2014-08-28 11:33:43 +04:00
|
|
|
DB.First(&user2, "name = ?", "anonymous_field")
|
|
|
|
DB.Model(&user2).Related(&user2.Company)
|
2014-07-29 08:32:58 +04:00
|
|
|
if user2.Company.Name != "company" {
|
|
|
|
t.Errorf("Should be able to get anonymous field")
|
|
|
|
}
|
2014-07-29 06:59:13 +04:00
|
|
|
}
|