plugins/tests/db_test.go

191 lines
4.5 KiB
Go
Raw Permalink Normal View History

package tests
import (
"apigo.cloud/git/apigo/gojs"
"apigo.cloud/git/apigo/plugin"
_ "apigo.cloud/git/apigo/plugins/db"
2024-03-09 13:43:14 +08:00
_ "apigo.cloud/git/apigo/plugins/file"
_ "apigo.cloud/git/apigo/plugins/redis"
_ "github.com/mattn/go-sqlite3"
"github.com/ssgo/u"
"os"
2024-03-09 13:43:14 +08:00
"path"
"testing"
)
2024-03-09 13:43:14 +08:00
func TestSql(t *testing.T) {
rt := gojs.New(nil, nil)
defer rt.Close()
gojs.SetPluginsConfig(map[string]plugin.Config{
"db": {
2024-03-09 13:43:14 +08:00
"default": "sqlite3://Test.db",
},
})
2024-03-09 13:43:14 +08:00
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)
`)
2024-03-09 13:43:14 +08:00
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(`
2024-03-09 13:43:14 +08:00
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(`
2024-03-09 13:43:14 +08:00
let r = db.fetch().delete('user', 'id=?', 2)
return r.changes
`)
2024-03-09 13:43:14 +08:00
Test(t, "delete", u.Int(r) == 1, r, err)
r, err, _ = rt.Run(`
2024-03-09 13:43:14 +08:00
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)
2024-03-09 13:43:14 +08:00
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(/<div class="title" text1=".+>(.*?)</)[1]
`)
Test(t, "er", r == "account", r, err)
}