From c7e9fade039b07e1e83daa688b937d5b73bf8162 Mon Sep 17 00:00:00 2001 From: Stavros Date: Sat, 9 May 2026 13:28:22 +0300 Subject: [PATCH] tests: use require instead of assert where previous step is required --- .../controller/context_controller_test.go | 9 +- internal/controller/health_controller_test.go | 7 +- internal/controller/oidc_controller_test.go | 100 +++++++++--------- internal/controller/user_controller_test.go | 28 ++--- 4 files changed, 73 insertions(+), 71 deletions(-) diff --git a/internal/controller/context_controller_test.go b/internal/controller/context_controller_test.go index 162fd166..4d65e8a5 100644 --- a/internal/controller/context_controller_test.go +++ b/internal/controller/context_controller_test.go @@ -8,6 +8,7 @@ import ( "github.com/gin-gonic/gin" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/tinyauthapp/tinyauth/internal/controller" "github.com/tinyauthapp/tinyauth/internal/model" "github.com/tinyauthapp/tinyauth/internal/utils" @@ -44,7 +45,7 @@ func TestContextController(t *testing.T) { WarningsEnabled: cfg.UI.WarningsEnabled, } bytes, err := json.Marshal(expectedAppContextResponse) - assert.NoError(t, err) + require.NoError(t, err) return string(bytes) }(), }, @@ -58,7 +59,7 @@ func TestContextController(t *testing.T) { Message: "Unauthorized", } bytes, err := json.Marshal(expectedUserContextResponse) - assert.NoError(t, err) + require.NoError(t, err) return string(bytes) }(), }, @@ -91,7 +92,7 @@ func TestContextController(t *testing.T) { Provider: "local", } bytes, err := json.Marshal(expectedUserContextResponse) - assert.NoError(t, err) + require.NoError(t, err) return string(bytes) }(), }, @@ -113,7 +114,7 @@ func TestContextController(t *testing.T) { recorder := httptest.NewRecorder() request, err := http.NewRequest("GET", test.path, nil) - assert.NoError(t, err) + require.NoError(t, err) router.ServeHTTP(recorder, request) diff --git a/internal/controller/health_controller_test.go b/internal/controller/health_controller_test.go index 2d8ef349..7576d518 100644 --- a/internal/controller/health_controller_test.go +++ b/internal/controller/health_controller_test.go @@ -8,6 +8,7 @@ import ( "github.com/gin-gonic/gin" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "github.com/tinyauthapp/tinyauth/internal/controller" ) @@ -28,7 +29,7 @@ func TestHealthController(t *testing.T) { "message": "Healthy", } bytes, err := json.Marshal(expectedHealthResponse) - assert.NoError(t, err) + require.NoError(t, err) return string(bytes) }(), }, @@ -42,7 +43,7 @@ func TestHealthController(t *testing.T) { "message": "Healthy", } bytes, err := json.Marshal(expectedHealthResponse) - assert.NoError(t, err) + require.NoError(t, err) return string(bytes) }(), }, @@ -59,7 +60,7 @@ func TestHealthController(t *testing.T) { recorder := httptest.NewRecorder() request, err := http.NewRequest(test.method, test.path, nil) - assert.NoError(t, err) + require.NoError(t, err) router.ServeHTTP(recorder, request) diff --git a/internal/controller/oidc_controller_test.go b/internal/controller/oidc_controller_test.go index 9d552bbe..59cabf8b 100644 --- a/internal/controller/oidc_controller_test.go +++ b/internal/controller/oidc_controller_test.go @@ -89,7 +89,7 @@ func TestOIDCController(t *testing.T) { var res map[string]any err := json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res["redirect_uri"], "https://tinyauth.example.com/error?error=User+is+not+logged+in+or+the+session+is+invalid") }, @@ -109,7 +109,7 @@ func TestOIDCController(t *testing.T) { Nonce: "some-nonce", } reqBodyBytes, err := json.Marshal(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/authorize", strings.NewReader(string(reqBodyBytes))) req.Header.Set("Content-Type", "application/json") @@ -117,7 +117,7 @@ func TestOIDCController(t *testing.T) { var res map[string]any err = json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res["redirect_uri"], "https://test.example.com/callback?error=unsupported_response_type&error_description=Invalid+request+parameters&state=some-state") }, @@ -137,7 +137,7 @@ func TestOIDCController(t *testing.T) { Nonce: "some-nonce", } reqBodyBytes, err := json.Marshal(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/authorize", strings.NewReader(string(reqBodyBytes))) req.Header.Set("Content-Type", "application/json") @@ -146,11 +146,11 @@ func TestOIDCController(t *testing.T) { var res map[string]any err = json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) redirectURI := res["redirect_uri"].(string) url, err := url.Parse(redirectURI) - assert.NoError(t, err) + require.NoError(t, err) queryParams := url.Query() assert.Equal(t, queryParams.Get("state"), "some-state") @@ -169,7 +169,7 @@ func TestOIDCController(t *testing.T) { RedirectURI: "https://test.example.com/callback", } reqBodyEncoded, err := query.Values(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/token", strings.NewReader(reqBodyEncoded.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") @@ -177,7 +177,7 @@ func TestOIDCController(t *testing.T) { var res map[string]any err = json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, res["error"], "unsupported_grant_type") }, @@ -192,7 +192,7 @@ func TestOIDCController(t *testing.T) { RedirectURI: "https://test.example.com/callback", } reqBodyEncoded, err := query.Values(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/token", strings.NewReader(reqBodyEncoded.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") @@ -230,7 +230,7 @@ func TestOIDCController(t *testing.T) { RedirectURI: "https://test.example.com/callback", } reqBodyEncoded, err := query.Values(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/token", strings.NewReader(reqBodyEncoded.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") @@ -253,11 +253,11 @@ func TestOIDCController(t *testing.T) { var authorizeRes map[string]any err := json.Unmarshal(authorizeTestRecorder.Body.Bytes(), &authorizeRes) - assert.NoError(t, err) + require.NoError(t, err) redirectURI := authorizeRes["redirect_uri"].(string) url, err := url.Parse(redirectURI) - assert.NoError(t, err) + require.NoError(t, err) queryParams := url.Query() code := queryParams.Get("code") @@ -269,7 +269,7 @@ func TestOIDCController(t *testing.T) { RedirectURI: "https://test.example.com/callback", } reqBodyEncoded, err := query.Values(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/token", strings.NewReader(reqBodyEncoded.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") @@ -292,7 +292,7 @@ func TestOIDCController(t *testing.T) { var tokenRes map[string]any err := json.Unmarshal(tokenRecorder.Body.Bytes(), &tokenRes) - assert.NoError(t, err) + require.NoError(t, err) _, ok := tokenRes["refresh_token"] assert.True(t, ok, "Expected refresh token in response") @@ -306,7 +306,7 @@ func TestOIDCController(t *testing.T) { ClientSecret: "some-client-secret", } reqBodyEncoded, err := query.Values(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/token", strings.NewReader(reqBodyEncoded.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") @@ -318,7 +318,7 @@ func TestOIDCController(t *testing.T) { assert.Equal(t, 200, recorder.Code) var refreshRes map[string]any err = json.Unmarshal(recorder.Body.Bytes(), &refreshRes) - assert.NoError(t, err) + require.NoError(t, err) _, ok = refreshRes["access_token"] assert.True(t, ok, "Expected access token in refresh response") @@ -339,11 +339,11 @@ func TestOIDCController(t *testing.T) { var authorizeRes map[string]any err := json.Unmarshal(authorizeTestRecorder.Body.Bytes(), &authorizeRes) - assert.NoError(t, err) + require.NoError(t, err) redirectURI := authorizeRes["redirect_uri"].(string) url, err := url.Parse(redirectURI) - assert.NoError(t, err) + require.NoError(t, err) queryParams := url.Query() code := queryParams.Get("code") @@ -355,7 +355,7 @@ func TestOIDCController(t *testing.T) { RedirectURI: "https://test.example.com/callback", } reqBodyEncoded, err := query.Values(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/token", strings.NewReader(reqBodyEncoded.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") @@ -375,7 +375,7 @@ func TestOIDCController(t *testing.T) { var secondRes map[string]any err = json.Unmarshal(secondRecorder.Body.Bytes(), &secondRes) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, "invalid_grant", secondRes["error"]) }, @@ -403,7 +403,7 @@ func TestOIDCController(t *testing.T) { var tokenRes map[string]any err := json.Unmarshal(tokenRecorder.Body.Bytes(), &tokenRes) - assert.NoError(t, err) + require.NoError(t, err) accessToken := tokenRes["access_token"].(string) assert.NotEmpty(t, accessToken) @@ -415,7 +415,7 @@ func TestOIDCController(t *testing.T) { var userInfoRes map[string]any err = json.Unmarshal(recorder.Body.Bytes(), &userInfoRes) - assert.NoError(t, err) + require.NoError(t, err) _, ok := userInfoRes["sub"] assert.True(t, ok, "Expected sub claim in userinfo response") @@ -435,7 +435,7 @@ func TestOIDCController(t *testing.T) { var res map[string]any err := json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, "invalid_request", res["error"]) }, }, @@ -450,7 +450,7 @@ func TestOIDCController(t *testing.T) { var res map[string]any err := json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, "invalid_request", res["error"]) }, }, @@ -465,7 +465,7 @@ func TestOIDCController(t *testing.T) { var res map[string]any err := json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, "invalid_request", res["error"]) }, }, @@ -480,7 +480,7 @@ func TestOIDCController(t *testing.T) { var res map[string]any err := json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, "invalid_grant", res["error"]) }, }, @@ -495,7 +495,7 @@ func TestOIDCController(t *testing.T) { var res map[string]any err := json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, "invalid_request", res["error"]) }, }, @@ -510,7 +510,7 @@ func TestOIDCController(t *testing.T) { var res map[string]any err := json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, "invalid_request", res["error"]) }, }, @@ -527,7 +527,7 @@ func TestOIDCController(t *testing.T) { var tokenRes map[string]any err := json.Unmarshal(tokenRecorder.Body.Bytes(), &tokenRes) - assert.NoError(t, err) + require.NoError(t, err) accessToken := tokenRes["access_token"].(string) assert.NotEmpty(t, accessToken) @@ -541,7 +541,7 @@ func TestOIDCController(t *testing.T) { var userInfoRes map[string]any err = json.Unmarshal(recorder.Body.Bytes(), &userInfoRes) - assert.NoError(t, err) + require.NoError(t, err) _, ok := userInfoRes["sub"] assert.True(t, ok, "Expected sub claim in userinfo response") @@ -565,7 +565,7 @@ func TestOIDCController(t *testing.T) { CodeChallengeMethod: "", } reqBodyBytes, err := json.Marshal(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/authorize", strings.NewReader(string(reqBodyBytes))) req.Header.Set("Content-Type", "application/json") @@ -574,11 +574,11 @@ func TestOIDCController(t *testing.T) { var res map[string]any err = json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) redirectURI := res["redirect_uri"].(string) url, err := url.Parse(redirectURI) - assert.NoError(t, err) + require.NoError(t, err) queryParams := url.Query() assert.Equal(t, queryParams.Get("state"), "some-state") @@ -595,7 +595,7 @@ func TestOIDCController(t *testing.T) { CodeVerifier: "some-challenge", } reqBodyEncoded, err := query.Values(tokenReqBody) - assert.NoError(t, err) + require.NoError(t, err) req = httptest.NewRequest("POST", "/api/oidc/token", strings.NewReader(reqBodyEncoded.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") @@ -626,7 +626,7 @@ func TestOIDCController(t *testing.T) { CodeChallengeMethod: "S256", } reqBodyBytes, err := json.Marshal(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/authorize", strings.NewReader(string(reqBodyBytes))) req.Header.Set("Content-Type", "application/json") @@ -635,11 +635,11 @@ func TestOIDCController(t *testing.T) { var res map[string]any err = json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) redirectURI := res["redirect_uri"].(string) url, err := url.Parse(redirectURI) - assert.NoError(t, err) + require.NoError(t, err) queryParams := url.Query() assert.Equal(t, queryParams.Get("state"), "some-state") @@ -656,7 +656,7 @@ func TestOIDCController(t *testing.T) { CodeVerifier: "some-challenge", } reqBodyEncoded, err := query.Values(tokenReqBody) - assert.NoError(t, err) + require.NoError(t, err) req = httptest.NewRequest("POST", "/api/oidc/token", strings.NewReader(reqBodyEncoded.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") @@ -687,7 +687,7 @@ func TestOIDCController(t *testing.T) { CodeChallengeMethod: "S256", } reqBodyBytes, err := json.Marshal(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/authorize", strings.NewReader(string(reqBodyBytes))) req.Header.Set("Content-Type", "application/json") @@ -696,11 +696,11 @@ func TestOIDCController(t *testing.T) { var res map[string]any err = json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) redirectURI := res["redirect_uri"].(string) url, err := url.Parse(redirectURI) - assert.NoError(t, err) + require.NoError(t, err) queryParams := url.Query() assert.Equal(t, queryParams.Get("state"), "some-state") @@ -717,7 +717,7 @@ func TestOIDCController(t *testing.T) { CodeVerifier: "some-challenge-1", } reqBodyEncoded, err := query.Values(tokenReqBody) - assert.NoError(t, err) + require.NoError(t, err) req = httptest.NewRequest("POST", "/api/oidc/token", strings.NewReader(reqBodyEncoded.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") @@ -748,7 +748,7 @@ func TestOIDCController(t *testing.T) { CodeChallengeMethod: "foo", } reqBodyBytes, err := json.Marshal(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/authorize", strings.NewReader(string(reqBodyBytes))) req.Header.Set("Content-Type", "application/json") @@ -757,11 +757,11 @@ func TestOIDCController(t *testing.T) { var res map[string]any err = json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) redirectURI := res["redirect_uri"].(string) url, err := url.Parse(redirectURI) - assert.NoError(t, err) + require.NoError(t, err) queryParams := url.Query() error := queryParams.Get("error") @@ -780,11 +780,11 @@ func TestOIDCController(t *testing.T) { var res map[string]any err := json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) redirectURI := res["redirect_uri"].(string) url, err := url.Parse(redirectURI) - assert.NoError(t, err) + require.NoError(t, err) queryParams := url.Query() code := queryParams.Get("code") @@ -796,7 +796,7 @@ func TestOIDCController(t *testing.T) { RedirectURI: "https://test.example.com/callback", } reqBodyEncoded, err := query.Values(reqBody) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/oidc/token", strings.NewReader(reqBodyEncoded.Encode())) req.Header.Set("Content-Type", "application/x-www-form-urlencoded") @@ -807,7 +807,7 @@ func TestOIDCController(t *testing.T) { assert.Equal(t, 200, recorder.Code) err = json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) accessToken := res["access_token"].(string) assert.NotEmpty(t, accessToken) @@ -832,7 +832,7 @@ func TestOIDCController(t *testing.T) { assert.Equal(t, 401, recorder.Code) err = json.Unmarshal(recorder.Body.Bytes(), &res) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, "invalid_grant", res["error"]) }, }, diff --git a/internal/controller/user_controller_test.go b/internal/controller/user_controller_test.go index bfe232fc..e834a8b5 100644 --- a/internal/controller/user_controller_test.go +++ b/internal/controller/user_controller_test.go @@ -95,7 +95,7 @@ func TestUserController(t *testing.T) { Password: "password", } loginReqBody, err := json.Marshal(loginReq) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/user/login", strings.NewReader(string(loginReqBody))) req.Header.Set("Content-Type", "application/json") @@ -103,7 +103,7 @@ func TestUserController(t *testing.T) { router.ServeHTTP(recorder, req) assert.Equal(t, 200, recorder.Code) - assert.Len(t, recorder.Result().Cookies(), 1) + require.Len(t, recorder.Result().Cookies(), 1) cookie := recorder.Result().Cookies()[0] assert.Equal(t, "tinyauth-session", cookie.Name) @@ -123,7 +123,7 @@ func TestUserController(t *testing.T) { Password: "wrongpassword", } loginReqBody, err := json.Marshal(loginReq) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/user/login", strings.NewReader(string(loginReqBody))) req.Header.Set("Content-Type", "application/json") @@ -144,7 +144,7 @@ func TestUserController(t *testing.T) { Password: "wrongpassword", } loginReqBody, err := json.Marshal(loginReq) - assert.NoError(t, err) + require.NoError(t, err) for range 3 { recorder := httptest.NewRecorder() @@ -179,7 +179,7 @@ func TestUserController(t *testing.T) { Password: "password", } loginReqBody, err := json.Marshal(loginReq) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/user/login", strings.NewReader(string(loginReqBody))) req.Header.Set("Content-Type", "application/json") @@ -190,12 +190,12 @@ func TestUserController(t *testing.T) { decodedBody := make(map[string]any) err = json.Unmarshal(recorder.Body.Bytes(), &decodedBody) - assert.NoError(t, err) + require.NoError(t, err) assert.Equal(t, decodedBody["totpPending"], true) // should set the session cookie - assert.Len(t, recorder.Result().Cookies(), 1) + require.Len(t, recorder.Result().Cookies(), 1) cookie := recorder.Result().Cookies()[0] assert.Equal(t, "tinyauth-session", cookie.Name) assert.True(t, cookie.HttpOnly) @@ -216,7 +216,7 @@ func TestUserController(t *testing.T) { Password: "password", } loginReqBody, err := json.Marshal(loginReq) - assert.NoError(t, err) + require.NoError(t, err) req := httptest.NewRequest("POST", "/api/user/login", strings.NewReader(string(loginReqBody))) req.Header.Set("Content-Type", "application/json") @@ -225,7 +225,7 @@ func TestUserController(t *testing.T) { assert.Equal(t, 200, recorder.Code) cookies := recorder.Result().Cookies() - assert.Len(t, cookies, 1) + require.Len(t, cookies, 1) cookie := cookies[0] assert.Equal(t, "tinyauth-session", cookie.Name) @@ -239,7 +239,7 @@ func TestUserController(t *testing.T) { assert.Equal(t, 200, recorder.Code) cookies = recorder.Result().Cookies() - assert.Len(t, cookies, 1) + require.Len(t, cookies, 1) cookie = cookies[0] assert.Equal(t, "tinyauth-session", cookie.Name) @@ -266,14 +266,14 @@ func TestUserController(t *testing.T) { require.NoError(t, err) code, err := totp.GenerateCode("JPIEBDKJH6UGWJMX66RR3S55UFP2SGKK", time.Now()) - assert.NoError(t, err) + require.NoError(t, err) totpReq := controller.TotpRequest{ Code: code, } totpReqBody, err := json.Marshal(totpReq) - assert.NoError(t, err) + require.NoError(t, err) recorder = httptest.NewRecorder() req := httptest.NewRequest("POST", "/api/user/totp", strings.NewReader(string(totpReqBody))) @@ -288,7 +288,7 @@ func TestUserController(t *testing.T) { router.ServeHTTP(recorder, req) assert.Equal(t, 200, recorder.Code) - assert.Len(t, recorder.Result().Cookies(), 1) + require.Len(t, recorder.Result().Cookies(), 1) // should set a new session cookie with totp pending removed totpCookie := recorder.Result().Cookies()[0] @@ -311,7 +311,7 @@ func TestUserController(t *testing.T) { } totpReqBody, err := json.Marshal(totpReq) - assert.NoError(t, err) + require.NoError(t, err) recorder = httptest.NewRecorder() req := httptest.NewRequest("POST", "/api/user/totp", strings.NewReader(string(totpReqBody)))