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() {}