diff --git a/tests/embedded_struct_test.go b/tests/embedded_struct_test.go index 56bc858..cb0eda3 100644 --- a/tests/embedded_struct_test.go +++ b/tests/embedded_struct_test.go @@ -326,3 +326,60 @@ func TestEmbeddedTagSetting(t *testing.T) { t.Errorf("embedded struct's primary field should be rewritten") } } + +func TestZeroValueEmbeddedStruct(t *testing.T) { + type Address struct { + City string + State string + } + type UserWithAddress struct { + ID uint + Address Address `gorm:"embedded"` + } + + DB.Migrator().DropTable(&UserWithAddress{}) + err := DB.Migrator().AutoMigrate(&UserWithAddress{}) + tests.AssertEqual(t, err, nil) + + user := UserWithAddress{} + err = DB.Save(&user).Error + tests.AssertEqual(t, err, nil) + + var loaded UserWithAddress + err = DB.First(&loaded, user.ID).Error + tests.AssertEqual(t, err, nil) + + if loaded.Address.City != "" || loaded.Address.State != "" { + t.Errorf("expected zero values for embedded struct fields, got: %+v", loaded.Address) + } +} + +func TestUpdateEmbeddedFields(t *testing.T) { + type Address struct { + City string + State string + } + type UserWithAddress struct { + ID uint + Address Address `gorm:"embedded"` + } + + DB.Migrator().DropTable(&UserWithAddress{}) + err := DB.Migrator().AutoMigrate(&UserWithAddress{}) + tests.AssertEqual(t, err, nil) + + user := UserWithAddress{Address: Address{City: "Austin", State: "TX"}} + err = DB.Save(&user).Error + tests.AssertEqual(t, err, nil) + + err = DB.Model(&user).Updates(UserWithAddress{Address: Address{City: "Houston"}}).Error + tests.AssertEqual(t, err, nil) + + var loaded UserWithAddress + err = DB.First(&loaded, user.ID).Error + tests.AssertEqual(t, err, nil) + + if loaded.Address.City != "Houston" { + t.Errorf("embedded field not updated: expected Houston, got %s", loaded.Address.City) + } +} diff --git a/tests/passed-tests.txt b/tests/passed-tests.txt index 08e05ee..72409bf 100644 --- a/tests/passed-tests.txt +++ b/tests/passed-tests.txt @@ -101,6 +101,8 @@ TestEmbeddedPointerTypeStruct TestEmbeddedScanValuer TestEmbeddedRelations TestEmbeddedTagSetting +TestZeroValueEmbeddedStruct +TestUpdateEmbeddedFields TestDialectorWithErrorTranslatorSupport TestSupportedDialectorWithErrDuplicatedKey TestSupportedDialectorWithErrForeignKeyViolated