Skip to content

Commit a83001f

Browse files
Add tests for embedded struct (#27)
* Add tests for embedded struct * Use UserWithAddress struct instead if User struct in embedded_struct_test.go
1 parent 664773c commit a83001f

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

tests/embedded_struct_test.go

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,3 +326,60 @@ 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 UserWithAddress struct {
336+
ID uint
337+
Address Address `gorm:"embedded"`
338+
}
339+
340+
DB.Migrator().DropTable(&UserWithAddress{})
341+
err := DB.Migrator().AutoMigrate(&UserWithAddress{})
342+
tests.AssertEqual(t, err, nil)
343+
344+
user := UserWithAddress{}
345+
err = DB.Save(&user).Error
346+
tests.AssertEqual(t, err, nil)
347+
348+
var loaded UserWithAddress
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 UserWithAddress struct {
363+
ID uint
364+
Address Address `gorm:"embedded"`
365+
}
366+
367+
DB.Migrator().DropTable(&UserWithAddress{})
368+
err := DB.Migrator().AutoMigrate(&UserWithAddress{})
369+
tests.AssertEqual(t, err, nil)
370+
371+
user := UserWithAddress{Address: Address{City: "Austin", State: "TX"}}
372+
err = DB.Save(&user).Error
373+
tests.AssertEqual(t, err, nil)
374+
375+
err = DB.Model(&user).Updates(UserWithAddress{Address: Address{City: "Houston"}}).Error
376+
tests.AssertEqual(t, err, nil)
377+
378+
var loaded UserWithAddress
379+
err = DB.First(&loaded, user.ID).Error
380+
tests.AssertEqual(t, err, nil)
381+
382+
if loaded.Address.City != "Houston" {
383+
t.Errorf("embedded field not updated: expected Houston, got %s", loaded.Address.City)
384+
}
385+
}

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)