101 lines
2.8 KiB
Go
101 lines
2.8 KiB
Go
package base_test
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"git.fsdpf.net/go/contracts/base"
|
|
"git.fsdpf.net/go/db"
|
|
"git.fsdpf.net/go/db/engine"
|
|
"git.fsdpf.net/go/req"
|
|
"github.com/samber/do/v2"
|
|
"github.com/stretchr/testify/suite"
|
|
|
|
_ "git.fsdpf.net/go/db/schema/dialect/mysql"
|
|
_ "git.fsdpf.net/go/db/schema/dialect/sqlite3"
|
|
)
|
|
|
|
type resourceTest struct {
|
|
suite.Suite
|
|
res *base.Resource
|
|
}
|
|
|
|
func TestResource(t *testing.T) {
|
|
suite.Run(t, new(resourceTest))
|
|
}
|
|
|
|
func (t *resourceTest) SetupSuite() {
|
|
app := do.New()
|
|
|
|
do.Provide(app, func(container do.Injector) (engine.Engine, error) {
|
|
return engine.Open(map[string]engine.DBConfig{
|
|
"default": engine.NewDBConfig("mysql",
|
|
engine.WithHost(os.Getenv("MYSQL_HOST")),
|
|
engine.WithPort(os.Getenv("MYSQL_PORT")),
|
|
engine.WithDatabase(os.Getenv("MYSQL_DB")),
|
|
engine.WithUsername(os.Getenv("MYSQL_USER")),
|
|
engine.WithPassword(os.Getenv("MYSQL_PASSWD")),
|
|
),
|
|
}), nil
|
|
})
|
|
|
|
fields := []base.ResField{
|
|
{Name: "字段", Code: "fields", DataType: req.ResJson, Default: "{}"},
|
|
}
|
|
|
|
res := &base.Resource{
|
|
Uuid: "4bf3a311-cbe1-4236-bdda-c64ab04ae9b1",
|
|
Code: "User",
|
|
Name: "用户",
|
|
Table: "users",
|
|
Primarykey: "id",
|
|
Fields: fields,
|
|
}
|
|
|
|
res.InitContainer(app)
|
|
|
|
t.res = res
|
|
}
|
|
|
|
func (t *resourceTest) TestInsertRows() {
|
|
type Temp struct {
|
|
Name string `db:"name"`
|
|
Fields map[string]any `db:"fields"`
|
|
}
|
|
|
|
result := "INSERT INTO `users` AS `User` (`created_user`, `fields`, `name`, `owned_user`) " +
|
|
"VALUES ('00000000-0000-0000-0000-000000000000', '{\\\"aa\\\":1}', '张三', '00000000-0000-0000-0000-000000000000')"
|
|
|
|
sql, _, _ := t.res.GetDBTable(base.GetAnonymous()).Insert().Rows(
|
|
db.Record{"name": "张三", "id": 1, "fields": map[string]any{"aa": 1}},
|
|
).Executor().ToSQL()
|
|
t.Equal(result, sql)
|
|
|
|
sql, _, _ = t.res.GetDBTable(base.GetAnonymous()).Insert().Rows(
|
|
&Temp{Name: "张三", Fields: map[string]any{"aa": 1}},
|
|
).Executor().ToSQL()
|
|
t.Equal(result, sql)
|
|
|
|
sql, _, _ = t.res.GetDBTable(base.GetAnonymous()).Insert().Rows(
|
|
Temp{Name: "张三", Fields: map[string]any{"aa": 1}},
|
|
).Executor().ToSQL()
|
|
t.Equal(result, sql)
|
|
}
|
|
func (t *resourceTest) TestInsertColsVals() {
|
|
result := "INSERT INTO `users` AS `User` (`name`, `fields`, `created_user`, `owned_user`) VALUES " +
|
|
"('李四', '{\\\"aa\\\":1}', '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000000'), " +
|
|
"('王五', '{\\\"aa\\\":3}', '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000000')"
|
|
|
|
sql, _, _ := t.res.GetDBTable(base.GetAnonymous()).Insert().Cols("name", "fields").Vals(
|
|
db.Vals{"李四", map[string]any{"aa": 1}},
|
|
db.Vals{"王五", map[string]any{"aa": 3}},
|
|
).Executor().ToSQL()
|
|
|
|
_ = result
|
|
_ = sql
|
|
|
|
// t.Equal(result, sql)
|
|
|
|
}
|
|
func (*resourceTest) TestInsertColsFromQuery() {}
|