From 6e4b41894f4ece2e69789e6b8140aa09604caa36 Mon Sep 17 00:00:00 2001 From: Kharec Date: Sun, 23 Nov 2025 14:22:35 +0100 Subject: [PATCH] fix: update test cases to use createCreatePostRequests --- internal/handlers/post_handler_test.go | 21 ++++++------ internal/handlers/security_test.go | 8 ++--- internal/handlers/user_handler_test.go | 11 +++---- internal/handlers/vote_handler_test.go | 45 +++++++++++++------------- 4 files changed, 40 insertions(+), 45 deletions(-) diff --git a/internal/handlers/post_handler_test.go b/internal/handlers/post_handler_test.go index e97a19d..ffc501e 100644 --- a/internal/handlers/post_handler_test.go +++ b/internal/handlers/post_handler_test.go @@ -69,9 +69,8 @@ func TestPostHandlerCreatePostWithTitleFetcher(t *testing.T) { handler := NewPostHandler(repo, titleFetcher, nil) - request := httptest.NewRequest(http.MethodPost, "/api/posts", bytes.NewBufferString(`{"url":"https://example.com","content":"Test content"}`)) + request := createCreatePostRequest(`{"url":"https://example.com","content":"Test content"}`) request = testutils.WithUserContext(request, middleware.UserIDKey, uint(1)) - request.Header.Set("Content-Type", "application/json") recorder := httptest.NewRecorder() handler.CreatePost(recorder, request) @@ -171,7 +170,7 @@ func TestPostHandlerUpdatePostUnauthorized(t *testing.T) { handler := NewPostHandler(repo, nil, nil) - request := httptest.NewRequest(http.MethodPut, "/api/posts/1", bytes.NewBufferString(`{"title":"Updated Title","content":"Updated content"}`)) + request := createUpdatePostRequest(`{"title":"Updated Title","content":"Updated content"}`) request = testutils.WithUserContext(request, middleware.UserIDKey, uint(1)) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) request.Header.Set("Content-Type", "application/json") @@ -278,8 +277,7 @@ func TestPostHandlerCreatePostSuccess(t *testing.T) { handler := NewPostHandler(repo, fetcher, nil) - body := bytes.NewBufferString(`{"title":" ","url":"https://example.com","content":"Go"}`) - request := httptest.NewRequest(http.MethodPost, "/api/posts", body) + request := createCreatePostRequest(`{"title":" ","url":"https://example.com","content":"Go"}`) ctx := context.WithValue(request.Context(), middleware.UserIDKey, uint(42)) request = request.WithContext(ctx) @@ -297,7 +295,7 @@ func TestPostHandlerCreatePostValidation(t *testing.T) { handler := NewPostHandler(testutils.NewPostRepositoryStub(), &testutils.TitleFetcherStub{}, nil) recorder := httptest.NewRecorder() - request := httptest.NewRequest(http.MethodPost, "/api/posts", bytes.NewBufferString(`{"title":"","url":"","content":""}`)) + request := createCreatePostRequest(`{"title":"","url":"","content":""}`) request = request.WithContext(context.WithValue(request.Context(), middleware.UserIDKey, uint(1))) handler.CreatePost(recorder, request) if recorder.Result().StatusCode != http.StatusBadRequest { @@ -305,14 +303,14 @@ func TestPostHandlerCreatePostValidation(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts", bytes.NewBufferString(`invalid json`)) + request = createCreatePostRequest(`invalid json`) handler.CreatePost(recorder, request) if recorder.Result().StatusCode != http.StatusBadRequest { t.Fatalf("expected 400 for invalid JSON, got %d", recorder.Result().StatusCode) } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts", bytes.NewBufferString(`{"title":"ok","url":"https://example.com"}`)) + request = createCreatePostRequest(`{"title":"ok","url":"https://example.com"}`) handler.CreatePost(recorder, request) testutils.AssertHTTPStatus(t, recorder, http.StatusUnauthorized) } @@ -329,15 +327,14 @@ func TestPostHandlerCreatePostTitleFetcherErrors(t *testing.T) { {name: "Generic", err: errors.New("timeout"), wantStatus: http.StatusBadGateway, wantMsg: "Failed to fetch title"}, } - for _, tc := range tests { + for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { repo := testutils.NewPostRepositoryStub() fetcher := &testutils.TitleFetcherStub{FetchTitleFn: func(ctx context.Context, rawURL string) (string, error) { return "", tc.err }} handler := NewPostHandler(repo, fetcher, nil) - body := bytes.NewBufferString(`{"title":" ","url":"https://example.com"}`) - request := httptest.NewRequest(http.MethodPost, "/api/posts", body) + request := createCreatePostRequest(`{"title":" ","url":"https://example.com"}`) request = request.WithContext(context.WithValue(request.Context(), middleware.UserIDKey, uint(1))) recorder := httptest.NewRecorder() @@ -495,7 +492,7 @@ func TestPostHandlerUpdatePost(t *testing.T) { } handler := NewPostHandler(repo, &testutils.TitleFetcherStub{}, nil) - request := httptest.NewRequest(http.MethodPut, "/api/posts/"+tt.postID, bytes.NewBufferString(tt.requestBody)) + request := createUpdatePostRequest(tt.requestBody) if tt.userID > 0 { ctx := context.WithValue(request.Context(), middleware.UserIDKey, tt.userID) request = request.WithContext(ctx) diff --git a/internal/handlers/security_test.go b/internal/handlers/security_test.go index 9de5104..a9e37d3 100644 --- a/internal/handlers/security_test.go +++ b/internal/handlers/security_test.go @@ -41,7 +41,7 @@ func TestPostHandler_XSSProtection_Comprehensive(t *testing.T) { } body, _ := json.Marshal(postData) - request := httptest.NewRequest("POST", "/api/posts", bytes.NewBuffer(body)) + request := createCreatePostRequest(string(body)) request.Header.Set("Content-Type", "application/json") request = request.WithContext(context.WithValue(request.Context(), middleware.UserIDKey, uint(1))) recorder := httptest.NewRecorder() @@ -123,7 +123,7 @@ func TestPostHandler_InputValidation(t *testing.T) { } body, _ := json.Marshal(postData) - request := httptest.NewRequest("POST", "/api/posts", bytes.NewBuffer(body)) + request := createCreatePostRequest(string(body)) request.Header.Set("Content-Type", "application/json") request = request.WithContext(context.WithValue(request.Context(), middleware.UserIDKey, uint(1))) recorder := httptest.NewRecorder() @@ -230,7 +230,7 @@ func TestAuthHandler_PasswordValidation(t *testing.T) { } body, _ := json.Marshal(registerData) - request := httptest.NewRequest("POST", "/api/auth/register", bytes.NewBuffer(body)) + request := createRegisterRequest(string(body)) request.Header.Set("Content-Type", "application/json") recorder := httptest.NewRecorder() @@ -290,7 +290,7 @@ func TestAuthHandler_UsernameSanitization(t *testing.T) { } body, _ := json.Marshal(registerData) - request := httptest.NewRequest("POST", "/api/auth/register", bytes.NewBuffer(body)) + request := createRegisterRequest(string(body)) request.Header.Set("Content-Type", "application/json") recorder := httptest.NewRecorder() diff --git a/internal/handlers/user_handler_test.go b/internal/handlers/user_handler_test.go index 5893a4b..1cd1c15 100644 --- a/internal/handlers/user_handler_test.go +++ b/internal/handlers/user_handler_test.go @@ -1,7 +1,6 @@ package handlers import ( - "bytes" "encoding/json" "fmt" "net/http" @@ -103,7 +102,7 @@ func TestUserHandlerCreateUser(t *testing.T) { return nil }}) - request := httptest.NewRequest(http.MethodPost, "/api/users", bytes.NewBufferString(`{"username":"user","email":"user@example.com","password":"Password123!"}`)) + request := createRegisterRequest(`{"username":"user","email":"user@example.com","password":"Password123!"}`) recorder := httptest.NewRecorder() handler.CreateUser(recorder, request) testutils.AssertHTTPStatus(t, recorder, http.StatusCreated) @@ -126,14 +125,14 @@ func TestUserHandlerCreateUser(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/users", bytes.NewBufferString("invalid")) + request = createRegisterRequest("invalid") handler.CreateUser(recorder, request) if recorder.Result().StatusCode != http.StatusBadRequest { t.Fatalf("expected 400 for invalid json, got %d", recorder.Result().StatusCode) } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/users", bytes.NewBufferString(`{"username":"","email":"","password":""}`)) + request = createRegisterRequest(`{"username":"","email":"","password":""}`) handler.CreateUser(recorder, request) if recorder.Result().StatusCode != http.StatusBadRequest { t.Fatalf("expected 400 for missing fields, got %d", recorder.Result().StatusCode) @@ -144,7 +143,7 @@ func TestUserHandlerCreateUser(t *testing.T) { } handler = newUserHandler(repo) recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/users", bytes.NewBufferString(`{"username":"user","email":"user@example.com","password":"Password123!"}`)) + request = createRegisterRequest(`{"username":"user","email":"user@example.com","password":"Password123!"}`) handler.CreateUser(recorder, request) testutils.AssertHTTPStatus(t, recorder, http.StatusConflict) } @@ -350,7 +349,7 @@ func TestUserHandler_PasswordValidation(t *testing.T) { handler := NewUserHandler(repo, authService) requestBody := fmt.Sprintf(`{"username":"testuser","email":"test@example.com","password":"%s"}`, tt.password) - request := httptest.NewRequest(http.MethodPost, "/api/users", bytes.NewBufferString(requestBody)) + request := createRegisterRequest(requestBody) request.Header.Set("Content-Type", "application/json") recorder := httptest.NewRecorder() diff --git a/internal/handlers/vote_handler_test.go b/internal/handlers/vote_handler_test.go index 159f3f7..0a23582 100644 --- a/internal/handlers/vote_handler_test.go +++ b/internal/handlers/vote_handler_test.go @@ -1,7 +1,6 @@ package handlers import ( - "bytes" "context" "encoding/json" "fmt" @@ -59,13 +58,13 @@ func TestVoteHandlerCastVote(t *testing.T) { handler := newVoteHandlerWithRepos() recorder := httptest.NewRecorder() - request := httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"up"}`)) + request := createVoteRequest(`{"type":"up"}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) handler.CastVote(recorder, request) testutils.AssertHTTPStatus(t, recorder, http.StatusUnauthorized) recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/abc/vote", bytes.NewBufferString(`{"type":"up"}`)) + request = createVoteRequest(`{"type":"up"}`) request = testutils.WithURLParams(request, map[string]string{"id": "abc"}) ctx := context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx) @@ -73,7 +72,7 @@ func TestVoteHandlerCastVote(t *testing.T) { testutils.AssertHTTPStatus(t, recorder, http.StatusBadRequest) recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`invalid`)) + request = createVoteRequest(`invalid`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx) @@ -83,7 +82,7 @@ func TestVoteHandlerCastVote(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"maybe"}`)) + request = createVoteRequest(`{"type":"maybe"}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx) @@ -93,7 +92,7 @@ func TestVoteHandlerCastVote(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"up"}`)) + request = createVoteRequest(`{"type":"up"}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx) @@ -101,7 +100,7 @@ func TestVoteHandlerCastVote(t *testing.T) { testutils.AssertHTTPStatus(t, recorder, http.StatusOK) recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"down"}`)) + request = createVoteRequest(`{"type":"down"}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, uint(2)) request = request.WithContext(ctx) @@ -111,7 +110,7 @@ func TestVoteHandlerCastVote(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"none"}`)) + request = createVoteRequest(`{"type":"none"}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, uint(3)) request = request.WithContext(ctx) @@ -125,7 +124,7 @@ func TestVoteHandlerCastVotePostNotFound(t *testing.T) { handler, _, posts := newVoteHandlerWithReposRefs() delete(posts, 1) - request := httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"up"}`)) + request := createVoteRequest(`{"type":"up"}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx := context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx) @@ -164,7 +163,7 @@ func TestVoteHandlerRemoveVote(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"up"}`)) + request = createVoteRequest(`{"type":"up"}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx) @@ -202,7 +201,7 @@ func TestVoteHandlerRemoveVotePostNotFound(t *testing.T) { func TestVoteHandlerRemoveVoteUnexpectedError(t *testing.T) { handler, voteRepo, _ := newVoteHandlerWithReposRefs() - request := httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"up"}`)) + request := createVoteRequest(`{"type":"up"}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx := context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx) @@ -257,7 +256,7 @@ func TestVoteHandlerGetUserVote(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"up"}`)) + request = createVoteRequest(`{"type":"up"}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx) @@ -301,7 +300,7 @@ func TestVoteHandlerGetPostVotes(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"up"}`)) + request = createVoteRequest(`{"type":"up"}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx := context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx) @@ -311,7 +310,7 @@ func TestVoteHandlerGetPostVotes(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"down"}`)) + request = createVoteRequest(`{"type":"down"}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, uint(2)) request = request.WithContext(ctx) @@ -345,7 +344,7 @@ func TestVoteFlowRegression(t *testing.T) { postID := "1" recorder := httptest.NewRecorder() - request := httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"up"}`)) + request := createVoteRequest(`{"type":"up"}`) request = testutils.WithURLParams(request, map[string]string{"id": postID}) ctx := context.WithValue(request.Context(), middleware.UserIDKey, userID) request = request.WithContext(ctx) @@ -363,7 +362,7 @@ func TestVoteFlowRegression(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"down"}`)) + request = createVoteRequest(`{"type":"down"}`) request = testutils.WithURLParams(request, map[string]string{"id": postID}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, userID) request = request.WithContext(ctx) @@ -373,7 +372,7 @@ func TestVoteFlowRegression(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"none"}`)) + request = createVoteRequest(`{"type":"none"}`) request = testutils.WithURLParams(request, map[string]string{"id": postID}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, userID) request = request.WithContext(ctx) @@ -404,7 +403,7 @@ func TestVoteFlowRegression(t *testing.T) { postID := "1" recorder := httptest.NewRecorder() - request := httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"up"}`)) + request := createVoteRequest(`{"type":"up"}`) request = testutils.WithURLParams(request, map[string]string{"id": postID}) ctx := context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx) @@ -414,7 +413,7 @@ func TestVoteFlowRegression(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"down"}`)) + request = createVoteRequest(`{"type":"down"}`) request = testutils.WithURLParams(request, map[string]string{"id": postID}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, uint(2)) request = request.WithContext(ctx) @@ -424,7 +423,7 @@ func TestVoteFlowRegression(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"up"}`)) + request = createVoteRequest(`{"type":"up"}`) request = testutils.WithURLParams(request, map[string]string{"id": postID}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, uint(3)) request = request.WithContext(ctx) @@ -452,7 +451,7 @@ func TestVoteFlowRegression(t *testing.T) { t.Run("ErrorHandlingEdgeCases", func(t *testing.T) { recorder := httptest.NewRecorder() - request := httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(``)) + request := createVoteRequest(``) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx := context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx) @@ -460,7 +459,7 @@ func TestVoteFlowRegression(t *testing.T) { testutils.AssertHTTPStatus(t, recorder, http.StatusBadRequest) recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{}`)) + request = createVoteRequest(`{}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx) @@ -470,7 +469,7 @@ func TestVoteFlowRegression(t *testing.T) { } recorder = httptest.NewRecorder() - request = httptest.NewRequest(http.MethodPost, "/api/posts/1/vote", bytes.NewBufferString(`{"type":"invalid"}`)) + request = createVoteRequest(`{"type":"invalid"}`) request = testutils.WithURLParams(request, map[string]string{"id": "1"}) ctx = context.WithValue(request.Context(), middleware.UserIDKey, uint(1)) request = request.WithContext(ctx)