diff --git a/src/main/java/catering/users/UserController.java b/src/main/java/catering/users/UserController.java index f44cff1..9c22567 100644 --- a/src/main/java/catering/users/UserController.java +++ b/src/main/java/catering/users/UserController.java @@ -60,6 +60,12 @@ public class UserController { @PostMapping("/register") String register(@Valid RegistrationForm form, Errors result) { + if ( + (!result.hasErrors()) && + (!userManagement.getUserByName(form.getUsername()).isEmpty()) + ) { + result.rejectValue("username", "username already in use"); + } if (result.hasErrors()){ return "register"; } @@ -85,6 +91,13 @@ public class UserController { public String editProfile(@LoggedIn UserAccount userAccount, @Valid ProfileForm form, Errors result, Model model) { String redirect = "redirect:/logout"; + if ( + (!result.hasErrors()) && + (!userManagement.getUserByName(form.getUsername()).isEmpty()) && + (userManagement.getUserByAccount(userAccount).get().getUsername() != form.getUsername()) + ) { + result.rejectValue("username", "username already in use"); + } if (result.hasErrors()){ return "profile"; } @@ -138,6 +151,13 @@ public class UserController { @PostMapping("/customers/edit/{id}") @PreAuthorize("hasRole('ADMIN')") public String updateCustomer(@PathVariable("id") User user, @Valid AdminForm form, Errors result) { + if ( + !result.hasErrors() && + !userManagement.getUserByName(form.getUsername()).isEmpty() && + !user.getUsername().equals(form.getUsername()) + ) { + result.rejectValue("username", "username already in use"); + } if (result.hasErrors()){ return "edit-customer"; } diff --git a/src/test/java/catering/users/UserControllerIntegrationTests.java b/src/test/java/catering/users/UserControllerIntegrationTests.java index 69f436f..a6456b6 100644 --- a/src/test/java/catering/users/UserControllerIntegrationTests.java +++ b/src/test/java/catering/users/UserControllerIntegrationTests.java @@ -57,6 +57,8 @@ class UserControllerIntegrationTests { createTestUser("jacob"); createTestUser("moana"); createTestUser("paul"); + createTestUser("mark"); + createTestUser("eva"); } @Test @@ -308,4 +310,47 @@ class UserControllerIntegrationTests { .extracting("username") .contains("jacob"); } + + @Test + @WithAnonymousUser + void userAlreadyExistsRegistration() throws Exception { + MockHttpServletRequestBuilder createCustomer = post("/register") + .param("username", "admin") + .param("password", "123") + .param("fullName", "Tom Klaus") + .param("address", "Baum Weg"); + mvc.perform(createCustomer).andExpect(content().string(containsString("Ungültiger Nutzername"))); + } + + @Test + @WithMockUser(username = "mark", password = "123") + void changeUsernameToExistingUsername() throws Exception { + assertTrue(userAccountManagement.findByUsername("jacob").isPresent()); + assertTrue(userAccountManagement.findByUsername("mark").isPresent()); + MockHttpServletRequestBuilder createCustomer = post("/profile") + .param("username", "admin") + .param("password", "") + .param("fullName", "Mark Klaus") + .param("address", "Baum Weg"); + mvc.perform(createCustomer).andExpect(content().string(containsString("Ungültiger Nutzername"))); + createCustomer = post("/profile") + .param("username", "jacob") + .param("password", "") + .param("fullName", "Mark Klaus") + .param("address", "Baum Weg"); + mvc.perform(createCustomer).andExpect(content().string(containsString("Ungültiger Nutzername"))); + assertTrue(userAccountManagement.findByUsername("mark").isPresent()); + } + + @Test + @WithMockUser(username = "admin", password = "admin", roles = "ADMIN") + void changeCustomerUsernameToExistingUsername() throws Exception { + assertTrue(userAccountManagement.findByUsername("eva").isPresent()); + mvc.perform(post("/customers/edit/" + userManagement.getUserByName("eva").get().getId()) + .param("username", "admin") + .param("fullName", "Eva Klaus") + .param("address", "Baum Weg") + ).andExpect(content().string(containsString("Ungültiger Nutzername"))); + assertTrue(userAccountManagement.findByUsername("eva").isPresent()); + } }