Skip to content

Commit fd8295a

Browse files
Add tests for embedded struct
1 parent eb86661 commit fd8295a

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

tests/embedded_struct_test.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,3 +326,61 @@ func TestEmbeddedTagSetting(t *testing.T) {
326326
t.Errorf("embedded struct's primary field should be rewritten")
327327
}
328328
}
329+
330+
func TestZeroValueEmbeddedStruct(t *testing.T) {
331+
type Address struct {
332+
City string
333+
State string
334+
}
335+
type User struct {
336+
ID uint
337+
Address Address `gorm:"embedded"`
338+
}
339+
340+
DB.Migrator().DropTable(&User{})
341+
err := DB.Migrator().AutoMigrate(&User{})
342+
tests.AssertEqual(t, err, nil)
343+
344+
user := User{}
345+
err = DB.Save(&user).Error
346+
tests.AssertEqual(t, err, nil)
347+
348+
var loaded User
349+
err = DB.First(&loaded, user.ID).Error
350+
tests.AssertEqual(t, err, nil)
351+
352+
if loaded.Address.City != "" || loaded.Address.State != "" {
353+
t.Errorf("expected zero values for embedded struct fields, got: %+v", loaded.Address)
354+
}
355+
}
356+
357+
func TestUpdateEmbeddedFields(t *testing.T) {
358+
type Address struct {
359+
City string
360+
State string
361+
}
362+
type User struct {
363+
ID uint
364+
Address Address `gorm:"embedded"`
365+
}
366+
367+
DB.Migrator().DropTable(&User{})
368+
err := DB.Migrator().AutoMigrate(&User{})
369+
tests.AssertEqual(t, err, nil)
370+
371+
user := User{Address: Address{City: "Austin", State: "TX"}}
372+
err = DB.Save(&user).Error
373+
tests.AssertEqual(t, err, nil)
374+
375+
// Update embedded field only
376+
err = DB.Model(&user).Updates(User{Address: Address{City: "Houston"}}).Error
377+
tests.AssertEqual(t, err, nil)
378+
379+
var loaded User
380+
err = DB.First(&loaded, user.ID).Error
381+
tests.AssertEqual(t, err, nil)
382+
383+
if loaded.Address.City != "Houston" {
384+
t.Errorf("embedded field not updated: expected Houston, got %s", loaded.Address.City)
385+
}
386+
}

tests/passed-tests.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ TestEmbeddedPointerTypeStruct
101101
TestEmbeddedScanValuer
102102
TestEmbeddedRelations
103103
TestEmbeddedTagSetting
104+
TestZeroValueEmbeddedStruct
105+
TestUpdateEmbeddedFields
104106
TestDialectorWithErrorTranslatorSupport
105107
TestSupportedDialectorWithErrDuplicatedKey
106108
TestSupportedDialectorWithErrForeignKeyViolated

0 commit comments

Comments
 (0)