From a58159e00e2082c4ca0f785f9e9544921219d7b4 Mon Sep 17 00:00:00 2001 From: Edward McFarlane Date: Mon, 5 Dec 2022 10:46:09 +0000 Subject: [PATCH] Add test case for embedded value selects --- tests/embedded_struct_test.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/tests/embedded_struct_test.go b/tests/embedded_struct_test.go index e309d06c..b2957f3a 100644 --- a/tests/embedded_struct_test.go +++ b/tests/embedded_struct_test.go @@ -36,7 +36,7 @@ func TestEmbeddedStruct(t *testing.T) { type EngadgetPost struct { BasePost BasePost `gorm:"Embedded"` - Author Author `gorm:"Embedded;EmbeddedPrefix:author_"` // Embedded struct + Author *Author `gorm:"Embedded;EmbeddedPrefix:author_"` // Embedded struct ImageUrl string } @@ -74,13 +74,27 @@ func TestEmbeddedStruct(t *testing.T) { t.Errorf("embedded struct's value should be scanned correctly") } - DB.Save(&EngadgetPost{BasePost: BasePost{Title: "engadget_news"}}) + DB.Save(&EngadgetPost{BasePost: BasePost{Title: "engadget_news"}, Author: &Author{Name: "Edward"}}) + DB.Save(&EngadgetPost{BasePost: BasePost{Title: "engadget_article"}, Author: &Author{Name: "George"}}) var egNews EngadgetPost if err := DB.First(&egNews, "title = ?", "engadget_news").Error; err != nil { t.Errorf("no error should happen when query with embedded struct, but got %v", err) } else if egNews.BasePost.Title != "engadget_news" { t.Errorf("embedded struct's value should be scanned correctly") } + + var egPosts []EngadgetPost + if err := DB.Order("author_name asc").Find(&egPosts).Error; err != nil { + t.Fatalf("no error should happen when query with embedded struct, but got %v", err) + } + expectAuthors := []string{"Edward", "George"} + for i, post := range egPosts { + t.Log(i, post) + if want := expectAuthors[i]; post.Author.Name != want { + t.Errorf("expected author %s got %s", post.Author.Name, want) + } + } + } func TestEmbeddedPointerTypeStruct(t *testing.T) {