diamond-orm/find_test.go

127 lines
2.7 KiB
Go

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)
}
}
}