add proper tests ✅
This commit is contained in:
parent
cdcf886454
commit
d39dfb948b
27
create_test.go
Normal file
27
create_test.go
Normal file
@ -0,0 +1,27 @@
|
||||
package orm
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestCreate1(t *testing.T) {
|
||||
e := initTest(t)
|
||||
u := author()
|
||||
err := e.Model(&user{}).Create(&u)
|
||||
assert.Nil(t, err)
|
||||
assert.NotZero(t, u.Favs.ID)
|
||||
}
|
||||
|
||||
func TestCreate2(t *testing.T) {
|
||||
e := initTest(t)
|
||||
u := friend()
|
||||
err := e.Model(&user{}).Create(&u)
|
||||
assert.Nil(t, err)
|
||||
assert.NotZero(t, u.Favs.ID)
|
||||
}
|
||||
|
||||
func TestCreate3(t *testing.T) {
|
||||
e := initTest(t)
|
||||
insertBands(t, e)
|
||||
}
|
126
find_test.go
Normal file
126
find_test.go
Normal file
@ -0,0 +1,126 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
91
save_test.go
Normal file
91
save_test.go
Normal file
@ -0,0 +1,91 @@
|
||||
package orm
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestSave1(t *testing.T) {
|
||||
e := initTest(t)
|
||||
u := author()
|
||||
err := e.Model(&user{}).Create(&u)
|
||||
assert.Nil(t, err)
|
||||
f := friend()
|
||||
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 TestSave2(t *testing.T) {
|
||||
e := initTest(t)
|
||||
insertBands(t, e)
|
||||
u := author()
|
||||
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 TestUpdateRaw1(t *testing.T) {
|
||||
e := initTest(t)
|
||||
insertBands(t, e)
|
||||
u := author()
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
28
testing.go
28
testing.go
@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"math/rand/v2"
|
||||
"os"
|
||||
"slices"
|
||||
"strings"
|
||||
"testing"
|
||||
@ -261,3 +262,30 @@ var bodom = band{
|
||||
"Alexander Kuoppala",
|
||||
},
|
||||
}
|
||||
|
||||
func initTest(t *testing.T) *Engine {
|
||||
e, err := Open("postgres://testbed_user:123@localhost/real_test_db", &Config{
|
||||
LogLevel: LevelQuery,
|
||||
LogTo: os.Stderr,
|
||||
})
|
||||
assert.Nil(t, err)
|
||||
e.Models(user{}, story{}, band{}, role{})
|
||||
err = e.MigrateDropping()
|
||||
assert.Nil(t, err)
|
||||
return e
|
||||
}
|
||||
|
||||
func insertBands(t *testing.T, e *Engine) {
|
||||
err := e.Model(&band{}).Create(&bodom)
|
||||
assert.Nil(t, err)
|
||||
err = e.Model(&band{}).Create(&diamondHead)
|
||||
assert.Nil(t, err)
|
||||
}
|
||||
|
||||
func checkChapters(t *testing.T, s *story) {
|
||||
for _, c := range s.Chapters {
|
||||
assert.NotZero(t, c.ChapterID)
|
||||
assert.NotZero(t, c.Text)
|
||||
assert.NotZero(t, c.Posted)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user