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}