Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sundowndev
GitHub Repository: sundowndev/phoneinfoga
Path: blob/master/web/v2/api/response_test.go
994 views
1
package api
2
3
import (
4
"github.com/gin-gonic/gin"
5
"github.com/stretchr/testify/assert"
6
"net/http"
7
"net/http/httptest"
8
"testing"
9
)
10
11
func TestWrapHandler(t *testing.T) {
12
type expectedResult struct {
13
Code int
14
Headers http.Header
15
Body string
16
}
17
18
testcases := []struct {
19
Name string
20
Handler HandlerFunc
21
Expected expectedResult
22
}{
23
{
24
Name: "test basic handler",
25
Handler: func(ctx *gin.Context) *Response {
26
return &Response{
27
Code: 200,
28
Headers: http.Header{
29
"My-Header": []string{"val1", "val2"},
30
},
31
Data: map[string]string{"msg": "test"},
32
JSON: true,
33
}
34
},
35
Expected: expectedResult{
36
Code: 200,
37
Headers: http.Header{
38
"Content-Type": []string{"application/json; charset=utf-8"},
39
"My-Header": []string{"val1", "val2"},
40
},
41
Body: `{"msg":"test"}`,
42
},
43
},
44
{
45
Name: "test panic in handler",
46
Handler: func(ctx *gin.Context) *Response {
47
panic("dummy panic")
48
},
49
Expected: expectedResult{
50
Code: 500,
51
Headers: http.Header{"Content-Type": []string{"application/json; charset=utf-8"}},
52
Body: `{"error":"Unknown error"}`,
53
},
54
},
55
{
56
Name: "test byte response in handler",
57
Handler: func(ctx *gin.Context) *Response {
58
return &Response{
59
Code: 200,
60
Headers: http.Header{},
61
Data: []byte("test"),
62
}
63
},
64
Expected: expectedResult{
65
Code: 200,
66
Headers: http.Header{},
67
Body: `test`,
68
},
69
},
70
{
71
Name: "test unknown response in handler",
72
Handler: func(ctx *gin.Context) *Response {
73
return &Response{
74
Code: 200,
75
Headers: http.Header{},
76
Data: 23,
77
}
78
},
79
Expected: expectedResult{
80
Code: 200,
81
Headers: http.Header{},
82
Body: ``,
83
},
84
},
85
{
86
Name: "test nil response in handler",
87
Handler: func(ctx *gin.Context) *Response {
88
ctx.Writer.WriteHeader(403)
89
_, _ = ctx.Writer.Write([]byte("test"))
90
return nil
91
},
92
Expected: expectedResult{
93
Code: 403,
94
Headers: http.Header{},
95
Body: `test`,
96
},
97
},
98
}
99
100
for _, tt := range testcases {
101
t.Run(tt.Name, func(t *testing.T) {
102
e := gin.New()
103
e.GET("/test", WrapHandler(tt.Handler))
104
105
req, err := http.NewRequest(http.MethodGet, "/test", nil)
106
if err != nil {
107
t.Fatal(err)
108
}
109
w := httptest.NewRecorder()
110
e.ServeHTTP(w, req)
111
112
assert.Equal(t, tt.Expected.Code, w.Code)
113
assert.Equal(t, tt.Expected.Headers, w.Header())
114
assert.Equal(t, tt.Expected.Body, w.Body.String())
115
})
116
}
117
}
118
119