github.com/zooyer/miskit@v1.0.71/micro/dto_test.go (about) 1 package micro 2 3 import ( 4 "encoding/json" 5 "io/ioutil" 6 "net/http" 7 "net/http/httptest" 8 "testing" 9 10 "github.com/gin-gonic/gin" 11 "github.com/stretchr/testify/assert" 12 "gorm.io/driver/sqlite" 13 "gorm.io/gorm" 14 ) 15 16 type testController struct { 17 Controller 18 } 19 20 func (t testController) Valid(ctx *gin.Context) { 21 var ( 22 err error 23 query Query 24 ) 25 26 defer func() { t.Response(ctx, query, err) }() 27 28 if err = t.Bind(ctx, &query); err != nil { 29 return 30 } 31 } 32 33 func TestQuery_Valid(t *testing.T) { 34 engine := gin.Default() 35 var test testController 36 37 engine.GET("/valid", test.Valid) 38 39 var get = func(uri string) *httptest.ResponseRecorder { 40 return get(engine, uri) 41 } 42 43 var resp *httptest.ResponseRecorder 44 45 resp = get("/valid?size=1&sort=id%20ASC&select=name&name=zhangsan&age=24&omit=age&page=1&where=phone%20%3D%20132") 46 assert.Equal(t, http.StatusOK, resp.Code) 47 data, _ := ioutil.ReadAll(resp.Body) 48 t.Log(string(data)) 49 } 50 51 func TestQuery_ByQuery(t *testing.T) { 52 type Stu struct { 53 gorm.Model 54 Name string `json:"name"` 55 Age int `json:"age"` 56 Level int `json:"level"` 57 Field string `json:"field"` 58 } 59 60 var query = Query{ 61 Page: 2, 62 Size: 1, 63 Sort: "id ASC", 64 Omit: []string{"level", "field", "ab"}, 65 Select: []string{"name", "age", "field"}, 66 Where: "level < 10", 67 } 68 69 dial := sqlite.Open(":memory:") 70 db, err := gorm.Open(dial) 71 if err != nil { 72 t.Fatal(err) 73 } 74 75 db = db.Debug() 76 77 if err = db.AutoMigrate(&Stu{}); err != nil { 78 t.Fatal(err) 79 } 80 81 db.Create(&Stu{Name: "xiaozhang", Age: 28, Level: 3, Field: "abc"}) 82 db.Create(&Stu{Name: "xiaoli", Age: 19, Level: 32, Field: "as"}) 83 db.Create(&Stu{Name: "xiaowang", Age: 22, Level: 5, Field: "bf"}) 84 db.Create(&Stu{Name: "xiaohong", Age: 18, Level: 1, Field: "sad"}) 85 86 var stu []Stu 87 if err := db.Scopes(query.ByQuery).Find(&stu).Error; err != nil { 88 t.Fatal(err) 89 } 90 91 assert.Equal(t, 1, len(stu), "len(stu)") 92 assert.Equal(t, stu[0].Name, "xiaowang") 93 assert.Equal(t, stu[0].Age, 22) 94 assert.Equal(t, stu[0].Field, "bf") 95 assert.Equal(t, stu[0].Level, 0) 96 assert.Equal(t, stu[0].Model, gorm.Model{}) 97 98 data, err := json.MarshalIndent(stu, "", " ") 99 if err != nil { 100 t.Fatal(err) 101 } 102 103 t.Log(string(data)) 104 }