115 lines
2.4 KiB
Go
115 lines
2.4 KiB
Go
package orm
|
|
|
|
import (
|
|
"github.com/stretchr/testify/assert"
|
|
"testing"
|
|
)
|
|
|
|
func save1(t assert.TestingT, e *Engine) {
|
|
u := author(t)
|
|
err := e.Model(&user{}).Create(&u)
|
|
assert.Nil(t, err)
|
|
f := friend(t)
|
|
err = e.Model(&user{}).Create(&f)
|
|
assert.Nil(t, err)
|
|
assert.NotZero(t, f.ID)
|
|
oldFavid := u.Favs.ID
|
|
u.Favs.Authors = append(u.Favs.Authors, f)
|
|
err = e.Model(&user{}).Save(&u)
|
|
assert.Nil(t, err)
|
|
assert.NotZero(t, u.Favs.ID)
|
|
assert.Equal(t, oldFavid, u.Favs.ID)
|
|
}
|
|
|
|
func save2(t assert.TestingT, e *Engine) {
|
|
insertBands(t, e)
|
|
u := author(t)
|
|
err := e.Model(&user{}).Create(&u)
|
|
assert.Nil(t, err)
|
|
assert.NotZero(t, u.Favs.ID)
|
|
s := iti_multi(u)
|
|
err = e.Model(&story{}).Save(s)
|
|
assert.Nil(t, err)
|
|
assert.NotZero(t, s.ID)
|
|
checkChapters(t, s)
|
|
|
|
s.Downloads = s.Downloads + 1
|
|
err = e.Model(&story{}).Save(s)
|
|
assert.Nil(t, err)
|
|
var ns story
|
|
err = e.Model(&story{}).Where("ID = ?", s.ID).Find(&ns)
|
|
assert.Nil(t, err)
|
|
assert.NotZero(t, ns.ID)
|
|
assert.NotZero(t, ns.Title)
|
|
assert.Equal(t, ns.Downloads, s.Downloads)
|
|
}
|
|
|
|
func updateRaw1(t assert.TestingT, e *Engine) {
|
|
insertBands(t, e)
|
|
u := author(t)
|
|
err := e.Model(&user{}).Create(&u)
|
|
assert.Nil(t, err)
|
|
|
|
s1 := iti_multi(u)
|
|
err = e.Model(&story{}).Save(s1)
|
|
assert.Nil(t, err)
|
|
assert.NotZero(t, s1.ID)
|
|
checkChapters(t, s1)
|
|
|
|
s2 := iti_single(u)
|
|
err = e.Model(&story{}).Save(s2)
|
|
assert.Nil(t, err)
|
|
assert.NotZero(t, s2.ID)
|
|
checkChapters(t, s2)
|
|
|
|
umap := make(map[string]any)
|
|
umap["Characters"] = `array_remove(characters, 'Brian Tatler')`
|
|
ra, err := e.Model(&chapter{}).WhereRaw("1 = ?", 1).UpdateRaw(umap)
|
|
assert.NotZero(t, ra)
|
|
assert.Nil(t, err)
|
|
|
|
stories := make([]story, 0)
|
|
err = e.Model(&story{}).Populate(PopulateAll, "Chapters.Bands").Find(&stories)
|
|
assert.Nil(t, err)
|
|
assert.NotEmpty(t, stories)
|
|
for _, ss := range stories {
|
|
checkChapters(t, &ss)
|
|
for _, c := range ss.Chapters {
|
|
steppedInShit := false
|
|
for _, b := range c.Characters {
|
|
if b == "Brian Tatler" {
|
|
steppedInShit = true
|
|
break
|
|
}
|
|
}
|
|
assert.False(t, steppedInShit)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSave1(t *testing.T) {
|
|
e := initTest(t)
|
|
save1(t, e)
|
|
e.Disconnect()
|
|
}
|
|
|
|
func TestSave2(t *testing.T) {
|
|
e := initTest(t)
|
|
save2(t, e)
|
|
e.Disconnect()
|
|
}
|
|
|
|
func TestUpdateRaw1(t *testing.T) {
|
|
e := initTest(t)
|
|
updateRaw1(t, e)
|
|
e.Disconnect()
|
|
}
|
|
func BenchmarkSave(b *testing.B) {
|
|
b.Run("Save-1", bench(save1))
|
|
b.Run("Save-2", bench(save2))
|
|
}
|
|
|
|
func BenchmarkUpdateRaw(b *testing.B) {
|
|
bench(updateRaw1)(b)
|
|
}
|