From 6e4fe1433941d4d9b41551d5473cdcd8fdf10101 Mon Sep 17 00:00:00 2001 From: Eren Asker Date: Tue, 28 Nov 2023 10:03:43 +0100 Subject: [PATCH] Add user tests --- .../users/UserControllerIntegrationTests.java | 79 ++++++++++++++- .../java/catering/users/UserUnitTests.java | 99 +++++++++++++++++++ 2 files changed, 174 insertions(+), 4 deletions(-) create mode 100644 src/test/java/catering/users/UserUnitTests.java diff --git a/src/test/java/catering/users/UserControllerIntegrationTests.java b/src/test/java/catering/users/UserControllerIntegrationTests.java index baf88a1..69f436f 100644 --- a/src/test/java/catering/users/UserControllerIntegrationTests.java +++ b/src/test/java/catering/users/UserControllerIntegrationTests.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: AGPL-3.0-or-later -// SPDX-FileCopyrightText: 2023 swt23w23 +// SPDX-FileCopyrightText: 2023-2024 swt23w23 package catering.users; import static org.assertj.core.api.Assertions.assertThat; @@ -7,11 +7,13 @@ import static org.assertj.core.api.Assertions.tuple; import static org.hamcrest.CoreMatchers.containsString; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; 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.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -19,10 +21,10 @@ import org.salespointframework.useraccount.UserAccountManagement; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.security.test.context.support.WithAnonymousUser; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; -import org.springframework.security.test.context.support.WithAnonymousUser; @AutoConfigureMockMvc @SpringBootTest @@ -52,6 +54,23 @@ class UserControllerIntegrationTests { createTestUser("mona"); createTestUser("john"); createTestUser("stefan"); + createTestUser("jacob"); + createTestUser("moana"); + createTestUser("paul"); + } + + @Test + void unauthorizedTest() throws Exception { + mvc.perform(get("/unauthorized")) + .andExpect(status().isOk()) + .andExpect(view().name("unauthorized")); + } + + @Test + void loginPageTest() throws Exception { + mvc.perform(get("/login")) + .andExpect(status().isOk()) + .andExpect(view().name("login")); } @Test @@ -237,4 +256,56 @@ class UserControllerIntegrationTests { .andExpect(content().string(containsString("Ungültiger Name"))) .andExpect(content().string(containsString("Ungültige Addresse"))); } + + @Test + @WithMockUser(username = "admin", password = "admin", roles = "ADMIN") + void viewCustomers() throws Exception { + mvc.perform(get("/customers")) + .andExpect(status().isOk()) + .andExpect(view().name("customers")) + .andExpect(model().attributeExists("customers")); + } + + @Test + @WithMockUser(username = "admin", password = "admin", roles = "ADMIN") + void editCustomerDetails() throws Exception { + assertThat(userManagement.getUsers().findAll()) + .extracting("username", "fullName", "address") + .contains(tuple("moana", "Moana Klaus", "Baum Weg")); + mvc.perform(post("/customers/edit/" + userManagement.getUserByName("moana").get().getId()) + .param("username", "moan") + .param("fullName", "Moan Klaus") + .param("address", "Baum Straße")) + .andExpect(redirectedUrl("/customers")); + assertThat(userManagement.getUsers().findAll()) + .extracting("username", "fullName", "address") + .contains(tuple("moan", "Moan Klaus", "Baum Straße")); + mvc.perform(get("/customers/edit/" + userManagement.getUserByName("moan").get().getId())) + .andExpect(status().isOk()) + .andExpect(view().name("edit-customer")); + } + + @Test + @WithMockUser(username = "admin", roles = "ADMIN") + void removeCustomerTest() throws Exception { + assertTrue(userAccountManagement.findByUsername("paul").isPresent()); + mvc.perform(get("/customers/remove/" + userManagement.getUserByName("paul").get().getId())) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("/customers")); + assertThat(userAccountManagement.findDisabled()) + .extracting("username") + .contains("paul"); + } + + @Test + @WithMockUser(username = "jacob", password = "123", roles = "CUSTOMER") + void disableUserAccount() throws Exception { + assertTrue(userAccountManagement.findByUsername("jacob").isPresent()); + mvc.perform(get("/profile/disable")) + .andExpect(status().is3xxRedirection()) + .andExpect(redirectedUrl("/logout")); + assertThat(userAccountManagement.findDisabled()) + .extracting("username") + .contains("jacob"); + } } diff --git a/src/test/java/catering/users/UserUnitTests.java b/src/test/java/catering/users/UserUnitTests.java new file mode 100644 index 0000000..117e0c2 --- /dev/null +++ b/src/test/java/catering/users/UserUnitTests.java @@ -0,0 +1,99 @@ +// SPDX-License-Identifier: AGPL-3.0-or-later +// SPDX-FileCopyrightText: 2023-2024 swt23w23 +package catering.users; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.Objects; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +public class UserUnitTests { + + private User user; + + @Autowired + private UserManagement userManagement; + + @BeforeEach + void setUp() { + user = userManagement.getUserByName("testUser") + .orElseGet(() -> userManagement.createCustomer("testUser", "Baum Weg", "123", "Mario Götze")); + } + + @Test + void getAddress() { + assertThat(user.getAddress()).isEqualTo("Baum Weg"); + } + + @Test + void setAddress() { + user.setAddress("Braum Weg"); + assertThat(user.getAddress()).isEqualTo("Braum Weg"); + } + + @Test + void getUsername() { + User otherUser = userManagement.createCustomer("testUser0", "password", "Apfel Weg", "Marco Reus"); + assertThat(otherUser.getUsername()).isEqualTo("testUser0"); + } + + @Test + void setUsername() { + user.setUsername("testUser1"); + assertThat(user.getUsername()).isEqualTo("testUser1"); + } + + @Test + void getFullName() { + assertThat(user.getFullName()).isEqualTo("Mario Götze"); + } + + @Test + void setFullName() { + user.setFullName("Manuel Neuer"); + assertThat(user.getFullName()).isEqualTo("Manuel Neuer"); + } + + @Test + void isEnabled() { + assertThat(user.isEnabled()).isTrue(); + } + + @Test + void hasRole() { + assertThat(user.hasRole("CUSTOMER")).isTrue(); + assertThat(user.hasRole("ADMIN")).isFalse(); + } + + @Test + void differentUserDifferentHashCode() { + User otherUser = userManagement.createCustomer("carlos", "123", "Baum Weg", "Marco Reus"); + assertThat(user.hashCode()).isNotEqualTo(otherUser.hashCode()); + } + + @Test + void usersNotEqual() { + User otherUser = userManagement.createCustomer("maria", "123", "Baum Weg", "Marco Reus"); + assertThat(user).isNotEqualTo(otherUser); + } + + @Test + void usersNotEqualToDifferentClass() { + assertThat(user).isNotEqualTo(new Object()); + } + + @Test + void differentAddressesNotEqual() { + assertThat(user.getAddress()).isNotEqualTo("Baum Straße"); + } + + @Test + void differentUserNamesNotEqual() { + assertThat(user.getUsername()).isNotEqualTo("TestUser"); + } +}