diamond-orm/save_test.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)
}