package tests import ( "apigo.cloud/git/apigo/gojs" "apigo.cloud/git/apigo/plugin" _ "apigo.cloud/git/apigo/plugins/db" _ "apigo.cloud/git/apigo/plugins/file" _ "apigo.cloud/git/apigo/plugins/redis" _ "github.com/mattn/go-sqlite3" "github.com/ssgo/u" "os" "path" "testing" ) func TestSql(t *testing.T) { rt := gojs.New(nil, nil) defer rt.Close() gojs.SetPluginsConfig(map[string]plugin.Config{ "db": { "default": "sqlite3://Test.db", }, }) defer func() { _ = os.Remove("Test.db") }() var r interface{} = false err, _ := rt.Exec(` TestTable = file.loadYaml('./TestDB.yml') out = db.make(TestTable) //console.info(...out) `) if err == nil { r, err, _ = rt.Run(` let r1 = db.insert('user', {name:'Tom'}) let r2 = db.replace('user', {name:'Kitty'}) let r3 = db.insert('user', {name:'Lucy'}) return r1.id + ',' + r2.id + ',' + r3.id + ' | ' + r1.changes + ',' + r2.changes + ',' + r3.changes `) } Test(t, "create and insert", r == "1,2,3 | 1,1,1", r, err) r, err, _ = rt.Run(` let r = db.fetch().update('user', {name:'Lucy Wang'}, 'id=?', 3) return r.changes `) Test(t, "update", u.Int(r) == 1, r, err) r, err, _ = rt.Run(` let r = db.fetch().delete('user', 'id=?', 2) return r.changes `) Test(t, "delete", u.Int(r) == 1, r, err) r, err, _ = rt.Run(` let r = db.fetch().query('select id,name from user where id > ?', 1) return r.result `) list := make([]struct { Id int Name string }, 0) u.Convert(r, &list) Test(t, "list", len(list) == 1 && list[0].Name == "Lucy Wang", r, err) rt.Exec("db.destroy()") } func TestDao(t *testing.T) { rdServer := StartRedis("16379") defer rdServer.Close() rt := gojs.New(nil, nil) defer rt.Close() gojs.SetPluginsConfig(map[string]plugin.Config{ "db": { "default": "sqlite3://Test.db", }, "redis": { "default": "redis://localhost:16379", }, }) defer func() { _ = os.Remove("Test.db") _ = os.Remove("er.html") _ = os.RemoveAll("Test") }() //_ = os.Remove("Test.db") var r interface{} = false err, _ := rt.Exec(` let TestDB = file.loadYaml('./TestDB.yml') out = db.make(TestDB) db.makeDao() // console.info(...out) `) daoCode := "" daoFile := path.Join("Test", "dao.js") daoExtFile := path.Join("Test", "dao_ext.js") _ = u.WriteFile(daoExtFile, ` _TestDao.user.getFirstUserName = function(){ let q = this.newQuery() let u = q.limit(1).fields('id,name').first() //logger.info(q.getSql()) return u.name } _TestDao.userItem.getFullName = function(){ return this.name+'('+this.id+')' } `) if u.FileExists(daoFile) { code, _ := u.ReadFile(daoFile) daoCode += code + "\n" } if u.FileExists(daoExtFile) { code, _ := u.ReadFile(daoExtFile) daoCode += code + "\n" } if err == nil { r, err, _ = rt.Run(daoCode + ` let dao = getTestDao() let r1 = dao.user.insert({name:'Tom'}) let r2 = dao.user.replace({name:'Kitty'}) //r3 = dao.user.insert({name:'Lucy'}) let u3 = dao.user.new({phone:'18612341234'}) u3.name = 'Lucy' let r3 = u3.save() return r1.id + ',' + r2.id + ',' + r3.id + ' | ' + r1.version + ',' + r2.version + ',' + r3.version `) } Test(t, "create and insert", r == "1,2,3 | 1,2,3", r, err) r, err, _ = rt.Run(daoCode + ` let item = getTestDao().user.get(1) return item.name `) Test(t, "get", r == "Tom", r, err) r, err, _ = rt.Run(daoCode + ` let u = getTestDao().user.getByPhone('1861234123') if(u!==null) return 'not null' u = getTestDao().user.getByPhone('18612341234') u.name = 'Lucy Wang' let r = u.save() return r.changes +','+ r.version `) Test(t, "update", r == "1,4", r, err) r, err, _ = rt.Run(daoCode + ` getTestDao() let r = getTestDao().user.disable(2) return r.changes `) Test(t, "disable", u.Int(r) == 1, r, err) r, err, _ = rt.Run(daoCode+` let q = getTestDao().user.newQuery() let list = q.where('id>?',1).list() return list `) list := make([]struct{ Id int Name string }, 0) u.Convert(r, &list) Test(t, "list", len(list) == 1 && list[0].Name == "Lucy Wang", r, err) r, err, _ = rt.Run(daoCode+` return getTestDao().user.getFirstUserName() `) Test(t, "table ext", r == "Tom", r, err) r, err, _ = rt.Run(daoCode+` return getTestDao().user.newQuery().list()[0].getFullName() `) Test(t, "item ext", r == "Tom(1)", r, err) r, err, _ = rt.Run(daoCode+` db.makeER(TestDB) let erStr = file.read('er.html') return erStr.match(/