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