package table import ( "fmt" "testing" "github.com/stretchr/testify/assert" "github.com/yaoapp/gou" "github.com/yaoapp/kun/any" "github.com/yaoapp/yao/config" q "github.com/yaoapp/yao/query" ) func TestProcessSearch(t *testing.T) { load(t) clear(t) testData(t) params := map[string]interface{}{ "withs": map[string]interface{}{ "user": map[string]interface{}{}, }, } args := []interface{}{"pet", params, 1, 5} res, err := gou.NewProcess("yao.table.search", args...).Exec() if err != nil { t.Fatal(err) } data := any.Of(res).MapStr().Dot() assert.Equal(t, "AfterSearch", data.Get("after:hook")) assert.Equal(t, "1", fmt.Sprintf("%v", data.Get("pagesize"))) assert.Equal(t, "3", fmt.Sprintf("%v", data.Get("total"))) assert.Equal(t, "#FF0000", data.Get("data.0.status.color")) assert.Equal(t, "status", data.Get("data.0.status.field")) assert.Equal(t, "checked", data.Get("data.0.status.label")) assert.Equal(t, "Cookie", data.Get("data.0.status.name")) } func TestProcessGet(t *testing.T) { load(t) clear(t) testData(t) params := map[string]interface{}{ "limit": 2, "withs": map[string]interface{}{ "user": map[string]interface{}{}, }, } args := []interface{}{"pet", params} res, err := gou.NewProcess("yao.table.get", args...).Exec() if err != nil { t.Fatal(err) } arr := any.Of(res).CArray() assert.Equal(t, 2, len(arr)) data := any.Of(arr[0]).MapStr().Dot() assert.Equal(t, "#FF0000", data.Get("status.color")) assert.Equal(t, "status", data.Get("status.field")) assert.Equal(t, "checked", data.Get("status.label")) assert.Equal(t, "Cookie", data.Get("status.name")) } func TestProcessFind(t *testing.T) { load(t) clear(t) testData(t) args := []interface{}{"pet", 1} res, err := gou.NewProcess("yao.table.find", args...).Exec() if err != nil { t.Fatal(err) } data := any.Of(res).MapStr().Dot() assert.Equal(t, "#FF0000", data.Get("status.color")) assert.Equal(t, "status", data.Get("status.field")) assert.Equal(t, "checked", data.Get("status.label")) assert.Equal(t, "Cookie", data.Get("status.name")) } func TestProcessSave(t *testing.T) { load(t) clear(t) testData(t) args := []interface{}{"pet", map[string]interface{}{ "name": "New Pet", "type": "cat", "status": "checked", "mode": "enabled", "stay": 66, "cost": 24, "doctor_id": 1, }} res, err := gou.NewProcess("yao.table.Save", args...).Exec() if err != nil { t.Fatal(err) } assert.Equal(t, "4", fmt.Sprintf("%v", res)) res, err = gou.NewProcess("yao.table.find", "pet", res).Exec() if err != nil { t.Fatal(err) } data := any.Of(res).MapStr().Dot() assert.Equal(t, "New Pet|New Pet", data.Get("name")) } func TestProcessCreate(t *testing.T) { load(t) clear(t) testData(t) args := []interface{}{"pet", map[string]interface{}{ "id": 6, "name": "New Pet", "type": "cat", "status": "checked", "mode": "enabled", "stay": 66, "cost": 24, "doctor_id": 1, }} res, err := gou.NewProcess("yao.table.Create", args...).Exec() if err != nil { t.Fatal(err) } assert.Equal(t, "6", fmt.Sprintf("%v", res)) res, err = gou.NewProcess("yao.table.find", "pet", res).Exec() if err != nil { t.Fatal(err) } data := any.Of(res).MapStr().Dot() assert.Equal(t, "New Pet|New Pet", data.Get("name")) } func TestProcessUpdate(t *testing.T) { load(t) clear(t) testData(t) args := []interface{}{"pet", 1, map[string]interface{}{ "name": "New Pet", "type": "cat", "status": "checked", "mode": "enabled", "stay": 66, "cost": 24, "doctor_id": 1, }} _, err := gou.NewProcess("yao.table.Update", args...).Exec() if err != nil { t.Fatal(err) } res, err := gou.NewProcess("yao.table.find", "pet", 1).Exec() if err != nil { t.Fatal(err) } data := any.Of(res).MapStr().Dot() assert.Equal(t, "New Pet|New Pet", data.Get("name")) } func TestProcessUpdateWhere(t *testing.T) { load(t) clear(t) testData(t) args := []interface{}{"pet", map[string]interface{}{"wheres": []map[string]interface{}{{"column": "id", "value": 1}}}, map[string]interface{}{ "name": "New Pet", "type": "cat", "status": "checked", "mode": "enabled", "stay": 66, "cost": 24, "doctor_id": 1, }} _, err := gou.NewProcess("yao.table.UpdateWhere", args...).Exec() if err != nil { t.Fatal(err) } res, err := gou.NewProcess("yao.table.find", "pet", 1).Exec() if err != nil { t.Fatal(err) } data := any.Of(res).MapStr().Dot() assert.Equal(t, "New Pet|New Pet", data.Get("name")) } func TestProcessUpdateIn(t *testing.T) { load(t) clear(t) testData(t) args := []interface{}{"pet", "1", map[string]interface{}{ "name": "New Pet", "type": "cat", "status": "checked", "mode": "enabled", "stay": 66, "cost": 24, "doctor_id": 1, }} _, err := gou.NewProcess("yao.table.UpdateIn", args...).Exec() if err != nil { t.Fatal(err) } res, err := gou.NewProcess("yao.table.find", "pet", 1).Exec() if err != nil { t.Fatal(err) } data := any.Of(res).MapStr().Dot() assert.Equal(t, "New Pet|New Pet", data.Get("name")) } func TestProcessInsert(t *testing.T) { load(t) clear(t) args := []interface{}{"pet", []string{"name", "type", "status", "mode", "stay", "cost", "doctor_id"}, [][]interface{}{ {"Cookie", "cat", "checked", "enabled", 200, 105, 1}, {"Baby", "dog", "checked", "enabled", 186, 24, 1}, {"Poo", "others", "checked", "enabled", 199, 66, 1}, }, } _, err := gou.NewProcess("yao.table.Insert", args...).Exec() if err != nil { t.Fatal(err) } res, err := gou.NewProcess("yao.table.find", "pet", 1).Exec() if err != nil { t.Fatal(err) } data := any.Of(res).MapStr().Dot() assert.Equal(t, "Cookie", data.Get("name")) } func TestProcessDelete(t *testing.T) { load(t) clear(t) testData(t) args := []interface{}{"pet", 1} _, err := gou.NewProcess("yao.table.Delete", args...).Exec() if err != nil { t.Fatal(err) } _, err = gou.NewProcess("yao.table.find", "pet", 1).Exec() assert.Contains(t, err.Error(), "ID=1") } func TestProcessDeleteWhere(t *testing.T) { load(t) clear(t) testData(t) args := []interface{}{ "pet", map[string]interface{}{"wheres": []map[string]interface{}{{"column": "id", "value": 1}}}, } _, err := gou.NewProcess("yao.table.DeleteWhere", args...).Exec() if err != nil { t.Fatal(err) } _, err = gou.NewProcess("yao.table.find", "pet", 1).Exec() assert.Contains(t, err.Error(), "ID=1") } func TestProcessDeleteIn(t *testing.T) { load(t) clear(t) testData(t) args := []interface{}{"pet", "1"} _, err := gou.NewProcess("yao.table.DeleteIn", args...).Exec() if err != nil { t.Fatal(err) } _, err = gou.NewProcess("yao.table.find", "pet", 1).Exec() assert.Contains(t, err.Error(), "ID=1") } func load(t *testing.T) { prepare(t) err := Load(config.Conf) if err != nil { t.Fatal(err) } q.Load(config.Conf) } func testData(t *testing.T) { pet := gou.Select("pet") err := pet.Insert( []string{"name", "type", "status", "mode", "stay", "cost", "doctor_id"}, [][]interface{}{ {"Cookie", "cat", "checked", "enabled", 200, 105, 1}, {"Baby", "dog", "checked", "enabled", 186, 24, 1}, {"Poo", "others", "checked", "enabled", 199, 66, 1}, }, ) if err != nil { t.Fatal(err) } } func clear(t *testing.T) { for _, m := range gou.Models { err := m.DropTable() if err != nil { t.Fatal(err) } err = m.Migrate(true) if err != nil { t.Fatal(err) } } }