package simpleorm_test import ( "os" "testing" simpleorm "git.gdulai.com/gdulai/simpleorm" "git.gdulai.com/gdulai/simpleorm/exec" log "gitlab.com/gdulai/simpleloglvl" ) func cleanUp(dbFile string, conn *simpleorm.DBConnection) { conn.Close() os.Remove(dbFile) } func TestSelectEmpty(t *testing.T) { // GIVEN conn := simpleorm.OpenConnection("sqlite3", "file:test.db") defer cleanUp("test.db", conn) orm := simpleorm.NewORM(Test{}, TestWithFk{}, TestWithFkAndFkId{}, TestWithCompositePk{}, TestWithCompositeFk{}) exec.ExecuteDDL(conn, orm) // WHEN selectExec, err := exec.CreateSelect[Test](orm, "") // THEN if err != nil { log.LogError("Failed to create select. %s", err) t.Fail() return } res, err := selectExec.Execute(conn) if err != nil { log.LogError("Select failure. %s", err) t.Fail() return } if len(res) > 0 { log.LogError("Expected empty result.") t.Fail() return } } func TestInsertAndSelectSingle(t *testing.T) { // GIVEN conn := simpleorm.OpenConnection("sqlite3", "file:test.db") defer cleanUp("test.db", conn) orm := simpleorm.NewORM(Test{}, TestWithFk{}, TestWithFkAndFkId{}, TestWithCompositePk{}, TestWithCompositeFk{}) exec.ExecuteDDL(conn, orm) testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"} insertExec, err := exec.NewInsert(orm, testObj) if err != nil { log.LogError("TestInsertAndSelectSingle setup failed: %s", err) t.Fail() return } selectExec, err := exec.CreateSelect[Test](orm, "") if err != nil { log.LogError("TestInsertAndSelectSingle setup failed: %s", err) t.Fail() return } // WHEN _, err = insertExec.Execute(conn) if err != nil { log.LogError("TestInsertAndSelectSingle insert failed: %s", err) t.Fail() return } res, err := selectExec.Execute(conn) // THEN if err != nil { log.LogError("TestInsertAndSelectSingle failure. %s", err) t.Fail() return } if len(res) != 1 { log.LogError("TestInsertAndSelectSingle test failed. Expected: 1, Actual: %s", len(res)) t.Fail() return } singleRes := res[0] if singleRes.ID != 1 || singleRes.Int64Field != 54 || singleRes.IntField != 12 || singleRes.StringField != "asdf" { log.LogError("TestInsertAndSelectSingle invalid result. Expected: %s, Actual: %s", testObj, singleRes) t.Fail() } } func TestInsertMultipleAndSelectWithParam(t *testing.T) { // GIVEN conn := simpleorm.OpenConnection("sqlite3", "file:test.db") defer cleanUp("test.db", conn) orm := simpleorm.NewORM(Test{}, TestWithFk{}, TestWithFkAndFkId{}, TestWithCompositePk{}, TestWithCompositeFk{}) exec.ExecuteDDL(conn, orm) testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"} testObjSecond := Test{Int64Field: 12, IntField: 54, StringField: "fdsa"} insertExec, err := exec.NewInsert(orm, testObj) if err != nil { log.LogError("TestInsertMultipleAndSelectWithParam setup failed: %s", err) t.Fail() return } insertSecond, err := exec.NewInsert(orm, testObjSecond) if err != nil { log.LogError("TestInsertMultipleAndSelectWithParam setup failed: %s", err) t.Fail() return } selectExec, err := exec.CreateSelect[Test](orm, "string_field = ?", "fdsa") if err != nil { log.LogError("TestInsertMultipleAndSelectWithParam setup failed: %s", err) t.Fail() return } // WHEN _, err = insertExec.Execute(conn) if err != nil { log.LogError("TestInsertMultipleAndSelectWithParam first insert failed: %s", err) t.Fail() return } _, err = insertSecond.Execute(conn) if err != nil { log.LogError("TestInsertMultipleAndSelectWithParam second insert failed: %s", err) t.Fail() return } res, err := selectExec.Execute(conn) // THEN if err != nil { log.LogError("TestInsertMultipleAndSelectWithParam failure. %s", err) t.Fail() return } if len(res) != 1 { log.LogError(" TestInsertMultipleAndSelectWithParam test failed. Expected: 1, Actual: %s", len(res)) t.Fail() return } singleRes := res[0] if singleRes.ID != 2 || singleRes.Int64Field != 12 || singleRes.IntField != 54 || singleRes.StringField != "fdsa" { log.LogError("TestInsertMultipleAndSelectWithParam invalid result. Expected: %s, Actual: %s", testObjSecond, singleRes) t.Fail() return } } func TestInsertAndUpdate(t *testing.T) { // GIVEN conn := simpleorm.OpenConnection("sqlite3", "file:test.db") defer cleanUp("test.db", conn) orm := simpleorm.NewORM(Test{}, TestWithFk{}, TestWithFkAndFkId{}, TestWithCompositePk{}, TestWithCompositeFk{}) exec.ExecuteDDL(conn, orm) testObj := Test{Int64Field: 54, IntField: 12, StringField: "asdf"} insertExec, err := exec.NewInsert(orm, testObj) if err != nil { log.LogError("TestInsertAndUpdate setup failed: %s", err) t.Fail() return } selectExec, err := exec.CreateSelect[Test](orm, "string_field = ?", "asdf") if err != nil { log.LogError("TestInsertMultipleAndSelectWithParam setup failed: %s", err) t.Fail() return } // WHEN _, err = insertExec.Execute(conn) if err != nil { log.LogError("TestInsertAndUpdate insert failed: %s", err) t.Fail() return } res, err := selectExec.Execute(conn) if err != nil { log.LogError("TestInsertAndUpdate re-select failed: %s", err) t.Fail() return } testObj = res[0] testObj.IntField = 42069 testObj.Int64Field = 69420 updateExec, err := exec.NewUpdate(orm, testObj) if err != nil { log.LogError("TestInsertAndUpdate setup failed: %s", err) t.Fail() return } _, err = updateExec.Execute(conn) res, selectErr := selectExec.Execute(conn) // THEN if err != nil { log.LogError("TestInsertAndUpdate update failure. %s", err) t.Fail() return } if selectErr != nil { log.LogError("TestInsertAndUpdate select failure. %s", err) t.Fail() return } if len(res) != 1 { log.LogError("TestInsertAndUpdate test failed. Expected: 1, Actual: %s", len(res)) t.Fail() return } singleRes := res[0] if singleRes.ID != 1 || singleRes.Int64Field != 69420 || singleRes.IntField != 42069 || singleRes.StringField != "asdf" { log.LogError("TestInsertAndUpdate invalid result. Expected: %s, Actual: %s", testObj, singleRes) t.Fail() } }