Hi,
Is there an issue when calling id() after a bean() call after a wireTap()
call when configuring routes?
It looks like the ID gets set on the WireTapDefinition instead of on the
BeanDefinition, which is illustrated by the failing test below.
Is there a preferred workaround for mocking a bean out in a test under this
scenario?
public class WeaveByIdTest extends CamelTestSupport {
@Override
public boolean isUseAdviceWith() {
// remember to override this method and return true to tell Camel
that we are using advice-with in the routes
return true;
}
@Test
public void testWeaveById() throws Exception {
RouteDefinition route = context.getRouteDefinition("quotes");
route.adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
// select the route node with the id=transform
// and then replace it with the following route parts
weaveById("transform").replace()
.transform().simple("${body.toUpperCase()}");
// and add at the end of the route to route to this mock
endpoint
weaveAddLast().to("mock:result");
}
});
context.start();
// we have replaced the bean transformer call with a simple
expression that
// performs an upper case
getMockEndpoint("mock:result").expectedBodiesReceived("HELLO
CAMEL");
template.sendBody("seda:quotes", "Hello Camel");
assertMockEndpointsSatisfied();
}
@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("seda:quotes").routeId("quotes")
// wire tap appears to get id == "transform" rather
than bean
.wireTap("direct:null")
.bean("transformer").id("transform")
.to("seda:lower");
from("direct:null")
.log("null");
}
};
}
}