/*
* 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.transaction;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static org.mule.runtime.extension.api.tx.OperationTransactionalAction.JOIN_IF_POSSIBLE;
import static org.mule.runtime.extension.api.tx.OperationTransactionalAction.NOT_SUPPORTED;
import static org.mule.runtime.extension.api.tx.SourceTransactionalAction.ALWAYS_BEGIN;
import org.mule.runtime.api.util.Reference;
import org.mule.runtime.core.api.construct.Flow;
import org.mule.runtime.extension.api.tx.OperationTransactionalAction;
import org.mule.runtime.extension.api.tx.SourceTransactionalAction;
import org.mule.test.module.extension.AbstractExtensionFunctionalTestCase;
import org.mule.test.transactional.TransactionalSourceWithTXParameters;
import org.junit.Test;
public class TransactionalActionParameterTestCase extends AbstractExtensionFunctionalTestCase {
@Override
protected String getConfigFile() {
return "transactional-parameters-injection-config.xml";
}
@Test
public void injectAlwaysBeginSourceTransactionalAction() throws Exception {
assertSourceTransactionalAction("alwaysBeginTxAction", ALWAYS_BEGIN);
}
@Test
public void injectDefaultOperationTransactionalAction() throws Exception {
OperationTransactionalAction value =
(OperationTransactionalAction) flowRunner("injectInOperationDefaultValue").run().getMessage().getPayload().getValue();
assertThat(value, is(JOIN_IF_POSSIBLE));
}
@Test
public void injectInOperationJoinNotSupported() throws Exception {
OperationTransactionalAction value =
(OperationTransactionalAction) flowRunner("injectInOperationJoinNotSupported").run().getMessage().getPayload().getValue();
assertThat(value, is(NOT_SUPPORTED));
}
private void assertSourceTransactionalAction(String flowName, SourceTransactionalAction transactionalAction) throws Exception {
Reference<SourceTransactionalAction> sourceTransactionalAction = new Reference<>();
TransactionalSourceWithTXParameters.responseCallback = tx -> sourceTransactionalAction.set((SourceTransactionalAction) tx);
startFlow(flowName);
assertThat(sourceTransactionalAction.get(), is(transactionalAction));
}
private void startFlow(String flowName) throws Exception {
((Flow) getFlowConstruct(flowName)).start();
}
}