2024-02-18 13:23:11 +08:00
|
|
|
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"
|
2024-02-18 13:23:11 +08:00
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
|
|
"github.com/ssgo/u"
|
|
|
|
"os"
|
2024-03-09 13:43:14 +08:00
|
|
|
"path"
|
2024-02-18 13:23:11 +08:00
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
2024-03-09 13:43:14 +08:00
|
|
|
func TestSql(t *testing.T) {
|
2024-02-18 13:23:11 +08:00
|
|
|
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-02-18 13:23:11 +08:00
|
|
|
},
|
|
|
|
})
|
|
|
|
|
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-02-18 13:23:11 +08:00
|
|
|
`)
|
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)
|
2024-02-18 13:23:11 +08:00
|
|
|
|
|
|
|
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
|
2024-02-18 13:23:11 +08:00
|
|
|
`)
|
|
|
|
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-02-18 13:23:11 +08:00
|
|
|
`)
|
2024-03-09 13:43:14 +08:00
|
|
|
Test(t, "delete", u.Int(r) == 1, r, err)
|
2024-02-18 13:23:11 +08:00
|
|
|
|
|
|
|
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
|
2024-02-18 13:23:11 +08:00
|
|
|
`)
|
|
|
|
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)
|
|
|
|
|
2024-02-18 13:23:11 +08:00
|
|
|
}
|