From aee76e9aee8a85d635fa2d1e7ea529dbf97b8a47 Mon Sep 17 00:00:00 2001 From: Ricardo Campos Date: Wed, 25 Jun 2025 11:28:01 -0300 Subject: [PATCH] fix: delete request (#532) * fix: corrects delete endpoint to follow HTTP DELETE standard (#509) * fix: corrects delete endpoint to follow HTTP DELETE standard * fix: refactor for consistent formatting * feat: improve account deletion to use delete method * test: fix account tests --------- Co-authored-by: Patrick Bpds --- client/src/__test__/views/Account.test.tsx | 2 +- client/src/views/Account/index.tsx | 2 +- .../server/controller/UserSessionController.java | 10 ++++++---- .../server/controller/UserSessionControllerTest.java | 6 +++--- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/client/src/__test__/views/Account.test.tsx b/client/src/__test__/views/Account.test.tsx index b586df0..2dedcc8 100644 --- a/client/src/__test__/views/Account.test.tsx +++ b/client/src/__test__/views/Account.test.tsx @@ -87,7 +87,7 @@ describe('Account Component', () => { fireEvent.click(confirmButton); await waitFor(() => { - expect(api.postJSON).toHaveBeenCalledWith(ApiConfig.deleteAccountUrl, {}); + expect(api.deleteNoContent).toHaveBeenCalledWith(ApiConfig.deleteAccountUrl); expect(authContextMock.signOut).toHaveBeenCalled(); }); }); diff --git a/client/src/views/Account/index.tsx b/client/src/views/Account/index.tsx index 06b4b11..1a4dcfd 100644 --- a/client/src/views/Account/index.tsx +++ b/client/src/views/Account/index.tsx @@ -48,7 +48,7 @@ function Account(): React.ReactNode { */ const deleteAccount = async (): Promise => { setShowAlert(false); - await api.postJSON(ApiConfig.deleteAccountUrl, {}); + await api.deleteNoContent(ApiConfig.deleteAccountUrl); signOut(); clearStorage(); }; diff --git a/server/src/main/java/br/com/tasknoteapp/server/controller/UserSessionController.java b/server/src/main/java/br/com/tasknoteapp/server/controller/UserSessionController.java index dbae426..7d1ab3a 100644 --- a/server/src/main/java/br/com/tasknoteapp/server/controller/UserSessionController.java +++ b/server/src/main/java/br/com/tasknoteapp/server/controller/UserSessionController.java @@ -11,8 +11,9 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -52,7 +53,7 @@ public class UserSessionController { * * @returns {@link UserResponse} with the user information. */ - @PostMapping("/delete-account") + @DeleteMapping("/delete-account") @Operation( summary = "Delete the user account.", description = "Delete all the user data and information from the server.", @@ -63,7 +64,8 @@ public class UserSessionController { description = "Unauthorized. Access Denied", content = @Content(schema = @Schema(implementation = Void.class))) }) - public UserResponse deleteAccount() { - return userSessionService.deleteCurrentUserAccount(); + public ResponseEntity deleteAccount() { + UserResponse deleted = userSessionService.deleteCurrentUserAccount(); + return ResponseEntity.ok(deleted); } } diff --git a/server/src/test/java/br/com/tasknoteapp/server/controller/UserSessionControllerTest.java b/server/src/test/java/br/com/tasknoteapp/server/controller/UserSessionControllerTest.java index e74bc22..043c245 100644 --- a/server/src/test/java/br/com/tasknoteapp/server/controller/UserSessionControllerTest.java +++ b/server/src/test/java/br/com/tasknoteapp/server/controller/UserSessionControllerTest.java @@ -2,8 +2,8 @@ package br.com.tasknoteapp.server.controller; import static org.mockito.Mockito.when; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -68,7 +68,7 @@ class UserSessionControllerTest { mockMvc .perform( - post("/rest/user-sessions/delete-account") + delete("/rest/user-sessions/delete-account") .with(csrf().asHeader()) .header("Content-Type", MediaType.APPLICATION_JSON_VALUE) .accept(MediaType.APPLICATION_JSON)) @@ -81,7 +81,7 @@ class UserSessionControllerTest { void deleteAccount_unauthorized_shouldFail() throws Exception { mockMvc .perform( - post("/rest/user-sessions/delete-account") + delete("/rest/user-sessions/delete-account") .with(csrf().asHeader()) .header("Content-Type", MediaType.APPLICATION_JSON_VALUE) .accept(MediaType.APPLICATION_JSON))