|
|
@@ -0,0 +1,186 @@
|
|
|
+package test
|
|
|
+
|
|
|
+import (
|
|
|
+ "bytes"
|
|
|
+ "encoding/json"
|
|
|
+ "git.sxidc.com/go-framework/baize/examples/examples/project/application"
|
|
|
+ "git.sxidc.com/go-tools/utils/strutils"
|
|
|
+ "github.com/stretchr/testify/assert"
|
|
|
+ "io"
|
|
|
+ "net/http"
|
|
|
+ "net/http/httptest"
|
|
|
+ "reflect"
|
|
|
+ "testing"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+type ToolKit struct {
|
|
|
+ t *testing.T
|
|
|
+
|
|
|
+ body io.Reader
|
|
|
+ header map[string]string
|
|
|
+ queryParams map[string]string
|
|
|
+ jsonResponse interface{}
|
|
|
+ token string
|
|
|
+
|
|
|
+ responseRecorder *httptest.ResponseRecorder
|
|
|
+}
|
|
|
+
|
|
|
+func Init() {
|
|
|
+ application.NewApp()
|
|
|
+
|
|
|
+ go func() {
|
|
|
+ err := application.Start()
|
|
|
+ if err != nil {
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ time.Sleep(100 * time.Millisecond)
|
|
|
+}
|
|
|
+
|
|
|
+func Destroy() {
|
|
|
+ err := application.Finish()
|
|
|
+ if err != nil {
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ application.DestroyApp()
|
|
|
+}
|
|
|
+
|
|
|
+func NewToolKit(t *testing.T) *ToolKit {
|
|
|
+ return &ToolKit{
|
|
|
+ t: t,
|
|
|
+ header: make(map[string]string),
|
|
|
+ queryParams: make(map[string]string),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) SetHeader(key string, value string) *ToolKit {
|
|
|
+ toolKit.header[key] = value
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) SetBody(body *bytes.Buffer) *ToolKit {
|
|
|
+ toolKit.body = body
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) SetQueryParams(key string, value string) *ToolKit {
|
|
|
+ toolKit.queryParams[key] = value
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) SetJsonBody(body interface{}) *ToolKit {
|
|
|
+ jsonBody, err := json.Marshal(body)
|
|
|
+ if err != nil {
|
|
|
+ toolKit.t.Fatal("转换JSON失败")
|
|
|
+ }
|
|
|
+
|
|
|
+ toolKit.body = bytes.NewBuffer(jsonBody)
|
|
|
+
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) SetJsonResponse(response interface{}) *ToolKit {
|
|
|
+ if response == nil {
|
|
|
+ toolKit.jsonResponse = nil
|
|
|
+ return toolKit
|
|
|
+ }
|
|
|
+
|
|
|
+ responseValue := reflect.ValueOf(response)
|
|
|
+ if responseValue.Kind() != reflect.Ptr {
|
|
|
+ toolKit.t.Fatal("JsonResponse应该传递指针类型")
|
|
|
+ }
|
|
|
+
|
|
|
+ toolKit.jsonResponse = response
|
|
|
+
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) SetToken(token string) *ToolKit {
|
|
|
+ toolKit.token = token
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) Request(url string, method string) *ToolKit {
|
|
|
+ if len(toolKit.queryParams) != 0 {
|
|
|
+ url = url + "?"
|
|
|
+ for key, value := range toolKit.queryParams {
|
|
|
+ url = url + key + "=" + value + "&"
|
|
|
+ }
|
|
|
+
|
|
|
+ url = url[:len(url)-1]
|
|
|
+
|
|
|
+ toolKit.queryParams = make(map[string]string)
|
|
|
+ }
|
|
|
+
|
|
|
+ request, err := http.NewRequest(method, url, toolKit.body)
|
|
|
+ if err != nil {
|
|
|
+ toolKit.t.Fatal("创建请求失败", err)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(toolKit.header) != 0 {
|
|
|
+ for key, value := range toolKit.header {
|
|
|
+ request.Header.Add(key, value)
|
|
|
+ }
|
|
|
+
|
|
|
+ toolKit.header = make(map[string]string)
|
|
|
+ }
|
|
|
+
|
|
|
+ if !strutils.IsStringEmpty(toolKit.token) {
|
|
|
+ request.Header.Add("Authorization", toolKit.token)
|
|
|
+ }
|
|
|
+
|
|
|
+ toolKit.responseRecorder = httptest.NewRecorder()
|
|
|
+ application.ServerHttpForTest(toolKit.responseRecorder, request)
|
|
|
+
|
|
|
+ if toolKit.responseRecorder.Code == http.StatusOK && toolKit.jsonResponse != nil {
|
|
|
+ responseBody, err := io.ReadAll(toolKit.responseRecorder.Body)
|
|
|
+ if err != nil {
|
|
|
+ toolKit.t.Fatal("读取响应Body失败")
|
|
|
+ }
|
|
|
+
|
|
|
+ err = json.Unmarshal(responseBody, toolKit.jsonResponse)
|
|
|
+ if err != nil {
|
|
|
+ toolKit.t.Fatal("转换Response失败")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) AssertStatusCode(code int) *ToolKit {
|
|
|
+ assert.Equal(toolKit.t, code, toolKit.responseRecorder.Code)
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) AssertBodyEqual(body string) *ToolKit {
|
|
|
+ assert.Equal(toolKit.t, body, toolKit.responseRecorder.Body.String())
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) AssertEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) *ToolKit {
|
|
|
+ assert.Equal(toolKit.t, expected, actual, msgAndArgs)
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) AssertNotEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) *ToolKit {
|
|
|
+ assert.NotEqual(toolKit.t, expected, actual, msgAndArgs)
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) AssertNotEmpty(object interface{}, msgAndArgs ...interface{}) *ToolKit {
|
|
|
+ assert.NotEmpty(toolKit.t, object, msgAndArgs)
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) AssertGreaterOrEqual(e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) *ToolKit {
|
|
|
+ assert.GreaterOrEqual(toolKit.t, e1, e2, msgAndArgs)
|
|
|
+ return toolKit
|
|
|
+}
|
|
|
+
|
|
|
+func (toolKit *ToolKit) AssertZero(e1 interface{}, msgAndArgs ...interface{}) *ToolKit {
|
|
|
+ assert.Zero(toolKit.t, e1, msgAndArgs)
|
|
|
+ return toolKit
|
|
|
+}
|