From ff94c91e5a7ff123b19b8a3901d574db5e072eae Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Apr 2026 14:03:09 +0000 Subject: [PATCH 1/3] Initial plan From ce57ed96e92f1abe2c5f9eb964078a9d75004c88 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Apr 2026 14:06:48 +0000 Subject: [PATCH 2/3] Refactor: remove brittle string-based exception checking in AuthService Agent-Logs-Url: https://github.com/fred-maina/ChatAppBackend/sessions/8eb2ae0e-0759-4cb6-ac06-ca3501f1c9c6 Co-authored-by: fred-maina <150168105+fred-maina@users.noreply.github.com> --- .../chatapp/Auth/services/AuthService.java | 37 ++++++------------- .../Auth/Services/AuthServiceTest.java | 11 ++---- 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/fredmaina/chatapp/Auth/services/AuthService.java b/src/main/java/com/fredmaina/chatapp/Auth/services/AuthService.java index 3364ab0..b3d224d 100644 --- a/src/main/java/com/fredmaina/chatapp/Auth/services/AuthService.java +++ b/src/main/java/com/fredmaina/chatapp/Auth/services/AuthService.java @@ -49,12 +49,12 @@ public class AuthService { @CacheEvict(value = "usernameCheck", key = "#request.username.toLowerCase()") public AuthResponse signUp(SignUpRequest request) { AuthResponse authResponse = new AuthResponse(); - if (request.getUsername() != null && userRepository.findByUsernameIgnoreCase(request.getUsername()).isPresent()) { - authResponse.setMessage("Username already exists (case-insensitive)"); + if (request.getUsername() != null && userRepository.existsByUsernameIgnoreCase(request.getUsername())) { + authResponse.setMessage("Username already exists"); authResponse.setSuccess(false); return authResponse; } - if (userRepository.findByEmail(request.getEmail()).isPresent()) { + if (userRepository.existsByEmail(request.getEmail())) { authResponse.setMessage("Email already exists"); authResponse.setSuccess(false); return authResponse; @@ -80,14 +80,8 @@ public AuthResponse signUp(SignUpRequest request) { authResponse.setUser(user); authResponse.setToken(token); } catch (DataIntegrityViolationException e) { - if (e.getMessage().contains("users_email_key")) { - authResponse.setMessage("Email already exists"); - } else if (e.getMessage().contains("idx_user_username") || e.getMessage().contains("users_username_key")) { - authResponse.setMessage("Username already exists"); - } else { - log.error("Data integrity violation during sign up: {}", e.getMessage()); - authResponse.setMessage("Data integrity violation"); - } + log.error("Data integrity violation during sign up: {}", e.getMessage()); + authResponse.setMessage("Data integrity violation"); authResponse.setSuccess(false); } catch (Exception e) { log.error("Unexpected error during sign up: {}", e.getMessage(), e); @@ -232,21 +226,12 @@ public AuthResponse setUsername(String email, String username) { if (existingUserByEmail.isPresent()) { User user = existingUserByEmail.get(); user.setUsername(username); - try { - userRepository.save(user); - return AuthResponse.builder() - .success(true) - .user(user) - .message("Username set successfully") - .build(); - } catch (DataIntegrityViolationException e) { - - log.error("Data integrity violation while setting username for email {}: {}", email, e.getMessage()); - return AuthResponse.builder() - .message("Username already taken or another data issue occurred.") - .success(false) - .build(); - } + userRepository.save(user); + return AuthResponse.builder() + .success(true) + .user(user) + .message("Username set successfully") + .build(); } return AuthResponse.builder() .message("Invalid email, user not found.") diff --git a/src/test/java/com/fredmaina/chatapp/Auth/Services/AuthServiceTest.java b/src/test/java/com/fredmaina/chatapp/Auth/Services/AuthServiceTest.java index b77792a..bec2dd7 100644 --- a/src/test/java/com/fredmaina/chatapp/Auth/Services/AuthServiceTest.java +++ b/src/test/java/com/fredmaina/chatapp/Auth/Services/AuthServiceTest.java @@ -11,7 +11,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.*; -import org.springframework.dao.DataIntegrityViolationException; import org.springframework.security.crypto.password.PasswordEncoder; import java.util.Optional; @@ -68,14 +67,13 @@ void testSignUp_duplicateEmail() { request.setPassword("mypassword"); request.setEmail("fred@example.com"); - when(passwordEncoder.encode(anyString())).thenReturn("encodedPassword"); - when(userRepository.save(any(User.class))).thenThrow( - new DataIntegrityViolationException("users_email_key")); + when(userRepository.existsByEmail("fred@example.com")).thenReturn(true); AuthResponse response = authService.signUp(request); assertFalse(response.isSuccess()); assertEquals("Email already exists", response.getMessage()); + verify(userRepository, never()).save(any(User.class)); } @Test @@ -85,14 +83,13 @@ void testSignUp_duplicateUsername() { request.setPassword("mypassword"); request.setEmail("fred@example.com"); - when(passwordEncoder.encode(anyString())).thenReturn("encodedPassword"); - when(userRepository.save(any(User.class))).thenThrow( - new DataIntegrityViolationException("users_username_key")); + when(userRepository.existsByUsernameIgnoreCase("fredmaina123")).thenReturn(true); AuthResponse response = authService.signUp(request); assertFalse(response.isSuccess()); assertEquals("Username already exists", response.getMessage()); + verify(userRepository, never()).save(any(User.class)); } @Test From 4630af86dca81dc0232e8f2a8001717ffe453ca3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 5 Apr 2026 14:08:50 +0000 Subject: [PATCH 3/3] Restore generic DataIntegrityViolationException safety net in setUsername Agent-Logs-Url: https://github.com/fred-maina/ChatAppBackend/sessions/8eb2ae0e-0759-4cb6-ac06-ca3501f1c9c6 Co-authored-by: fred-maina <150168105+fred-maina@users.noreply.github.com> --- .../chatapp/Auth/services/AuthService.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/fredmaina/chatapp/Auth/services/AuthService.java b/src/main/java/com/fredmaina/chatapp/Auth/services/AuthService.java index b3d224d..db9caeb 100644 --- a/src/main/java/com/fredmaina/chatapp/Auth/services/AuthService.java +++ b/src/main/java/com/fredmaina/chatapp/Auth/services/AuthService.java @@ -226,12 +226,20 @@ public AuthResponse setUsername(String email, String username) { if (existingUserByEmail.isPresent()) { User user = existingUserByEmail.get(); user.setUsername(username); - userRepository.save(user); - return AuthResponse.builder() - .success(true) - .user(user) - .message("Username set successfully") - .build(); + try { + userRepository.save(user); + return AuthResponse.builder() + .success(true) + .user(user) + .message("Username set successfully") + .build(); + } catch (DataIntegrityViolationException e) { + log.error("Data integrity violation while setting username for email {}: {}", email, e.getMessage()); + return AuthResponse.builder() + .message("Username already taken or another data issue occurred.") + .success(false) + .build(); + } } return AuthResponse.builder() .message("Invalid email, user not found.")