-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
response_test.go
118 lines (96 loc) · 3.19 KB
/
response_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package httprouter_test
import (
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/dmitrymomot/httprouter"
"github.com/stretchr/testify/require"
)
func TestJSON(t *testing.T) {
t.Parallel()
// Test case 1: result is nil
t.Run("result is nil", func(t *testing.T) {
w := httptest.NewRecorder()
require.NoError(t, httprouter.JSON(w, http.StatusOK, nil))
require.Equal(t, http.StatusNoContent, w.Code)
require.Equal(t, "", w.Body.String())
})
// Test case 2: result is not nil
t.Run("result is not nil", func(t *testing.T) {
expectedResult := map[string]interface{}{
"message": "Hello, World!",
}
w := httptest.NewRecorder()
require.NoError(t, httprouter.JSON(w, http.StatusOK, expectedResult))
require.Equal(t, http.StatusOK, w.Code)
var response map[string]interface{}
require.NoError(t, json.NewDecoder(w.Body).Decode(&response))
require.Equal(t, expectedResult, response)
})
// Test case 3: failed to encode response
t.Run("failed to encode response", func(t *testing.T) {
w := httptest.NewRecorder()
require.Error(t, httprouter.JSON(w, http.StatusOK, make(chan int)))
require.Equal(t, http.StatusOK, w.Code)
require.Equal(t, "", w.Body.String())
})
}
func TestString(t *testing.T) {
t.Parallel()
// Test case 1: result is nil
t.Run("result is nil", func(t *testing.T) {
w := httptest.NewRecorder()
require.NoError(t, httprouter.PlainText(w, http.StatusOK, ""))
require.Equal(t, http.StatusOK, w.Code)
require.Equal(t, "", w.Body.String())
})
// Test case 2: result is not nil
t.Run("result is not nil", func(t *testing.T) {
expectedResult := "Hello, World!"
w := httptest.NewRecorder()
require.NoError(t, httprouter.PlainText(w, http.StatusOK, expectedResult))
require.Equal(t, http.StatusOK, w.Code)
require.Equal(t, expectedResult, w.Body.String())
})
}
func TestHTML(t *testing.T) {
t.Parallel()
// Test case 1: result is nil
t.Run("result is nil", func(t *testing.T) {
w := httptest.NewRecorder()
require.ErrorIs(t, httprouter.HTML(w, http.StatusOK, []byte(nil)), httprouter.ErrResponsePayloadIsNil)
require.Equal(t, "", w.Body.String())
})
// Test case 2: result is not nil
t.Run("result is not nil", func(t *testing.T) {
expectedResult := "<html><body>Hello, World!</body></html>"
w := httptest.NewRecorder()
require.NoError(t, httprouter.HTML(w, http.StatusOK, []byte(expectedResult)))
require.Equal(t, http.StatusOK, w.Code)
require.Equal(t, expectedResult, w.Body.String())
})
}
func TestNoContent(t *testing.T) {
t.Parallel()
// Test case 1: success
t.Run("success", func(t *testing.T) {
w := httptest.NewRecorder()
require.NoError(t, httprouter.NoContent(w))
require.Equal(t, http.StatusNoContent, w.Code)
require.Equal(t, "", w.Body.String())
})
}
func TestRedirect(t *testing.T) {
t.Parallel()
// Test case 1: success
t.Run("success", func(t *testing.T) {
req, err := http.NewRequest(http.MethodGet, "/redirect", nil)
require.NoError(t, err)
w := httptest.NewRecorder()
err = httprouter.Redirect(w, req, http.StatusFound, "https://example.com")
require.NoError(t, err)
require.Equal(t, http.StatusFound, w.Code)
require.Equal(t, "https://example.com", w.Header().Get("Location"))
})
}