package orm import ( "github.com/stretchr/testify/assert" "testing" ) func storyBase(e *Engine, t *testing.T, u user, additionalPopulateFields ...string) *story { s := iti_multi(u) err := e.Model(&story{}).Create(s) assert.Nil(t, err) assert.NotZero(t, s.ID) checkChapters(t, s) var ns story fields := []string{ PopulateAll, } fields = append(fields, additionalPopulateFields...) err = e.Model(&story{}).Where("ID = ?", s.ID).Populate(fields...).Find(&ns) assert.Nil(t, err) assert.NotZero(t, ns.ID) assert.NotZero(t, ns.Author.ID) assert.NotZero(t, ns.Author.Username) assert.Equal(t, len(s.Chapters), len(ns.Chapters)) checkChapters(t, &ns) return &ns } func TestFind(t *testing.T) { e := initTest(t) u := author() err := e.Model(&user{}).Create(&u) assert.Nil(t, err) var nu user err = e.Model(&user{}).Where("ID = ?", u.ID).Find(&nu) assert.Nil(t, err) assert.NotZero(t, nu.ID) assert.NotZero(t, nu.Username) } func TestJoin1(t *testing.T) { e := initTest(t) u := author() err := e.Model(&user{}).Create(&u) assert.Nil(t, err) insertBands(t, e) for range 7 { storyBase(e, t, u) } var withBodom []story err = e.Model(&story{}). Join("Chapters.Bands"). In("Chapters.Bands.ID", bodom.ID). Find(&withBodom) assert.Nil(t, err) assert.NotEmpty(t, withBodom) } func TestIn(t *testing.T) { e := initTest(t) u := author() err := e.Model(&user{}).Create(&u) assert.Nil(t, err) insertBands(t, e) for range 10 { storyBase(e, t, u) } var threes []story err = e.Model(&story{}). In("ID", 1, 2, 3). Find(&threes) assert.Nil(t, err) assert.Equal(t, 3, len(threes)) } func TestPopulateAll(t *testing.T) { e := initTest(t) insertBands(t, e) u := author() err := e.Model(&user{}).Create(&u) assert.Nil(t, err) storyBase(e, t, u) } func TestPopulateNested1(t *testing.T) { e := initTest(t) u := author() f := friend() err := e.Model(&user{}).Create(&f) assert.Nil(t, err) assert.NotZero(t, f.ID) err = e.Model(&user{}).Create(&u) assert.NotZero(t, u.Favs.ID) assert.Nil(t, err) u.Favs.Authors = append(u.Favs.Authors, f) err = e.Model(&user{}).Save(&u) assert.Nil(t, err) var nu user err = e.Model(&user{}). Populate(PopulateAll, "Favs.Authors"). Where("ID = ?", u.ID). Find(&nu) assert.Nil(t, err) assert.NotZero(t, nu.Favs.ID) assert.NotEmpty(t, nu.Favs.Authors) } func TestPopulateNested2(t *testing.T) { e := initTest(t) u := author() err := e.Model(&user{}).Create(&u) assert.Nil(t, err) insertBands(t, e) ns := storyBase(e, t, u, "Chapters.Bands") for _, c := range ns.Chapters { assert.NotEmpty(t, c.Bands) for _, b := range c.Bands { assert.NotZero(t, b.Name) assert.NotEmpty(t, b.Characters) } } }