OK. Ending the wire tap works. I.e. doing
.wireTap("direct:null").end()
instead of
.wireTap("direct:null")
On Sat, Aug 3, 2019 at 12:02 AM Sebastian Czort <[email protected]> wrote:
> 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");
> }
> };
> }
> }
>