Add test for anonymous field

This commit is contained in:
Jinzhu 2014-03-26 08:26:45 +08:00
parent 6d48c9357d
commit d7d9e24e1e
2 changed files with 28 additions and 4 deletions

View File

@ -35,6 +35,11 @@ func (i *Num) Scan(src interface{}) error {
return nil
}
type Role struct {
Id int64
Name string
}
type User struct {
Id int64 // Id: Primary key
Age int64
@ -53,9 +58,11 @@ type User struct {
When time.Time
CreditCard CreditCard
Latitude float64
PasswordHash []byte
IgnoreMe int64 `sql:"-"`
IgnoreStringSlice []string `sql:"-"`
Role
RoleId int64
PasswordHash []byte
IgnoreMe int64 `sql:"-"`
IgnoreStringSlice []string `sql:"-"`
}
type CreditCard struct {
@ -143,6 +150,7 @@ func init() {
db.Exec("drop table emails;")
db.Exec("drop table addresses")
db.Exec("drop table credit_cards")
db.Exec("drop table roles")
if err = db.CreateTable(&User{}).Error; err != nil {
panic(fmt.Sprintf("No error should happen when create table, but got %+v", err))
@ -164,6 +172,10 @@ func init() {
panic(fmt.Sprintf("No error should happen when create table, but got %+v", err))
}
if err = db.AutoMigrate(Role{}).Error; err != nil {
panic(fmt.Sprintf("No error should happen when create table, but got %+v", err))
}
var shortForm = "2006-01-02 15:04:05"
t1, _ = time.Parse(shortForm, "2000-10-27 12:02:40")
t2, _ = time.Parse(shortForm, "2002-01-01 00:00:00")
@ -1729,6 +1741,18 @@ func TestHaving(t *testing.T) {
}
}
func TestAnonymousField(t *testing.T) {
user := User{Name: "anonymous_field", Role: Role{Name: "admin"}}
db.Save(&user)
var user2 User
db.First(&user2, "name = ?", "anonymous_field")
db.Model(&user2).Related(&user2.Role)
if user2.Role.Name != "admin" {
t.Errorf("Should be able to get anonymous field")
}
}
func TestExecRawSql(t *testing.T) {
db.Exec("update users set name=? where name in (?)", "jinzhu", []string{"1", "2", "3"})
if db.Where("name in (?)", []string{"1", "2", "3"}).First(&User{}).Error != gorm.RecordNotFound {

View File

@ -227,7 +227,7 @@ func (scope *Scope) Fields() []*Field {
scopeTyp := indirectValue.Type()
for i := 0; i < scopeTyp.NumField(); i++ {
fieldStruct := scopeTyp.Field(i)
if fieldStruct.Anonymous || !ast.IsExported(fieldStruct.Name) {
if !ast.IsExported(fieldStruct.Name) {
continue
}