package com.appsdeveloperblog.tutorials.junit.ui.controllers;
import com.appsdeveloperblog.tutorials.junit.service.UsersService;
import com.appsdeveloperblog.tutorials.junit.service.UsersServiceImpl;
import com.appsdeveloperblog.tutorials.junit.shared.UserDto;
import com.appsdeveloperblog.tutorials.junit.ui.request.UserDetailsRequestModel;
import com.appsdeveloperblog.tutorials.junit.ui.response.UserRest;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import java.util.UUID;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
@WebMvcTest(controllers = UsersController.class,
excludeAutoConfiguration = {SecurityAutoConfiguration.class})
//@AutoConfigureMockMvc(addFilters = false)
//@MockBean({UsersServiceImpl.class})
public class UsersControllerWebLayerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
//@Autowired
UsersService usersService;
private UserDetailsRequestModel userDetailsRequestModel;
@BeforeEach
void setup() {
userDetailsRequestModel = new UserDetailsRequestModel();
userDetailsRequestModel.setFirstName("Sergey");
userDetailsRequestModel.setLastName("Kargopolov");
userDetailsRequestModel.setEmail("test@test.com");
userDetailsRequestModel.setPassword("12345678");
}
@Test
@DisplayName("User can be created")
void testCreateUser_whenValidUserDetailsProvided_returnsCreatedUserDetails() throws Exception {
// Arrange
UserDto userDto = new ModelMapper().map(userDetailsRequestModel, UserDto.class);
userDto.setUserId(UUID.randomUUID().toString());
when(usersService.createUser(any(UserDto.class))).thenReturn(userDto);
RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/users")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.content(new ObjectMapper().writeValueAsString(userDetailsRequestModel));
// Act
MvcResult mvcResult = mockMvc.perform(requestBuilder).andReturn();
String responseBodyAsString = mvcResult.getResponse().getContentAsString();
UserRest createdUser = new ObjectMapper()
.readValue(responseBodyAsString, UserRest.class);
// Assert
Assertions.assertEquals(userDetailsRequestModel.getFirstName(),
createdUser.getFirstName(), "The returned user first name is most likely incorrect");
Assertions.assertEquals(userDetailsRequestModel.getLastName(),
createdUser.getLastName(), "The returned user last name is incorrect");
Assertions.assertEquals(userDetailsRequestModel.getEmail(),
createdUser.getEmail(), "The returned user email is incorrect");
Assertions.assertFalse(createdUser.getUserId().isEmpty(), "userId should not be empty");
}
@Test
@DisplayName("First name is not empty")
void testCreateUser_whenFirstNameIsNotProvided_returns400StatusCode() throws Exception {
// Arrange
userDetailsRequestModel.setFirstName("");
RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/users")
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON)
.content(new ObjectMapper().writeValueAsString(userDetailsRequestModel));
// Act
MvcResult mvcResult = mockMvc.perform(requestBuilder).andReturn();
// Assert
Assertions.assertEquals(HttpStatus.BAD_REQUEST.value(),
mvcResult.getResponse().getStatus(),
"Incorrect HTTP Status Code returned");
}
@Test
@DisplayName("First name cannot be shorter than 2 characters")
void testCreateUser_whenFirstNameIsOnlyOneCharacter_returns400StatusCode() throws Exception {
// Arrange
userDetailsRequestModel.setFirstName("a");
RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/users")
.content(new ObjectMapper().writeValueAsString(userDetailsRequestModel))
.contentType(MediaType.APPLICATION_JSON)
.accept(MediaType.APPLICATION_JSON);
// Act
MvcResult result = mockMvc.perform(requestBuilder).andReturn();
// Assert
Assertions.assertEquals(HttpStatus.BAD_REQUEST.value(),
result.getResponse().getStatus(), "HTTP Status code is not set to 400");
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
Udemy - Testing Java with JUnit 5 & Mockito 2022-7.rar (18个子文件)
3. Add JUnit 5 to Gradle project
5. Basics of JUnit 5
1. Introduction.html 313B
5. JUnit Test Exercise.html 735B
13. Quiz - JUnit Test Lifecycle.html 198B
5.1 CalculatorTest.java 548B
9. Code Coverage
6. Advanced JUnit 5
10. Quiz.html 198B
13.1 TestLifeCyclePerClassDemo.zip 46KB
15. Quiz.html 198B
8. Mockito
2. Add JUnit 5 to Maven project
4. Add JUnit 5 to a basic Java project
1. Introduction
7. Quiz. Basics of Unit Testing.html 198B
10. Spring Boot (Part 1) - Testing REST Controllers
11. Practice exercise.html 985B
12.1 UsersControllerWebLayerTest.java 5KB
5.1 UsersServiceSpringBoot.zip 240KB
11. Spring Boot (Part 2) - All Layers
14.1 UsersServiceSpringBoot.zip 240KB
16. Bonus.html 3KB
15. More lessons are about to be uploaded.html 558B
14. Source code.html 83B
7. Test Driven Development (TDD)
11.1 UserService-empty-last-name-exercise-solution.zip 122KB
8.1 UserService.zip 102KB
2.1 UserService.zip 5KB
共 18 条
- 1
资源评论
嘤鸣求友
- 粉丝: 27
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功