Untitled
unknown
plain_text
2 years ago
4.7 kB
9
Indexable
@PutMapping("/{id}")
@PreAuthorize("hasRole('USER') or hasRole('ADMIN')")
public ResponseEntity<Post> updatePost(@PathVariable(name = "id") Long id,
@Valid @RequestBody PostRequest newPostRequest, @CurrentUser UserPrincipal currentUser) {
Post post = postService.updatePost(id, newPostRequest, currentUser);
return new ResponseEntity< >(post, HttpStatus.OK);
}
///////////////////////////////////////////////////////////////////
@WebMvcTest(YourControllerClass.class)
public class YourControllerClassTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private PostService postService;
@Test
public void testUpdatePostWithSingleComment() throws Exception {
Long postId = 1L;
PostRequest mockPostRequest = new PostRequest("New Post Content");
UserPrincipal mockUserPrincipal = new UserPrincipal(1L, "testuser");
Comment comment = new Comment("Single Comment");
Post updatedPost = new Post(postId, "New Post Content", mockUserPrincipal.getUser());
updatedPost.setComment(comment);
Mockito.when(postService.updatePost(postId, mockPostRequest, mockUserPrincipal))
.thenReturn(updatedPost);
mockMvc.perform(MockMvcRequestBuilders.put("/{id}", postId)
.contentType(MediaType.APPLICATION_JSON)
.content("{\"content\": \"New Post Content\"}")
.header("Authorization", "Bearer <your_token_here>"))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.id").value(postId))
.andExpect(MockMvcResultMatchers.jsonPath("$.content").value("New Post Content"))
.andExpect(MockMvcResultMatchers.jsonPath("$.comment.text").value("Single Comment"));
// .andExpect(MockMvcResultMatchers.jsonPath("$.comments[1].text").value("Comment 2"));// if include list comment
Mockito.verify(postService).updatePost(postId, mockPostRequest, mockUserPrincipal);
}
}
////////////////////////////////////////////
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.slf4j.Logger;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
@WebMvcTest(TssApiController.class)
public class TssApiControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private TssService tssService;
@Mock
private Logger logger;
@Captor
private ArgumentCaptor<String> logCaptor;
@Test
public void testApplyCustomerFile() throws Exception {
// Chuẩn bị dữ liệu đầu vào cho test case
MockMultipartFile file = new MockMultipartFile("customerFile", "customer.xml",
MediaType.TEXT_XML_VALUE, "<customer>...</customer>".getBytes());
// Gọi phương thức controller cần được kiểm tra
mockMvc.perform(MockMvcRequestBuilders.multipart("/v1/tss/customer")
.file(file))
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON))
.andDo(print());
// Kiểm tra rằng phương thức trong service đã được gọi với đúng tham số
Mockito.verify(tssService).applyCustomerFile(any(), eq(file));
// Kiểm tra rằng log.info đã được gọi với đúng tham số
Mockito.verify(logger).info(logCaptor.capture());
// Lấy giá trị của log.info
String logInfoMessage = logCaptor.getValue();
// Kiểm tra xem log.info có bao gồm đúng thông tin về name và size không
assertThat(logInfoMessage).contains(file.getOriginalFilename());
assertThat(logInfoMessage).contains(String.valueOf(file.getSize()));
}
}
Editor is loading...
Leave a Comment