/*
* 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.typed.value;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mule.runtime.api.metadata.MediaType.ANY;
import static org.mule.runtime.api.metadata.MediaType.APPLICATION_JSON;
import static org.mule.tck.junit4.matcher.DataTypeMatcher.like;
import static org.mule.test.typed.value.extension.extension.TypedValueParameterOperations.THIS_IS_A_DEFAULT_STRING;
import org.mule.runtime.api.metadata.TypedValue;
import org.mule.runtime.api.streaming.bytes.CursorStreamProvider;
import org.mule.runtime.core.api.Event;
import org.mule.runtime.core.api.construct.Flow;
import org.mule.runtime.core.util.IOUtils;
import org.mule.tck.probe.JUnitLambdaProbe;
import org.mule.tck.probe.PollingProber;
import org.mule.test.heisenberg.extension.model.DifferedKnockableDoor;
import org.mule.test.typed.value.extension.extension.TypedValueSource;
import org.mule.test.vegan.extension.VeganProductInformation;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.junit.After;
import org.junit.Test;
public class TypedValueParameterOperationExecutionTestCase extends AbstractTypedValueTestCase {
private static final String STRING_VALUE = "string";
private static final String JSON_OBJECT = "{\n" +
" \"a\": \"json value\"\n" +
"}";
private static final String THIS_IS_A_STRING = "This is a string";
@Override
protected String[] getConfigFiles() {
return new String[] {"typed-value-config.xml"};
}
@Override
protected boolean isDisposeContextPerClass() {
return true;
}
@After
public void cleanUp() {
TypedValueSource.onSuccessValue = null;
}
@Test
public void typedValueForString() throws Exception {
runAndAssertTypedValue("typedValueForString", THIS_IS_A_STRING, WILDCARD, null);
}
@Test
public void typedValueForStringFromByteArray() throws Exception {
runAndAssertTypedValue("typedValueForStringFromByteArray", THIS_IS_A_STRING, WILDCARD, null);
}
@Test
public void typedValueForStringWithDefaultValue() throws Exception {
runAndAssertTypedValue("typedValueForStringWithDefaultValue", THIS_IS_A_DEFAULT_STRING, ANY, null);
}
@Test
public void typedValueForStringList() throws Exception {
List<Object> strings = new ArrayList<>();
strings.add("string");
strings.add("string");
runAndAssertTypedValue("typedValueForStringList", strings, WILDCARD, null);
}
@Test
public void typedValueForStringListAsChild() throws Exception {
List<Object> strings = new ArrayList<>();
strings.add("string");
strings.add("string");
runAndAssertTypedValue("typedValueForStringListAsChild", strings, ANY, null);
}
@Test
public void typedValueForStringMap() throws Exception {
HashMap<Object, Object> map = new LinkedHashMap<>();
map.put("string", "string");
runAndAssertTypedValue("typedValueForStringMap", map, WILDCARD, null);
}
@Test
public void typedValueForStringMapAsChild() throws Exception {
HashMap<Object, Object> map = new LinkedHashMap<>();
map.put("string", "string");
runAndAssertTypedValue("typedValueForStringMapAsChild", map, ANY, null);
}
@Test
public void typedValueForDoorAsChild() throws Exception {
runAndAssertTypedValue("typedValueForDoorAsChild", DOOR, ANY, null);
}
@Test
public void typedValueForDoorListAsChild() throws Exception {
ArrayList<Object> doors = new ArrayList<>();
doors.add(DOOR);
runAndAssertTypedValue("typedValueForDoorListAsChild", doors, ANY, null);
}
@Test
public void typedValueForDoorMapAsChild() throws Exception {
Map<Object, Object> doors = new LinkedHashMap<>();
doors.put("key", DOOR);
runAndAssertTypedValue("typedValueForDoorMapAsChild", doors, ANY, null);
}
@Test
public void typedValueOperationStringMapListParameter() throws Exception {
Map<Object, Object> mapStringList = new LinkedHashMap<>();
mapStringList.put("key", Collections.singletonList("string"));
runAndAssertTypedValue("typedValueOperationStringMapListParameter", mapStringList, ANY, null);
}
@Test
public void typedValueForStringOnSourceOnSuccess() throws Exception {
Flow flow = (Flow) getFlowConstruct("typedValueForStringOnSourceOnSuccess");
flow.start();
new PollingProber(100000, 100).check(new JUnitLambdaProbe(() -> TypedValueSource.onSuccessValue != null));
assertTypedValue(TypedValueSource.onSuccessValue, STRING_VALUE, WILDCARD, null);
}
@Test
public void typedValueForStringInsidePojo() throws Exception {
Event event = flowRunner("typedValueForStringInsidePojo").run();
DifferedKnockableDoor value = (DifferedKnockableDoor) event.getMessage().getPayload().getValue();
assertTypedValue(value.getAddress(), STRING_VALUE, WILDCARD, null);
}
@Test
public void typedValueForContentOnNullSafePojoWithDefaultValue() throws Exception {
Event event = flowRunner("typedValueForContentOnNullSafePojoWithDefaultValue").run();
VeganProductInformation value = (VeganProductInformation) event.getMessage().getPayload().getValue();
assertTypedValue(value.getDescription(), STRING_VALUE, WILDCARD, null);
}
@Test
public void typedValueForContentOnNullSafePojoWithDefaultValueWithOutDefiningPojo() throws Exception {
Event event = flowRunner("typedValueForContentOnNullSafePojoWithDefaultValueWithOutDefiningPojo").run();
VeganProductInformation value = (VeganProductInformation) event.getMessage().getPayload().getValue();
assertTypedValue(value.getDescription(), STRING_VALUE, WILDCARD, null);
}
@Test
public void typedValueOnContentOnNullSafeWithExplicitValues() throws Exception {
Event event = flowRunner("typedValueOnContentOnNullSafeWithExplicitValues").run();
VeganProductInformation value = (VeganProductInformation) event.getMessage().getPayload().getValue();
assertTypedValue(value.getDescription(), STRING_VALUE, WILDCARD, null);
assertTypedValue(value.getBrandName(), STRING_VALUE, WILDCARD, null);
assertTypedValue(value.getWeight(), 5, WILDCARD, null);
}
@Test
public void typedValueForObject() throws Exception {
Event event = flowRunner("typedValueForObject").keepStreamsOpen().run();
TypedValue jsonObject = (TypedValue) event.getMessage().getPayload().getValue();
InputStream content = ((CursorStreamProvider) jsonObject.getValue()).openCursor();
assertThat(IOUtils.toString(content), is(JSON_OBJECT));
assertThat(jsonObject.getDataType(), is(like(jsonObject.getDataType().getType(), APPLICATION_JSON, UTF8)));
}
@Test
public void typedValueForInputStream() throws Exception {
Event event = flowRunner("typedValueForInputStream").run();
TypedValue jsonObject = (TypedValue) event.getMessage().getPayload().getValue();
assertThat(IOUtils.toString((InputStream) jsonObject.getValue()), is(JSON_OBJECT));
assertThat(jsonObject.getDataType(), is(like(jsonObject.getDataType().getType(), APPLICATION_JSON, UTF8)));
}
@Test
public void typedValueOperationWithExplicitStringContent() throws Exception {
runAndAssertTypedValue("typedValueOperationWithExplicitStringContent", STRING_VALUE, WILDCARD, null);
}
@Test
public void typedValueOperationWithDefaultStringContent() throws Exception {
runAndAssertTypedValue("typedValueOperationWithDefaultStringContent", STRING_VALUE, WILDCARD, null);
}
@Test
public void typedValueOperationWithExplicitNullContent() throws Exception {
runAndAssertTypedValue("typedValueOperationWithExplicitNullContent", null, APPLICATION_JSON, UTF8);
}
}