summaryrefslogtreecommitdiff
path: root/pkg/test/test.go
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-04-11 15:42:07 -0600
committermo khan <mo@mokhan.ca>2025-04-11 15:42:07 -0600
commit49e61799c837cf49687d9a15a2fb0b04ca74d47c (patch)
treeb2b8df8864041efa936b7bb0c56e8ddc2aba473b /pkg/test/test.go
parent2c018238c7f4aba8db9cbbe3eadb91b85c50629e (diff)
refactor: extract test helpers
Diffstat (limited to 'pkg/test/test.go')
-rw-r--r--pkg/test/test.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/pkg/test/test.go b/pkg/test/test.go
new file mode 100644
index 0000000..a93759e
--- /dev/null
+++ b/pkg/test/test.go
@@ -0,0 +1,55 @@
+package test
+
+import (
+ "context"
+ "io"
+ "net/http"
+ "net/http/httptest"
+
+ "github.com/xlgmokha/x/pkg/serde"
+)
+
+type RequestOption func(*http.Request) *http.Request
+
+func Request(method, target string, options ...RequestOption) *http.Request {
+ request := httptest.NewRequest(method, target, nil)
+ for _, option := range options {
+ request = option(request)
+ }
+ return request
+}
+
+func RequestResponse(method, target string, options ...RequestOption) (*http.Request, *httptest.ResponseRecorder) {
+ return Request(method, target, options...), httptest.NewRecorder()
+}
+
+func WithAcceptHeader(value serde.MediaType) RequestOption {
+ return WithRequestHeader("Accept", string(value))
+}
+
+func WithRequestHeader(key, value string) RequestOption {
+ return func(r *http.Request) *http.Request {
+ r.Header.Set(key, value)
+ return r
+ }
+}
+
+func WithRequestBody(body io.ReadCloser) RequestOption {
+ return func(r *http.Request) *http.Request {
+ r.Body = body
+ return r
+ }
+}
+
+func WithContext(ctx context.Context) RequestOption {
+ return func(r *http.Request) *http.Request {
+ return r.WithContext(ctx)
+ }
+}
+
+func WithCookie(cookie *http.Cookie) RequestOption {
+ return func(r *http.Request) *http.Request {
+ r.AddCookie(cookie)
+ return r
+ }
+}