From c81491164a9a6b438495eebf79a2d7aef21e1560 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Fri, 8 May 2026 10:39:11 -0400 Subject: [PATCH] refactor(server/api/test): withUser helper; migrate 51 context-value sites (A3) --- internal/api/admin_lidarr_test.go | 2 +- internal/api/admin_quarantine_test.go | 2 +- internal/api/admin_requests_test.go | 2 +- internal/api/admin_tracks_test.go | 2 +- internal/api/auth_test.go | 4 ++-- internal/api/events_test.go | 2 +- internal/api/likes_test.go | 2 +- internal/api/me_test.go | 2 +- internal/api/playlists_test.go | 2 +- internal/api/radio_test.go | 2 +- internal/api/requests_test.go | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/internal/api/admin_lidarr_test.go b/internal/api/admin_lidarr_test.go index 535419de..d0e882b5 100644 --- a/internal/api/admin_lidarr_test.go +++ b/internal/api/admin_lidarr_test.go @@ -51,7 +51,7 @@ func doAdminReq(t *testing.T, h *handlers, method, path string, body []byte, use if body != nil { req.Header.Set("Content-Type", "application/json") } - req = req.WithContext(context.WithValue(req.Context(), userCtxKeyForTest(), user)) + req = withUser(req, user) w := httptest.NewRecorder() newAdminLidarrRouter(h).ServeHTTP(w, req) return w diff --git a/internal/api/admin_quarantine_test.go b/internal/api/admin_quarantine_test.go index d45e536e..59cd7b49 100644 --- a/internal/api/admin_quarantine_test.go +++ b/internal/api/admin_quarantine_test.go @@ -50,7 +50,7 @@ func doAdminQuarantineReq(t *testing.T, h *handlers, method, path string, body [ if body != nil { req.Header.Set("Content-Type", "application/json") } - req = req.WithContext(context.WithValue(req.Context(), userCtxKeyForTest(), user)) + req = withUser(req, user) w := httptest.NewRecorder() newAdminQuarantineRouter(h).ServeHTTP(w, req) return w diff --git a/internal/api/admin_requests_test.go b/internal/api/admin_requests_test.go index 490e055c..e9957330 100644 --- a/internal/api/admin_requests_test.go +++ b/internal/api/admin_requests_test.go @@ -45,7 +45,7 @@ func doAdminRequestReq(t *testing.T, h *handlers, method, path string, body []by if body != nil { req.Header.Set("Content-Type", "application/json") } - req = req.WithContext(context.WithValue(req.Context(), userCtxKeyForTest(), user)) + req = withUser(req, user) w := httptest.NewRecorder() newAdminRequestsRouter(h).ServeHTTP(w, req) return w diff --git a/internal/api/admin_tracks_test.go b/internal/api/admin_tracks_test.go index 90b78447..36637850 100644 --- a/internal/api/admin_tracks_test.go +++ b/internal/api/admin_tracks_test.go @@ -64,7 +64,7 @@ func newAdminTracksRouter(h *handlers) chi.Router { func doAdminTracksReq(t *testing.T, h *handlers, method, path string, user dbq.User) *httptest.ResponseRecorder { t.Helper() req := httptest.NewRequest(method, path, bytes.NewBuffer(nil)) - req = req.WithContext(context.WithValue(req.Context(), userCtxKeyForTest(), user)) + req = withUser(req, user) w := httptest.NewRecorder() newAdminTracksRouter(h).ServeHTTP(w, req) return w diff --git a/internal/api/auth_test.go b/internal/api/auth_test.go index 191dcd48..333256bf 100644 --- a/internal/api/auth_test.go +++ b/internal/api/auth_test.go @@ -212,7 +212,7 @@ func TestHandleLogout_DeletesSessionAndClearsCookie(t *testing.T) { req.AddCookie(&http.Cookie{Name: auth.SessionCookieName, Value: token}) // handleLogout runs behind RequireUser in real routing; simulate that by // putting the user into context here. - req = req.WithContext(context.WithValue(req.Context(), userCtxKeyForTest(), user)) + req = withUser(req, user) w := httptest.NewRecorder() h.handleLogout(w, req) @@ -256,7 +256,7 @@ func TestHandleLogout_BearerHeaderWithTrailingWhitespaceDeletesSession(t *testin req := httptest.NewRequest(http.MethodPost, "/api/auth/logout", nil) // Trailing whitespace — RequireUser trims this, so logout must too. req.Header.Set("Authorization", "Bearer "+token+" ") - req = req.WithContext(context.WithValue(req.Context(), userCtxKeyForTest(), user)) + req = withUser(req, user) w := httptest.NewRecorder() h.handleLogout(w, req) diff --git a/internal/api/events_test.go b/internal/api/events_test.go index 2a5340fc..1d4f9695 100644 --- a/internal/api/events_test.go +++ b/internal/api/events_test.go @@ -19,7 +19,7 @@ import ( func callEvents(h *handlers, user dbq.User, body []byte) *httptest.ResponseRecorder { req := httptest.NewRequest(http.MethodPost, "/api/events", bytes.NewReader(body)) req.Header.Set("Content-Type", "application/json") - req = req.WithContext(context.WithValue(req.Context(), userCtxKeyForTest(), user)) + req = withUser(req, user) w := httptest.NewRecorder() h.handleEvents(w, req) return w diff --git a/internal/api/likes_test.go b/internal/api/likes_test.go index c47e9a63..d5f44657 100644 --- a/internal/api/likes_test.go +++ b/internal/api/likes_test.go @@ -14,7 +14,7 @@ import ( func callLike(h *handlers, user dbq.User, method, path string) *httptest.ResponseRecorder { req := httptest.NewRequest(method, path, nil) - req = req.WithContext(context.WithValue(req.Context(), userCtxKeyForTest(), user)) + req = withUser(req, user) w := httptest.NewRecorder() likesRouter(h).ServeHTTP(w, req) return w diff --git a/internal/api/me_test.go b/internal/api/me_test.go index 31362add..75b98ee5 100644 --- a/internal/api/me_test.go +++ b/internal/api/me_test.go @@ -15,7 +15,7 @@ func TestHandleGetMe_ReturnsAuthenticatedUser(t *testing.T) { user := seedUser(t, pool, "alice", "hunter2", true) req := httptest.NewRequest(http.MethodGet, "/api/me", nil) - req = req.WithContext(context.WithValue(req.Context(), userCtxKeyForTest(), user)) + req = withUser(req, user) w := httptest.NewRecorder() h.handleGetMe(w, req) diff --git a/internal/api/playlists_test.go b/internal/api/playlists_test.go index baf59db1..1c77d1fa 100644 --- a/internal/api/playlists_test.go +++ b/internal/api/playlists_test.go @@ -46,7 +46,7 @@ func doPlaylistsReq(h *handlers, user dbq.User, method, path string, body []byte if body != nil { req.Header.Set("Content-Type", "application/json") } - req = req.WithContext(context.WithValue(req.Context(), userCtxKeyForTest(), user)) + req = withUser(req, user) w := httptest.NewRecorder() newPlaylistsRouter(h).ServeHTTP(w, req) return w diff --git a/internal/api/radio_test.go b/internal/api/radio_test.go index f81c7a0b..08e76480 100644 --- a/internal/api/radio_test.go +++ b/internal/api/radio_test.go @@ -12,7 +12,7 @@ import ( func callRadio(h *handlers, user interface{}, query string) *httptest.ResponseRecorder { req := httptest.NewRequest(http.MethodGet, "/api/radio?"+query, nil) - req = req.WithContext(context.WithValue(req.Context(), userCtxKeyForTest(), user)) + req = withUser(req, user) w := httptest.NewRecorder() h.handleRadio(w, req) return w diff --git a/internal/api/requests_test.go b/internal/api/requests_test.go index c3f95a44..db22b797 100644 --- a/internal/api/requests_test.go +++ b/internal/api/requests_test.go @@ -29,7 +29,7 @@ func newRequestsRouter(h *handlers) chi.Router { // withUser injects a user into the request context the same way RequireUser does. func withUser(req *http.Request, user dbq.User) *http.Request { - return req.WithContext(context.WithValue(req.Context(), userCtxKeyForTest(), user)) + return withUser(req, user) } // doCreateRequest fires POST /api/requests with the given JSON body as the given user.