swt23w23/src/test/java/catering/staff/StaffControllerIntegrationTests.java

179 lines
6.6 KiB
Java
Raw Normal View History

package catering.staff;
2023-12-04 11:34:07 +01:00
import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.CoreMatchers.containsString;
2023-12-04 11:34:07 +01:00
import static org.hamcrest.CoreMatchers.endsWith;
import static org.salespointframework.core.Currencies.EURO;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
2023-12-04 11:34:07 +01:00
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
2023-12-04 11:34:07 +01:00
import org.javamoney.moneta.Money;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
2023-12-04 11:34:07 +01:00
import org.springframework.http.HttpHeaders;
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;
@AutoConfigureMockMvc
@SpringBootTest
class StaffControllerIntegrationTests {
@Autowired
MockMvc mvc;
MockHttpServletRequestBuilder createStaff = post("/staff/add")
.param("name", "Karl Baum")
2023-12-04 11:34:07 +01:00
.param("wage", "10")
.param("job", "COOK");
@Autowired
private StaffManagement staffManagement;
Employee defaultEmployee;
Long defaultEmployeeId;
@BeforeEach
void setup() throws Exception {
2023-12-04 11:34:07 +01:00
defaultEmployee = staffManagement.save(new Employee("Dieter Baum", JobType.COOK, Money.of(0, EURO)));
defaultEmployeeId = defaultEmployee.getId();
}
@AfterEach
void tearDown() throws Exception {
staffManagement.delete(defaultEmployeeId);
defaultEmployee = null;
defaultEmployeeId = null;
}
@Test
@WithMockUser(username = "admin", password = "admin", roles = "ADMIN")
void viewStaff() throws Exception {
mvc.perform(get("/staff"))
.andExpect(status().isOk())
.andExpect(content().string(containsString(defaultEmployee.getName())));
}
@Test
@WithMockUser(username = "admin", password = "admin", roles = "ADMIN")
void viewStaffEditPage() throws Exception {
mvc.perform(get("/staff/edit/" + defaultEmployeeId.toString()))
.andExpect(status().isOk())
.andExpect(content().string(containsString(defaultEmployee.getName())));
}
@Test
@WithMockUser(username = "admin", password = "admin", roles = "ADMIN")
void addStaff() throws Exception {
assertThat(staffManagement.findAll().stream())
.extracting("name")
.doesNotContain("Karl Baum");
mvc.perform(createStaff).andExpect(redirectedUrl("/staff"));
assertThat(staffManagement.findAll().stream())
.extracting("name")
.contains("Karl Baum");
}
@Test
@WithMockUser(username = "admin", password = "admin", roles = "ADMIN")
void modifyStaff() throws Exception {
mvc.perform(post("/staff/edit/" + defaultEmployeeId.toString())
.param("name", "Dieter Bäume")
2023-12-04 11:34:07 +01:00
.param("wage", "10")
.param("job", "SERVICE")).andExpect(redirectedUrl("/staff"))
.andExpect(redirectedUrl("/staff"));
assertThat(staffManagement.findById(defaultEmployeeId).get())
.extracting("name", "job")
.containsExactly("Dieter Bäume", JobType.SERVICE);
}
@Test
@WithMockUser(username = "admin", password = "admin", roles = "ADMIN")
void removeStaff() throws Exception {
assertThat(staffManagement.findAll().stream())
.extracting("name")
.contains("Dieter Baum");
2023-11-23 16:42:56 +01:00
mvc.perform(post("/staff/remove").param("id", defaultEmployeeId.toString()));
assertThat(staffManagement.findAll().stream())
.extracting("name")
.doesNotContain("Dieter Baum");
}
@Test
@WithMockUser(username = "admin", password = "admin", roles = "ADMIN")
void addStaffWrong() throws Exception {
mvc.perform(post("/staff/add"))
.andExpect(content().string(containsString("Ungültiger Name")))
2023-12-04 11:34:07 +01:00
.andExpect(content().string(containsString("Ungültiger Lohn")))
.andExpect(content().string(containsString("Ungültiger Job")));
}
@Test
@WithMockUser(username = "admin", password = "admin", roles = "ADMIN")
void editStaffWrong() throws Exception {
mvc.perform(post("/staff/edit/" + defaultEmployeeId.toString()))
.andExpect(content().string(containsString("Ungültiger Name")))
2023-12-04 11:34:07 +01:00
.andExpect(content().string(containsString("Ungültiger Lohn")))
.andExpect(content().string(containsString("Ungültiger Job")));
assertThat(staffManagement.findById(defaultEmployeeId).get())
.extracting("name", "job")
.containsExactly("Dieter Baum", JobType.COOK);
}
@Test
@WithMockUser(username = "admin", password = "admin", roles = "ADMIN")
void addStaffWithWrongJobType() throws Exception {
assertThat(staffManagement.findAll().stream())
.extracting("name")
.doesNotContain("Paul Kunst");
mvc.perform(post("/staff/add")
.param("name", "Paul Kunst")
2023-12-04 11:34:07 +01:00
.param("wage", "10")
.param("job", "notAJob"))
.andExpect(content().string(containsString("Ungültiger Job")));
assertThat(staffManagement.findAll().stream())
.extracting("name")
.doesNotContain("Paul Kunst");
}
@Test
@WithMockUser(username = "admin", password = "admin", roles = "ADMIN")
void editStaffWithWrongJobType() throws Exception {
mvc.perform(
post("/staff/edit/" + defaultEmployeeId.toString())
.param("name", defaultEmployee.getName())
2023-12-04 11:34:07 +01:00
.param("wage", "10")
.param("job", "notAJob"))
.andExpect(content().string(containsString("Ungültiger Job")));
assertThat(staffManagement.findById(defaultEmployeeId).get())
.extracting("name", "job")
.containsExactly("Dieter Baum", JobType.COOK);
}
@Test
@WithMockUser(username = "dieter", password = "123", roles = "CUSTOMER")
void refuseCustomer() throws Exception {
mvc.perform(get("/staff")).andExpect(status().isForbidden());
mvc.perform(get("/staff/edit/" + defaultEmployeeId.toString())).andExpect(status().isForbidden());
}
@Test
@WithAnonymousUser
void refuseAnonymous() throws Exception {
mvc.perform(get("/staff"))
.andExpect(status().is3xxRedirection())
.andExpect(header().string(HttpHeaders.LOCATION, endsWith("/login")));
mvc.perform(get("/staff/edit/" + defaultEmployeeId))
.andExpect(status().is3xxRedirection())
.andExpect(header().string(HttpHeaders.LOCATION, endsWith("/login")));
}
}