main
1package test
2
3import (
4 "context"
5 "io"
6 "net/http"
7 "net/http/httptest"
8)
9
10type RequestOption func(*http.Request) *http.Request
11
12func Request(method, target string, options ...RequestOption) *http.Request {
13 request := httptest.NewRequest(method, target, nil)
14 for _, option := range options {
15 request = option(request)
16 }
17 return request
18}
19
20func RequestResponse(method, target string, options ...RequestOption) (*http.Request, *httptest.ResponseRecorder) {
21 return Request(method, target, options...), httptest.NewRecorder()
22}
23
24func WithRequestHeader(key, value string) RequestOption {
25 return func(r *http.Request) *http.Request {
26 r.Header.Set(key, value)
27 return r
28 }
29}
30
31func WithRequestBody(body io.ReadCloser) RequestOption {
32 return func(r *http.Request) *http.Request {
33 r.Body = body
34 return r
35 }
36}
37
38func WithContext(ctx context.Context) RequestOption {
39 return func(r *http.Request) *http.Request {
40 return r.WithContext(ctx)
41 }
42}
43
44func WithCookie(cookie *http.Cookie) RequestOption {
45 return func(r *http.Request) *http.Request {
46 r.AddCookie(cookie)
47 return r
48 }
49}