Skip to content
Snippets Groups Projects

M2 user tests

Merged Dominika Zemanovičová requested to merge M2-user-tests into M2-user
5 files
+ 509
71
Compare changes
  • Side-by-side
  • Inline
Files
5
@@ -2,22 +2,36 @@ package org.fuseri.modulelanguageschool.user;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.fuseri.model.dto.course.CourseDto;
import org.fuseri.model.dto.course.LanguageTypeDto;
import org.fuseri.model.dto.course.ProficiencyLevelDto;
import org.fuseri.model.dto.user.*;
import org.fuseri.model.dto.user.AddressDto;
import org.fuseri.model.dto.user.UserAddLanguageDto;
import org.fuseri.model.dto.user.UserCreateDto;
import org.fuseri.model.dto.user.UserDto;
import org.fuseri.model.dto.user.UserLoginDto;
import org.fuseri.model.dto.user.UserType;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource;
import org.mockito.ArgumentMatchers;
import org.mockito.Mockito;
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.boot.test.mock.mockito.MockBean;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@@ -32,9 +46,15 @@ class UserControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private UserFacade userFacade;
private static final AddressDto ADDRESS_TO_CREATE = new AddressDto(
"Czechia", "Brno", "Masarykova", "45", "90033");
private static final Map<LanguageTypeDto, ProficiencyLevelDto> languageProficiency =
Map.of(LanguageTypeDto.ENGLISH, ProficiencyLevelDto.A1);
private static final List<AddressDto> INVALID_ADDRESSES = List.of(
new AddressDto("", "Brno", "Masarykova", "45", "90033"),
new AddressDto("Czechia", "", "Masarykova", "45", "90033"),
@@ -47,43 +67,52 @@ class UserControllerTest {
new AddressDto("Czechia", "Brno", "Masarykova", null, "90033")
);
private static final UserCreateDto USER_TO_CREATE = new UserCreateDto(
private final UserCreateDto USER_CREATE_DTO = new UserCreateDto(
"xnovak", "1c1bbf66-6585-4978-886b-b126335ff3af",
"xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE);
"xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE, UserType.STUDENT, languageProficiency);
private static final UserLoginDto USER_TO_LOGIN = new UserLoginDto(
private static final UserLoginDto USER_LOGIN_DTO = new UserLoginDto(
"xnovak", "1c1bbf66-6585-4978-886b-b126335ff3af");
private final UserDto USER_DTO = new UserDto(
"xnovak", "xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE, UserType.STUDENT);
private static Stream<UserCreateDto> invalidUsers() {
var invalidUsers = Stream.of(
new UserCreateDto("", "1c1bbf66-6585-4978-886b-b126335ff3af",
"xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE),
"xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE, UserType.STUDENT, languageProficiency),
new UserCreateDto("xnovak", "",
"xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE),
"xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE, UserType.STUDENT, languageProficiency),
new UserCreateDto("xnovak", "1c1bbf66-6585-4978-886b-b126335ff3af",
"", "Peter", "Novak", ADDRESS_TO_CREATE),
"", "Peter", "Novak", ADDRESS_TO_CREATE, UserType.STUDENT, languageProficiency),
new UserCreateDto("xnovak", "1c1bbf66-6585-4978-886b-b126335ff3af",
"xnovak@emample.com", "", "Novak", ADDRESS_TO_CREATE),
"xnovak@emample.com", "", "Novak", ADDRESS_TO_CREATE, UserType.STUDENT, languageProficiency),
new UserCreateDto("xnovak", "1c1bbf66-6585-4978-886b-b126335ff3af",
"xnovak@emample.com", "Peter", "", ADDRESS_TO_CREATE),
"xnovak@emample.com", "Peter", "", ADDRESS_TO_CREATE, UserType.STUDENT, languageProficiency),
new UserCreateDto(null, "1c1bbf66-6585-4978-886b-b126335ff3af",
"xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE),
"xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE, UserType.STUDENT, languageProficiency),
new UserCreateDto("xnovak", null,
"xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE),
"xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE, UserType.STUDENT, languageProficiency),
new UserCreateDto("xnovak", "1c1bbf66-6585-4978-886b-b126335ff3af",
null, "Peter", "Novak", ADDRESS_TO_CREATE),
null, "Peter", "Novak", ADDRESS_TO_CREATE, UserType.STUDENT, languageProficiency),
new UserCreateDto("xnovak", "1c1bbf66-6585-4978-886b-b126335ff3af",
"xnovak@emample.com", null, "Novak", ADDRESS_TO_CREATE),
"xnovak@emample.com", null, "Novak", ADDRESS_TO_CREATE, UserType.STUDENT, languageProficiency),
new UserCreateDto("xnovak", "1c1bbf66-6585-4978-886b-b126335ff3af",
"xnovak@emample.com", "Peter", null, ADDRESS_TO_CREATE),
"xnovak@emample.com", "Peter", null, ADDRESS_TO_CREATE, UserType.STUDENT, languageProficiency),
new UserCreateDto("xnovak", "1c1bbf66-6585-4978-886b-b126335ff3af",
"xnovak@emample.com", "Peter", "Novak", null)
"xnovak@emample.com", "Peter", "Novak", null, UserType.STUDENT, languageProficiency),
new UserCreateDto(
"xnovak", "1c1bbf66-6585-4978-886b-b126335ff3af",
"xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE, null, languageProficiency),
new UserCreateDto(
"xnovak", "1c1bbf66-6585-4978-886b-b126335ff3af",
"xnovak@emample.com", "Peter", "Novak", ADDRESS_TO_CREATE, UserType.STUDENT, null)
);
var invalidAddressUsers = new ArrayList<UserCreateDto>();
for (var invalidAddress : INVALID_ADDRESSES) {
invalidAddressUsers.add(new UserCreateDto("xnovak", "1c1bbf66-6585-4978-886b-b126335ff3af",
"xnovak@emample.com", "Peter", "Novak", invalidAddress));
"xnovak@emample.com", "Peter", "Novak", invalidAddress, UserType.STUDENT, languageProficiency));
}
return Stream.concat(invalidUsers, invalidAddressUsers.stream());
@@ -98,16 +127,18 @@ class UserControllerTest {
}
@Test
void create() throws Exception {
void createUser() throws Exception {
Mockito.when(userFacade.create(ArgumentMatchers.isA(UserCreateDto.class))).thenReturn(USER_DTO);
mockMvc.perform(post("/users")
.content(asJsonString(USER_TO_CREATE))
.content(asJsonString(USER_CREATE_DTO))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
.andExpect(status().isCreated());
}
@ParameterizedTest
@MethodSource("invalidUsers")
void createInvalidUser(UserCreateDto user) throws Exception {
Mockito.when(userFacade.create(ArgumentMatchers.isA(UserCreateDto.class))).thenReturn(USER_DTO);
mockMvc.perform(post("/users")
.content(asJsonString(user))
.contentType(MediaType.APPLICATION_JSON))
@@ -116,65 +147,47 @@ class UserControllerTest {
@Test
void findUser() throws Exception {
String response = mockMvc.perform(post("/users")
.content(asJsonString(USER_TO_CREATE))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
Long id = objectMapper.readValue(response, UserDto.class).getId();
long id = 1;
Mockito.when(userFacade.find(id)).thenReturn(USER_DTO);
mockMvc.perform(get("/users/{id}", id))
.andExpect(status().isOk())
.andExpect(jsonPath("$.id").value(id));
.andExpect(jsonPath("$.username").value(USER_DTO.getUsername()));
}
@Test
void findAll() throws Exception {
mockMvc.perform(get("/users/all")
.param("page", "0"))
.andExpect(status().isOk());
int page = 0;
Page<UserDto> pageUserDto = new PageImpl<>(List.of(USER_DTO));
Mockito.when(userFacade.findAll(page)).thenReturn(pageUserDto);
mockMvc.perform(get("/users")
.param("page", Integer.toString(page)))
.andExpect(status().isOk())
.andExpect(content().string(objectMapper.writeValueAsString(pageUserDto)));
}
@Test
void deleteUser() throws Exception {
String response = mockMvc.perform(post("/users")
.content(asJsonString(USER_TO_CREATE))
mockMvc.perform(delete("/users/{id}", 1L)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
Long id = objectMapper.readValue(response, UserDto.class).getId();
mockMvc.perform(delete("/users/{id}", id)
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
.andExpect(status().isNoContent());
}
@Test
void update() throws Exception {
String response = mockMvc.perform(post("/users")
.content(asJsonString(USER_TO_CREATE))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
Long id = objectMapper.readValue(response, UserDto.class).getId();
Long id = 1L;
Mockito.when(userFacade.update(id, USER_CREATE_DTO)).thenReturn(USER_DTO);
var updatedUsername = "novak";
var userToUpdate = new UserCreateDto(
USER_TO_CREATE.getUsername(), USER_TO_CREATE.getPassword(), USER_TO_CREATE.getEmail(),
USER_TO_CREATE.getFirstName(), USER_TO_CREATE.getLastName(), USER_TO_CREATE.getAddress());
userToUpdate.setUsername(updatedUsername);
mockMvc.perform(put("/users/update/{id}", id)
.content(asJsonString(userToUpdate))
mockMvc.perform(put("/users/{id}", id)
.content(asJsonString(USER_CREATE_DTO))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(jsonPath("$.username").value(updatedUsername));
.andExpect(status().isOk());
}
@Test
void login() throws Exception {
mockMvc.perform(post("/users/login")
.content(asJsonString(USER_TO_LOGIN))
.content(asJsonString(USER_LOGIN_DTO))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
}
@@ -190,32 +203,49 @@ class UserControllerTest {
@Test
void logout() throws Exception {
String response = mockMvc.perform(post("/users")
.content(asJsonString(USER_TO_CREATE))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk()).andReturn().getResponse().getContentAsString();
Long id = objectMapper.readValue(response, UserDto.class).getId();
mockMvc.perform(post("/users/logout/{id}", id))
mockMvc.perform(post("/users/{id}/logout", 1L))
.andExpect(status().isOk());
}
@Test
void getFinished() throws Exception {
mockMvc.perform(get("/users/finished/1", "1c1bbf66-6585-4978-886b-b126335ff3af"))
.andExpect(status().isOk());
void getFinishedCourses() throws Exception {
Long id = 1L;
String name = "History Spanish";
List<CourseDto> courses = List.of(
new CourseDto(1L, name, 10, LanguageTypeDto.SPANISH, ProficiencyLevelDto.B2)
);
Mockito.when(userFacade.getFinished(id)).thenReturn(courses);
mockMvc.perform(get("/users/{id}/finished-courses", 1L))
.andExpect(status().isOk())
.andExpect(jsonPath("$", hasSize(1)))
.andExpect(jsonPath("$[0].name", equalTo(name)));
}
@Test
void getEnrolled() throws Exception {
mockMvc.perform(get("/users/enrolled/1", "1c1bbf66-6585-4978-886b-b126335ff3af"))
.andExpect(status().isOk());
void getEnrolledCourses() throws Exception {
Long id = 1L;
String name = "History Spanish";
List<CourseDto> courses = List.of(
new CourseDto(1L, name, 10, LanguageTypeDto.SPANISH, ProficiencyLevelDto.B2)
);
Mockito.when(userFacade.getEnrolled(id)).thenReturn(courses);
mockMvc.perform(get("/users/{id}/courses", id))
.andExpect(status().isOk())
.andExpect(jsonPath("$", hasSize(1)))
.andExpect(jsonPath("$[0].name", equalTo(name)));
}
@Test
void addLanguage() throws Exception {
mockMvc.perform(put("/users/addLanguage/1", "1c1bbf66-6585-4978-886b-b126335ff3af")
Long id = 1L;
var language = LanguageTypeDto.ENGLISH;
var proficiency = ProficiencyLevelDto.B2;
UserAddLanguageDto languageDto = new UserAddLanguageDto(language, proficiency);
UserDto userWithLanguages = USER_DTO;
userWithLanguages.setLanguageProficiency(Map.of(language, proficiency));
Mockito.when(userFacade.addLanguageProficiency(id, languageDto)).thenReturn(userWithLanguages);
mockMvc.perform(put("/users/{id}/languages", id)
.content(asJsonString(new UserAddLanguageDto(LanguageTypeDto.ENGLISH, ProficiencyLevelDto.B2)))
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk());
Loading