There's a DTO created on a builder method (assume it has only a "name" attribute with some random value) and I want to check if the returned object has the same value, but the response is null.
Unit test code:
class GetProductByIdRouteBuilderTest extends CamelTestSupport {
@Test
void testRoute() throws Exception {
var expected = DTOBuilder.getProductDetailsDTO();
getMockEndpoint("mock:result").expectedMessageCount(1);
getMockEndpoint("mock:result").expectedHeaderReceived("id", 1);
var response = template.requestBodyAndHeader(
"direct:getProductById",
null,
"id",
1L,
GetProductDetailsDTO.class
);
assertMockEndpointsSatisfied();
assertEquals(expected.getName(), response.getName());
}
@Override
protected RoutesBuilder createRouteBuilder() {
return new RouteBuilder() {
@Override
public void configure() {
from("direct:getProductById")
.routeId("getProductById")
.log("id = ${header.id}")
.to("mock:result")
.end();
}
};
}
}
Solution
Used the whenAnyExchangeReceived method:
getMockEndpoint("mock:result").whenAnyExchangeReceived(exchange -> {
exchange.getMessage().setBody(expected);
exchange.getMessage().setHeader(Exchange.HTTP_RESPONSE_CODE, HttpStatus.OK.value());
});