Контроллер
@PostMapping("/endpoint/group/move")
public DeferredResult<ResponseEntity<List<Endpoint>>> moveEndpointGroup(@RequestBody List<String> EndpointIds,
@RequestParam("from") String fromGroupId, @RequestParam("to") String toGroupId)
throws ResourceNotFoundException, ExecutionException {
DeferredResult<ResponseEntity<List<Endpoint>>> result = new DeferredResult<>();
if (EndpointIds != null && !EndpointIds.isEmpty()) {
CompletableFuture.supplyAsync(() -> EndpointService.moveEndpoints(EndpointIds, fromGroupId, toGroupId), executor)
.whenComplete((movedEndpointsList, ex) -> {
if (ex != null) {
throw new RuntimeException(ex);
}
if (movedEndpointsList.size() == EndpointIds.size()) {
result.setResult(ResponseEntity.status(HttpStatus.OK).body(movedEndpointsList));
} else {
result.setResult(ResponseEntity.status(HttpStatus.PARTIAL_CONTENT).body(movedEndpointsList));
}
});
}
return result;
}
Я написал следующий метод тестирования, он не работает. Когда я запускаю этот тест, я получаю Asyn c результат для обработчика не был установлен в течение указанного времениToWait.
Может кто-нибудь помочь мне, где я делаю неправильно?
@Test
public void testMoveEndpointGroup_WhenSuccess() throws Exception {
List<Endpoint> EndpointList = Arrays.asList(Endpoint, Endpoint);
List<String> EndpointIds = Arrays.asList("123");
Mockito.when(EndpointService.moveEndpoints(Mockito.any(), Mockito.anyString(), Mockito.anyString()))
.thenReturn(EndpointList);
RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/endpoint/group/move")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsString(EndpointIds)).param("from", "gorupA").param("to", "groupB");
MvcResult result = mvc.perform(requestBuilder).andReturn();
result = mvc.perform(MockMvcRequestBuilders.asyncDispatch(result)).andDo(MockMvcResultHandlers.print()).andReturn();
JsonNode actual = objectMapper.readTree(result.getResponse().getContentAsString()).get("content");
String expected = objectMapper.writeValueAsString(Arrays.asList(EndpointList));
Assert.assertEquals(expected, actual.toString());
}