From d39dfb948b1e96acd79cf7c0dd026ef06814ff22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=98=99=E2=97=A6=20The=20Tablet=20=E2=9D=80=20GamerGirla?= =?UTF-8?q?ndCo=20=E2=97=A6=E2=9D=A7?= Date: Mon, 14 Jul 2025 16:03:51 -0400 Subject: [PATCH] =?UTF-8?q?add=20proper=20tests=20=E2=9C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- create_test.go | 27 +++++++++++ find_test.go | 126 +++++++++++++++++++++++++++++++++++++++++++++++++ save_test.go | 91 +++++++++++++++++++++++++++++++++++ testing.go | 28 +++++++++++ 4 files changed, 272 insertions(+) create mode 100644 create_test.go create mode 100644 find_test.go create mode 100644 save_test.go diff --git a/create_test.go b/create_test.go new file mode 100644 index 0000000..b9d2b64 --- /dev/null +++ b/create_test.go @@ -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) +} diff --git a/find_test.go b/find_test.go new file mode 100644 index 0000000..38a7b1c --- /dev/null +++ b/find_test.go @@ -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) + } + } +} diff --git a/save_test.go b/save_test.go new file mode 100644 index 0000000..334bedf --- /dev/null +++ b/save_test.go @@ -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) + } + } +} diff --git a/testing.go b/testing.go index c9afd35..3ae4fe1 100644 --- a/testing.go +++ b/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) + } +}