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  }