package org.jentrata.ebms.rest.internal.routes; import com.google.common.collect.ImmutableMap; import org.apache.camel.EndpointInject; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.impl.DefaultExchange; import org.apache.camel.language.constant.ConstantLanguage; import org.apache.camel.test.junit4.CamelTestSupport; import org.jentrata.ebms.EbmsConstants; import org.junit.Test; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import static org.hamcrest.Matchers.*; /** * Unit test for org.jentrata.ebms.rest.internal.routes.RestApiRouteBuilder * * @author aaronwalker */ public class RestApiRouteBuilderTest extends CamelTestSupport { @EndpointInject(uri = "mock:mockServiceImpl") protected MockEndpoint mockServiceImpl; @Test public void testCallServiceRouteImpl() throws Exception { mockServiceImpl.setExpectedMessageCount(1); mockServiceImpl.expectedHeaderReceived("serviceName", "testService"); mockServiceImpl.expectedHeaderReceived("operationName", "testMethod"); mockServiceImpl.returnReplyBody(ConstantLanguage.constant( new ImmutableMap.Builder<String,String>() .put("key1", "value1") .put("key2", "value2") .build() )); Exchange request = new DefaultExchange(context); request.getIn().setBody("test"); request.getIn().setHeader(Exchange.HTTP_PATH, "/testService/testMsgID"); request.getIn().setHeader("operationName", "testMethod"); Exchange response = context().createProducerTemplate().send("direct:testRestApi",request); assertMockEndpointsSatisfied(); assertThat(response.getOut().getBody(),instanceOf(Response.class)); Response r = response.getOut().getBody(Response.class); assertThat(r.getStatus(),equalTo(200)); assertThat(new String((byte[])r.getEntity()),containsString("\"key1\":\"value1\"")); assertThat(new String((byte[])r.getEntity()),containsString("\"key2\":\"value2\"")); } @Test public void testCallServiceRouteImplWithEmptyResponse() throws Exception { mockServiceImpl.setExpectedMessageCount(1); mockServiceImpl.expectedHeaderReceived("serviceName", "testService"); mockServiceImpl.expectedHeaderReceived("operationName", "testMethod"); mockServiceImpl.whenAnyExchangeReceived(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setBody(null); } }); Exchange request = new DefaultExchange(context); request.getIn().setBody("test"); request.getIn().setHeader(Exchange.HTTP_PATH, "/testService/testMsgID"); request.getIn().setHeader("operationName", "testMethod"); Exchange response = context().createProducerTemplate().send("direct:testRestApi",request); assertMockEndpointsSatisfied(); assertThat(response.getOut().getBody(),instanceOf(Response.class)); Response r = response.getOut().getBody(Response.class); assertThat(r.getStatus(),equalTo(404)); assertThat(r.getEntity(),nullValue()); } @Override protected RouteBuilder[] createRouteBuilders() throws Exception { RestApiRouteBuilder routeBuilder = new RestApiRouteBuilder(); routeBuilder.setRestAPIEndpoint("direct:testRestApi"); return new RouteBuilder[] { routeBuilder, new RouteBuilder() { @Override public void configure() throws Exception { from("direct:testService-testMethod") .setHeader(EbmsConstants.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON)) .to(mockServiceImpl) .routeId("mockTestServiceImpl"); } } }; } }