package orm import ( "fmt" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo/options" "testing" "github.com/stretchr/testify/assert" ) func TestNew(t *testing.T) { initTest() doc := Create(&iti_single).(*story) assert.Equal(t, iti_single.Title, doc.Title) assert.Equal(t, iti_single.Chapters[0].Summary, doc.Chapters[0].Summary) } func TestSave(t *testing.T) { initTest() storyDoc := Create(iti_multi).(*story) lauthor := Create(author).(*user) storyDoc.Author = lauthor assert.Equal(t, storyDoc.Id(), int64(0)) assert.Equal(t, lauthor.ID, storyDoc.Author.ID) aerr := lauthor.Save() assert.Equal(t, nil, aerr) serr := storyDoc.Save() assert.Equal(t, nil, serr) assert.Less(t, int64(0), storyDoc.ID) assert.Less(t, int64(0), lauthor.ID) } func TestPopulate(t *testing.T) { initTest() bandDoc := Create(iti_single.Chapters[0].Bands[0]).(*band) storyDoc := Create(iti_single).(*story) author := Create(author).(*user) err := bandDoc.Save() assert.Equal(t, nil, err) storyDoc.Author = author err = storyDoc.Save() assert.Equal(t, nil, err) assert.Greater(t, storyDoc.ID, int64(0)) smodel := Create(story{}).(*story) q, err := smodel.FindByID(storyDoc.ID) assert.Equal(t, nil, err) assert.NotPanics(t, func() { foundDoc := &story{} q.Populate("Author", "Chapters.Bands").Exec(foundDoc) j, _ := q.JSON() fmt.Printf("%s\n", j) }) } func TestUpdate(t *testing.T) { initTest() nb := Create(band{ ID: 1, Name: "Metallica", Characters: []string{ "James Hetfield", "Lars Ulrich", "Kirk Hammett", "Cliff Burton", }, Locked: false, }).(*band) err := nb.Save() assert.Equal(t, nil, err) nb.Locked = true err = nb.Save() assert.Equal(t, nil, err) foundM := Create(band{}).(*band) q, err := foundM.FindByID(int64(1)) found := &band{} q.Exec(found) assert.Equal(t, nil, err) assert.Equal(t, int64(1), found.ID) assert.Equal(t, nil, err) assert.Equal(t, true, found.Locked) } func TestModel_FindAll(t *testing.T) { initTest() smodel := Create(story{}).(*story) query, err := smodel.FindAll(bson.M{}, options.Find()) assert.Equal(t, nil, err) final := make([]story, 0) query.Exec(&final) assert.Greater(t, len(final), 0) } func TestModel_PopulateMulti(t *testing.T) { initTest() smodel := Create(story{}).(*story) query, err := smodel.FindAll(bson.M{}, options.Find()) assert.Equal(t, nil, err) final := make([]story, 0) query.Populate("Author", "Chapters.Bands").Exec(&final) assert.Greater(t, len(final), 0) } func TestModel_Append(t *testing.T) { initTest() bmodel := Create(band{}).(*band) query, err := bmodel.FindByID(int64(1)) assert.Equal(t, nil, err) fin := &band{} query.Exec(fin) assert.Greater(t, fin.ID, int64(0)) err = bmodel.Append("Characters", "Robert Trujillo") assert.Equal(t, nil, err) err = bmodel.Save() assert.Equal(t, nil, err) fin = &band{} query, _ = bmodel.FindByID(int64(1)) query.Exec(fin) assert.Greater(t, len(fin.Characters), 4) }