fix(tests): handle all Close() and Decode() errors across integration tests

Replace all unhandled resp.Body.Close() calls throughout the test suite:

- Deferred calls: replace 'defer VAR.Body.Close()' with a closure that explicitly
  discards the error via 'defer func(Body io.ReadCloser) { _ = Body.Close() }(VAR.Body)'
- Immediate calls: replace 'VAR.Body.Close()' with '_ = VAR.Body.Close()'

Replace all unhandled json.NewDecoder(VAR.Body).Decode(&x) calls with error capture
and require.NoError assertion. Files using httptest.ResponseRecorder (collections_preview,
processing_issues) use 'err :=' declaration; suite-style tests (scanner_integration,
dashboard_integration) use s.T() instead of t.
This commit is contained in:
2026-04-21 20:33:05 -04:00
parent 8baecad379
commit a6700f73e0
28 changed files with 1065 additions and 414 deletions
+60 -22
View File
@@ -3,6 +3,7 @@ package main
import (
"bytes"
"encoding/json"
"io"
"net/http"
"testing"
@@ -24,7 +25,9 @@ func TestRefreshTokenFlow(t *testing.T) {
resp, err := client.Do(httpReq)
require.NoError(t, err)
defer resp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
})
@@ -40,7 +43,9 @@ func TestRefreshTokenFlow(t *testing.T) {
resp, err := client.Do(httpReq)
require.NoError(t, err)
defer resp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
})
@@ -58,12 +63,15 @@ func TestRefreshTokenFlow(t *testing.T) {
loginResp, err := client.Do(loginHTTP)
require.NoError(t, err)
defer loginResp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(loginResp.Body)
require.Equal(t, http.StatusOK, loginResp.StatusCode)
var loginResult map[string]interface{}
json.NewDecoder(loginResp.Body).Decode(&loginResult)
err = json.NewDecoder(loginResp.Body).Decode(&loginResult)
require.NoError(t, err)
refreshToken, ok := loginResult["refresh_token"].(string)
require.True(t, ok, "Should have refresh_token")
@@ -79,12 +87,15 @@ func TestRefreshTokenFlow(t *testing.T) {
refreshResp, err := client.Do(refreshHTTP)
require.NoError(t, err)
defer refreshResp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(refreshResp.Body)
assert.Equal(t, http.StatusOK, refreshResp.StatusCode)
var refreshResult map[string]interface{}
json.NewDecoder(refreshResp.Body).Decode(&refreshResult)
err = json.NewDecoder(refreshResp.Body).Decode(&refreshResult)
require.NoError(t, err)
assert.Contains(t, refreshResult, "access_token")
assert.NotEmpty(t, refreshResult["access_token"], "New access token should not be empty")
@@ -102,7 +113,9 @@ func TestRefreshTokenFlow(t *testing.T) {
resp, err := client.Do(httpReq)
require.NoError(t, err)
defer resp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
})
@@ -118,7 +131,9 @@ func TestRefreshTokenFlow(t *testing.T) {
resp, err := client.Do(httpReq)
require.NoError(t, err)
defer resp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
// Should still work or return appropriate error
assert.True(t, resp.StatusCode == http.StatusOK || resp.StatusCode == http.StatusBadRequest || resp.StatusCode == http.StatusUnsupportedMediaType)
@@ -143,12 +158,15 @@ func TestRefreshTokenSecurity(t *testing.T) {
loginResp, err := client.Do(loginHTTP)
require.NoError(t, err)
defer loginResp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(loginResp.Body)
require.Equal(t, http.StatusOK, loginResp.StatusCode)
var loginResult map[string]interface{}
json.NewDecoder(loginResp.Body).Decode(&loginResult)
err = json.NewDecoder(loginResp.Body).Decode(&loginResult)
require.NoError(t, err)
refreshToken := loginResult["refresh_token"].(string)
@@ -163,7 +181,9 @@ func TestRefreshTokenSecurity(t *testing.T) {
refreshResp1, err := client.Do(refreshHTTP1)
require.NoError(t, err)
defer refreshResp1.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(refreshResp1.Body)
assert.Equal(t, http.StatusOK, refreshResp1.StatusCode)
@@ -173,7 +193,9 @@ func TestRefreshTokenSecurity(t *testing.T) {
refreshResp2, err := client.Do(refreshHTTP2)
require.NoError(t, err)
defer refreshResp2.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(refreshResp2.Body)
// May return 401 if token reuse is detected, or 200 if not implemented
// Either is acceptable depending on security requirements
@@ -197,7 +219,9 @@ func TestRefreshTokenEdgeCases(t *testing.T) {
resp, err := client.Do(httpReq)
require.NoError(t, err)
defer resp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
})
@@ -213,7 +237,9 @@ func TestRefreshTokenEdgeCases(t *testing.T) {
resp, err := client.Do(httpReq)
require.NoError(t, err)
defer resp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
assert.Equal(t, http.StatusBadRequest, resp.StatusCode)
})
@@ -231,12 +257,15 @@ func TestRefreshTokenEdgeCases(t *testing.T) {
loginResp, err := client.Do(loginHTTP)
require.NoError(t, err)
defer loginResp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(loginResp.Body)
require.Equal(t, http.StatusOK, loginResp.StatusCode)
var loginResult map[string]interface{}
json.NewDecoder(loginResp.Body).Decode(&loginResult)
err = json.NewDecoder(loginResp.Body).Decode(&loginResult)
require.NoError(t, err)
refreshToken := loginResult["refresh_token"].(string)
@@ -251,12 +280,15 @@ func TestRefreshTokenEdgeCases(t *testing.T) {
refreshResp, err := client.Do(refreshHTTP)
require.NoError(t, err)
defer refreshResp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(refreshResp.Body)
require.Equal(t, http.StatusOK, refreshResp.StatusCode)
var refreshResult map[string]interface{}
json.NewDecoder(refreshResp.Body).Decode(&refreshResult)
err = json.NewDecoder(refreshResp.Body).Decode(&refreshResult)
require.NoError(t, err)
// Verify response structure
assert.Contains(t, refreshResult, "access_token")
@@ -279,12 +311,15 @@ func TestRefreshTokenEdgeCases(t *testing.T) {
loginResp, err := client.Do(loginHTTP)
require.NoError(t, err)
defer loginResp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(loginResp.Body)
require.Equal(t, http.StatusOK, loginResp.StatusCode)
var loginResult map[string]interface{}
json.NewDecoder(loginResp.Body).Decode(&loginResult)
err = json.NewDecoder(loginResp.Body).Decode(&loginResult)
require.NoError(t, err)
refreshToken := loginResult["refresh_token"].(string)
@@ -299,12 +334,15 @@ func TestRefreshTokenEdgeCases(t *testing.T) {
refreshResp, err := client.Do(refreshHTTP)
require.NoError(t, err)
defer refreshResp.Body.Close()
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(refreshResp.Body)
require.Equal(t, http.StatusOK, refreshResp.StatusCode)
var refreshResult map[string]interface{}
json.NewDecoder(refreshResp.Body).Decode(&refreshResult)
err = json.NewDecoder(refreshResp.Body).Decode(&refreshResult)
require.NoError(t, err)
// Verify access token is a string
accessToken, ok := refreshResult["access_token"].(string)