/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.test.module.extension.operation; import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; import static org.mule.test.module.extension.internal.util.ExtensionsTestUtils.getConfigurationFromRegistry; import org.mule.runtime.api.message.Message; import org.mule.runtime.core.exception.MessagingException; import org.mule.tck.probe.PollingProber; import org.mule.tck.testmodels.fruit.Banana; import org.mule.tck.testmodels.fruit.Fruit; import org.mule.test.module.extension.AbstractExtensionFunctionalTestCase; import org.mule.test.vegan.extension.BananaConfig; import org.junit.Test; public class FlowListenerOperationExecutionTestCase extends AbstractExtensionFunctionalTestCase { private BananaConfig config; @Override protected String getConfigFile() { return "vegan-flow-listener-operation-config.xml"; } @Override protected void doSetUp() throws Exception { config = getConfigurationFromRegistry("banana", testEvent(), muleContext); } @Test public void listenSuccessfulFlow() throws Exception { Message message = flowRunner("listenAndByteBanana").run().getMessage(); assertThat(message.getPayload().getValue(), is(instanceOf(Banana.class))); final Banana banana = (Banana) message.getPayload().getValue(); check(() -> { assertThat(banana.isPeeled(), is(true)); assertThat(banana.isBitten(), is(true)); assertThat(config.getBananasCount(), is(1)); assertThat(config.getNonBananasCount(), is(0)); assertThat(config.getExceptionCount(), is(0)); }); } @Test public void listenSuccessfulFlowWithUnexpecteResult() throws Exception { Message message = flowRunner("listenAndEatMeat").run().getMessage(); assertThat(message.getPayload().getValue(), is(not(instanceOf(Fruit.class)))); check(() -> { assertThat(config.getBananasCount(), is(0)); assertThat(config.getNonBananasCount(), is(1)); assertThat(config.getExceptionCount(), is(0)); }); } @Test public void listenError() throws Exception { try { flowRunner("listenAndFail").run(); fail("Flow should have failed"); } catch (MessagingException e) { check(() -> assertThat(config.getExceptionCount(), is(1))); } } private void check(Runnable probe) { PollingProber.check(5000, 100, () -> { probe.run(); return true; }); } }