@@ -9,6 +9,18 @@ import (
9
9
"github.com/stretchr/testify/assert"
10
10
)
11
11
12
+ func createTestRoute (t * testing.T , handler http.HandlerFunc ) * httpserver.Route {
13
+ t .Helper ()
14
+ route , err := httpserver .NewRouteFromHandlerFunc (
15
+ "test" ,
16
+ "/test" ,
17
+ handler ,
18
+ New (),
19
+ )
20
+ assert .NoError (t , err )
21
+ return route
22
+ }
23
+
12
24
func TestJSONEnforcerMiddleware (t * testing.T ) {
13
25
t .Parallel ()
14
26
@@ -22,14 +34,7 @@ func TestJSONEnforcerMiddleware(t *testing.T) {
22
34
assert .NoError (t , err )
23
35
}
24
36
25
- // Create route with JSON enforcer middleware
26
- route , err := httpserver .NewRouteFromHandlerFunc (
27
- "test" ,
28
- "/test" ,
29
- textHandler ,
30
- New (),
31
- )
32
- assert .NoError (t , err )
37
+ route := createTestRoute (t , textHandler )
33
38
34
39
route .ServeHTTP (rec , req )
35
40
@@ -53,13 +58,7 @@ func TestJSONEnforcerMiddleware(t *testing.T) {
53
58
assert .NoError (t , err )
54
59
}
55
60
56
- route , err := httpserver .NewRouteFromHandlerFunc (
57
- "test" ,
58
- "/test" ,
59
- jsonHandler ,
60
- New (),
61
- )
62
- assert .NoError (t , err )
61
+ route := createTestRoute (t , jsonHandler )
63
62
64
63
route .ServeHTTP (rec , req )
65
64
@@ -83,13 +82,7 @@ func TestJSONEnforcerMiddleware(t *testing.T) {
83
82
assert .NoError (t , err )
84
83
}
85
84
86
- route , err := httpserver .NewRouteFromHandlerFunc (
87
- "test" ,
88
- "/test" ,
89
- errorHandler ,
90
- New (),
91
- )
92
- assert .NoError (t , err )
85
+ route := createTestRoute (t , errorHandler )
93
86
94
87
route .ServeHTTP (rec , req )
95
88
@@ -112,13 +105,7 @@ func TestJSONEnforcerMiddleware(t *testing.T) {
112
105
w .WriteHeader (http .StatusNoContent )
113
106
}
114
107
115
- route , err := httpserver .NewRouteFromHandlerFunc (
116
- "test" ,
117
- "/test" ,
118
- emptyHandler ,
119
- New (),
120
- )
121
- assert .NoError (t , err )
108
+ route := createTestRoute (t , emptyHandler )
122
109
123
110
route .ServeHTTP (rec , req )
124
111
@@ -139,13 +126,7 @@ func TestJSONEnforcerMiddleware(t *testing.T) {
139
126
assert .NoError (t , err )
140
127
}
141
128
142
- route , err := httpserver .NewRouteFromHandlerFunc (
143
- "test" ,
144
- "/test" ,
145
- notModifiedHandler ,
146
- New (),
147
- )
148
- assert .NoError (t , err )
129
+ route := createTestRoute (t , notModifiedHandler )
149
130
150
131
route .ServeHTTP (rec , req )
151
132
@@ -164,13 +145,7 @@ func TestJSONEnforcerMiddleware(t *testing.T) {
164
145
assert .NoError (t , err )
165
146
}
166
147
167
- route , err := httpserver .NewRouteFromHandlerFunc (
168
- "test" ,
169
- "/test" ,
170
- htmlHandler ,
171
- New (),
172
- )
173
- assert .NoError (t , err )
148
+ route := createTestRoute (t , htmlHandler )
174
149
175
150
route .ServeHTTP (rec , req )
176
151
@@ -192,13 +167,7 @@ func TestJSONEnforcerMiddleware(t *testing.T) {
192
167
assert .NoError (t , err )
193
168
}
194
169
195
- route , err := httpserver .NewRouteFromHandlerFunc (
196
- "test" ,
197
- "/test" ,
198
- arrayHandler ,
199
- New (),
200
- )
201
- assert .NoError (t , err )
170
+ route := createTestRoute (t , arrayHandler )
202
171
203
172
route .ServeHTTP (rec , req )
204
173
@@ -222,13 +191,7 @@ func TestJSONEnforcerMiddleware(t *testing.T) {
222
191
assert .NoError (t , err )
223
192
}
224
193
225
- route , err := httpserver .NewRouteFromHandlerFunc (
226
- "test" ,
227
- "/test" ,
228
- malformedHandler ,
229
- New (),
230
- )
231
- assert .NoError (t , err )
194
+ route := createTestRoute (t , malformedHandler )
232
195
233
196
route .ServeHTTP (rec , req )
234
197
@@ -255,13 +218,7 @@ func TestJSONEnforcerMiddleware(t *testing.T) {
255
218
assert .NoError (t , err )
256
219
}
257
220
258
- route , err := httpserver .NewRouteFromHandlerFunc (
259
- "test" ,
260
- "/test" ,
261
- multiWriteHandler ,
262
- New (),
263
- )
264
- assert .NoError (t , err )
221
+ route := createTestRoute (t , multiWriteHandler )
265
222
266
223
route .ServeHTTP (rec , req )
267
224
@@ -274,33 +231,39 @@ func TestJSONEnforcerMiddleware(t *testing.T) {
274
231
"all writes should be buffered and wrapped" ,
275
232
)
276
233
})
277
- }
278
-
279
- // Test compliance with the middleware framework
280
- func TestJSONEnforcerCompliance (t * testing.T ) {
281
- // This is a placeholder test that would import the compliance framework
282
- // In practice, you would add this to runnables/httpserver/middleware/compliance_test.go
283
- jsonMiddleware := New ()
284
234
285
- // Test basic compliance: calls Next()
286
- t .Run ("calls Next()" , func (t * testing.T ) {
235
+ t .Run ("preserves headers from handler" , func (t * testing.T ) {
287
236
req := httptest .NewRequest ("GET" , "/test" , nil )
288
237
rec := httptest .NewRecorder ()
289
238
290
- called := false
291
- mockHandler := func (w http.ResponseWriter , r * http.Request ) {
292
- called = true
239
+ headerHandler := func (w http.ResponseWriter , r * http.Request ) {
240
+ w .Header ().Set ("X-Custom-Header" , "test-value" )
241
+ w .Header ().Set ("X-Another-Header" , "another-value" )
242
+ _ , err := w .Write ([]byte ("Hello World" ))
243
+ assert .NoError (t , err )
293
244
}
294
245
295
- route , err := httpserver .NewRouteFromHandlerFunc (
296
- "test" ,
297
- "/test" ,
298
- mockHandler ,
299
- jsonMiddleware ,
300
- )
301
- assert .NoError (t , err )
246
+ route := createTestRoute (t , headerHandler )
247
+ route .ServeHTTP (rec , req )
302
248
249
+ assert .Equal (t , "application/json" , rec .Header ().Get ("Content-Type" ))
250
+ assert .Equal (t , "test-value" , rec .Header ().Get ("X-Custom-Header" ))
251
+ assert .Equal (t , "another-value" , rec .Header ().Get ("X-Another-Header" ))
252
+ assert .Contains (t , rec .Body .String (), `{"response":"Hello World"}` )
253
+ })
254
+
255
+ t .Run ("handles empty response" , func (t * testing.T ) {
256
+ req := httptest .NewRequest ("GET" , "/test" , nil )
257
+ rec := httptest .NewRecorder ()
258
+
259
+ emptyHandler := func (w http.ResponseWriter , r * http.Request ) {
260
+ // Handler does nothing - no writes, no status
261
+ }
262
+
263
+ route := createTestRoute (t , emptyHandler )
303
264
route .ServeHTTP (rec , req )
304
- assert .True (t , called , "should call the next handler" )
265
+
266
+ assert .Equal (t , http .StatusOK , rec .Code )
267
+ assert .Empty (t , rec .Body .String (), "empty response should remain empty" )
305
268
})
306
269
}
0 commit comments