I have get mapping like this:
@GetMapping(value = "/topics", params = "dateRange")
public Set<Integer> getTopicsInRange(@RequestParam DateRange dateRange) {
return topicService.getTopicsInRange(dateRange);
}
And now I would've like to test it as:
private final static DateRange VALID_DATE_RANGE = new DateRange(LocalDate.of(2018, 1, 1), LocalDate.of(2018, 2, 2));
@Test
public void gettingTopicsInRangeShouldReturn200(){
given().
.when()
.get(String.format("/topics?dateRange=%s", VALID_DATE_RANGE)
.then()
.statusCode(200);
}
Expected status code <200> doesn't match actual status code <400>.
I know that my solution would've work if I would've change my DateRange param into 2 separated params as:
@GetMapping(value = "/topics", params = {"begin", "end"})
public Set<Integer> getTopicsInRange(@RequestParam Date begin, @RequestParam Date end) {
return topicService.getTopicsInRange(begin, end);
}
and then test it as /topics?begin=value&end=value2
but it's not what I'm looking for (in case of DateRange would've like 10 fields making 10 params would've be really excessive I think)
Any ideas how can I solve my problem?
EDIT This is my DateRange class:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DateRange {
LocalDate begin;
LocalDate end;
}
Add DateTimeFormat
annotation:
public class DateRange {
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate begin;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate end;
// getter and setters
}
Receive object in controller:
@GetMapping(value = "/topics")
public Set<Integer> getTopicsInRange(DateRange dateRange) {
return topicService.getTopicsInRange(dateRange);
}
And send params separately:
@Test
public void gettingTopicsInRangeShouldReturn200() {
given()
.queryParams("begin", LocalDate.of(2018, 1, 1).format(ISO_DATE),
"end", LocalDate.of(2018, 2, 2))
.when()
.get("/topics")
.then()
.statusCode(200);
}