1

I have the controller and unit test shown below. The controller returns a sorted list. In the unit test, the sort field is passed correctly; however, the sort direction is not being parsed:

enter image description here

I am following these examples:

Isolated Controller Test can't instantiate Pageable

4. Paging and Sorting

Controller:

@RequestMapping("/telemetry")
public Page<TelemetryMessage> List(Pageable pageable) {
    return telemetryMessageRepository.findAll(pageable);
}

Unit Test:

@Before
public void setUp() throws Exception {
    mvc = MockMvcBuilders
            .standaloneSetup(new TelemetryController(telemetryMessageRepository))
            .setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver())
            .setViewResolvers(new ViewResolver() {
                @Override
                public View resolveViewName(String viewName, Locale locale) throws Exception {
                    return new MappingJackson2JsonView();
                }
            })
            .build();
    // etc.
}

@Test
public void testListReturnsDefault20() throws Exception {

    Iterable<TelemetryMessage> expected = telemetryMessageRepository.findAll(new PageRequest(0, 20, Sort.Direction.DESC, "id"));
    String json = mapper.writeValueAsString(expected);

    MvcResult result = mvc.perform(MockMvcRequestBuilders.get("/telemetry")
            .param("sort", "id")
            .param("id.dir", "desc")
            .accept(MediaType.APPLICATION_JSON))
            .andExpect(status().isOk())
            .andReturn();
    String actual = result.getResponse().getContentAsString();

}
Community
  • 1
  • 1
Brett
  • 8,575
  • 5
  • 38
  • 51

1 Answers1

1

Use comma to separate the Property and the Direction, like following:

MvcResult result = mvc.perform(MockMvcRequestBuilders.get("/telemetry")
            .param("sort", "id,desc")
            //.param("id.dir", "desc")
Ali Dehghani
  • 46,221
  • 15
  • 164
  • 151