You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2020/11/27 08:05:30 UTC
[camel-quarkus] branch master updated: Test the Freemarker
extension properly, although only in JVM mode for now
This is an automated email from the ASF dual-hosted git repository.
ppalaga pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/master by this push:
new c48e2ba Test the Freemarker extension properly, although only in JVM mode for now
c48e2ba is described below
commit c48e2bace0cd6d2c3494a513de91185f99e63829
Author: Peter Palaga <pp...@redhat.com>
AuthorDate: Wed Nov 25 10:28:12 2020 +0100
Test the Freemarker extension properly, although only in JVM mode for
now
The tests are adapted from
https://github.com/apache/camel-quarkus/pull/835 by @carlosthe19916
---
.../freemarker/it/FreemarkerResource.java | 122 ++++++++++++++++++---
.../quarkus/component/freemarker/it/MyPerson.java} | 36 ++++--
.../src/main/resources/AppleTemplate.ftl | 19 ++++
.../src/main/resources/application.properties | 21 ++++
.../subfolder/templates/BodyAsDomainObject.ftl | 20 ++++
.../apache/camel/component/freemarker/example.ftl | 19 ++++
.../component/freemarker/it/FreemarkerTest.java | 56 +++++++++-
7 files changed, 263 insertions(+), 30 deletions(-)
diff --git a/extensions-jvm/freemarker/integration-test/src/main/java/org/apache/camel/quarkus/component/freemarker/it/FreemarkerResource.java b/extensions-jvm/freemarker/integration-test/src/main/java/org/apache/camel/quarkus/component/freemarker/it/FreemarkerResource.java
index 845b95f..d24527b 100644
--- a/extensions-jvm/freemarker/integration-test/src/main/java/org/apache/camel/quarkus/component/freemarker/it/FreemarkerResource.java
+++ b/extensions-jvm/freemarker/integration-test/src/main/java/org/apache/camel/quarkus/component/freemarker/it/FreemarkerResource.java
@@ -16,36 +16,128 @@
*/
package org.apache.camel.quarkus.component.freemarker.it;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
+import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
+import javax.ws.rs.POST;
import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import org.apache.camel.CamelContext;
-import org.jboss.logging.Logger;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.freemarker.FreemarkerConstants;
@Path("/freemarker")
@ApplicationScoped
public class FreemarkerResource {
- private static final Logger LOG = Logger.getLogger(FreemarkerResource.class);
-
- private static final String COMPONENT_FREEMARKER = "freemarker";
@Inject
- CamelContext context;
+ ProducerTemplate producerTemplate;
+
+ @Path("/freemarkerLetter")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.TEXT_PLAIN)
+ public String freemarkerLetter() throws Exception {
+ return producerTemplate.request(
+ "freemarker:org/apache/camel/component/freemarker/example.ftl?allowContextMapAll=true", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setBody("Monday");
+ exchange.getIn().setHeader("name", "Christian");
+ exchange.setProperty("item", "7");
+ }
+ })
+ .getMessage().getBody(String.class);
+ }
+
+ @Path("/freemarkerDataModel")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.TEXT_PLAIN)
+ public String freemarkerDataModel() throws Exception {
+ return producerTemplate.request(
+ "freemarker:org/apache/camel/component/freemarker/example.ftl?allowTemplateFromHeader=true&allowContextMapAll=true",
+ new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setBody("");
+ exchange.getIn().setHeader("name", "Christian");
+ Map<String, Object> variableMap = new HashMap<>();
+ Map<String, Object> headersMap = new HashMap<>();
+ headersMap.put("name", "Willem");
+ variableMap.put("headers", headersMap);
+ variableMap.put("body", "Monday");
+ variableMap.put("exchange", exchange);
+ exchange.getIn().setHeader(FreemarkerConstants.FREEMARKER_DATA_MODEL, variableMap);
+ exchange.setProperty("item", "7");
+ }
+ })
+ .getMessage().getBody(String.class);
+ }
+
+ @Path("/valuesInProperties")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.TEXT_PLAIN)
+ public String valuesInProperties() throws Exception {
+ return producerTemplate.request(
+ "freemarker:dummy?allowTemplateFromHeader=true&allowContextMapAll=true",
+ exchange1 -> {
+ exchange1.getIn().setHeader(
+ FreemarkerConstants.FREEMARKER_TEMPLATE,
+ "Dear ${exchange.properties.name}. You ordered item ${exchange.properties.item}.");
+ exchange1.setProperty("name", "Christian");
+ exchange1.setProperty("item", "7");
+ })
+ .getMessage().getBody(String.class);
+ }
+
+ @Path("/templateInHeader")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.TEXT_PLAIN)
+ public String templateInHeader() throws Exception {
+ final Map<String, Object> headers = new HashMap<>();
+ headers.put(FreemarkerConstants.FREEMARKER_TEMPLATE, "<hello>${headers.cheese}</hello>");
+ headers.put("cheese", "foo");
+ return producerTemplate.requestBodyAndHeaders("freemarker://dummy?allowContextMapAll=true", headers, null,
+ String.class);
+ }
- @Path("/load/component/freemarker")
+ @Path("/bodyAsDomainObject/{firstName}/{lastName}")
@GET
+ @Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
- public Response loadComponentFreemarker() throws Exception {
- /* This is an autogenerated test */
- if (context.getComponent(COMPONENT_FREEMARKER) != null) {
- return Response.ok().build();
- }
- LOG.warnf("Could not load [%s] from the Camel context", COMPONENT_FREEMARKER);
- return Response.status(500, COMPONENT_FREEMARKER + " could not be loaded from the Camel context").build();
+ public String bodyAsDomainObject(@PathParam("firstName") String firstName, @PathParam("lastName") String lastName)
+ throws Exception {
+ return producerTemplate.requestBody("freemarker:folder/subfolder/templates/BodyAsDomainObject.ftl",
+ new MyPerson(firstName, lastName),
+ String.class);
}
+
+ @Path("/apple")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.TEXT_PLAIN)
+ public String apple() throws Exception {
+ return producerTemplate
+ .request("freemarker:AppleTemplate.ftl?allowContextMapAll=true", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setBody("Orange");
+ exchange.getIn().setHeader("color", "orange");
+ exchange.setProperty("price", "7");
+ }
+ })
+ .getMessage().getBody(String.class);
+ }
+
}
diff --git a/extensions-jvm/freemarker/integration-test/src/test/java/org/apache/camel/quarkus/component/freemarker/it/FreemarkerTest.java b/extensions-jvm/freemarker/integration-test/src/main/java/org/apache/camel/quarkus/component/freemarker/it/MyPerson.java
similarity index 55%
copy from extensions-jvm/freemarker/integration-test/src/test/java/org/apache/camel/quarkus/component/freemarker/it/FreemarkerTest.java
copy to extensions-jvm/freemarker/integration-test/src/main/java/org/apache/camel/quarkus/component/freemarker/it/MyPerson.java
index 58fbdc5..1cf3731 100644
--- a/extensions-jvm/freemarker/integration-test/src/test/java/org/apache/camel/quarkus/component/freemarker/it/FreemarkerTest.java
+++ b/extensions-jvm/freemarker/integration-test/src/main/java/org/apache/camel/quarkus/component/freemarker/it/MyPerson.java
@@ -16,19 +16,33 @@
*/
package org.apache.camel.quarkus.component.freemarker.it;
-import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
-import org.junit.jupiter.api.Test;
+import io.quarkus.runtime.annotations.RegisterForReflection;
-@QuarkusTest
-class FreemarkerTest {
+@RegisterForReflection
+public class MyPerson {
+ public MyPerson(String givenName, String familyName) {
+ this.givenName = givenName;
+ this.familyName = familyName;
+ }
+
+ private final String givenName;
+ private final String familyName;
- @Test
- public void loadComponentFreemarker() {
- /* A simple autogenerated test */
- RestAssured.get("/freemarker/load/component/freemarker")
- .then()
- .statusCode(200);
+ public String getGivenName() {
+ return givenName;
}
+ public String getFamilyName() {
+ return familyName;
+ }
+
+ @Override
+ public String toString() {
+ return "MyPerson{"
+ + "givenName='"
+ + givenName + '\''
+ + ", familyName='"
+ + familyName + '\''
+ + '}';
+ }
}
diff --git a/extensions-jvm/freemarker/integration-test/src/main/resources/AppleTemplate.ftl b/extensions-jvm/freemarker/integration-test/src/main/resources/AppleTemplate.ftl
new file mode 100644
index 0000000..15c03d3
--- /dev/null
+++ b/extensions-jvm/freemarker/integration-test/src/main/resources/AppleTemplate.ftl
@@ -0,0 +1,19 @@
+<#--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+I am a ${body} whose color is ${headers.color}. I cost ${exchange.properties.price}.
\ No newline at end of file
diff --git a/extensions-jvm/freemarker/integration-test/src/main/resources/application.properties b/extensions-jvm/freemarker/integration-test/src/main/resources/application.properties
new file mode 100644
index 0000000..5e200d3
--- /dev/null
+++ b/extensions-jvm/freemarker/integration-test/src/main/resources/application.properties
@@ -0,0 +1,21 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+#
+# Quarkus
+#
+quarkus.freemarker.resource-paths=classpath:
+quarkus.freemarker.default-encoding=UTF-8
diff --git a/extensions-jvm/freemarker/integration-test/src/main/resources/folder/subfolder/templates/BodyAsDomainObject.ftl b/extensions-jvm/freemarker/integration-test/src/main/resources/folder/subfolder/templates/BodyAsDomainObject.ftl
new file mode 100644
index 0000000..7648c82
--- /dev/null
+++ b/extensions-jvm/freemarker/integration-test/src/main/resources/folder/subfolder/templates/BodyAsDomainObject.ftl
@@ -0,0 +1,20 @@
+<#--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+Hi ${body.givenName} how are you? Its a nice day.
+Give my regards to the family ${body.familyName}.
\ No newline at end of file
diff --git a/extensions-jvm/freemarker/integration-test/src/main/resources/org/apache/camel/component/freemarker/example.ftl b/extensions-jvm/freemarker/integration-test/src/main/resources/org/apache/camel/component/freemarker/example.ftl
new file mode 100644
index 0000000..b7e6e72
--- /dev/null
+++ b/extensions-jvm/freemarker/integration-test/src/main/resources/org/apache/camel/component/freemarker/example.ftl
@@ -0,0 +1,19 @@
+<#--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+Dear ${headers.name}. You ordered item ${exchange.properties.item} on ${body}.
\ No newline at end of file
diff --git a/extensions-jvm/freemarker/integration-test/src/test/java/org/apache/camel/quarkus/component/freemarker/it/FreemarkerTest.java b/extensions-jvm/freemarker/integration-test/src/test/java/org/apache/camel/quarkus/component/freemarker/it/FreemarkerTest.java
index 58fbdc5..4cb258f 100644
--- a/extensions-jvm/freemarker/integration-test/src/test/java/org/apache/camel/quarkus/component/freemarker/it/FreemarkerTest.java
+++ b/extensions-jvm/freemarker/integration-test/src/test/java/org/apache/camel/quarkus/component/freemarker/it/FreemarkerTest.java
@@ -18,17 +18,65 @@ package org.apache.camel.quarkus.component.freemarker.it;
import io.quarkus.test.junit.QuarkusTest;
import io.restassured.RestAssured;
+import io.restassured.http.ContentType;
import org.junit.jupiter.api.Test;
+import static org.hamcrest.Matchers.equalTo;
+
@QuarkusTest
class FreemarkerTest {
@Test
- public void loadComponentFreemarker() {
- /* A simple autogenerated test */
- RestAssured.get("/freemarker/load/component/freemarker")
+ public void freemarkerLetter() {
+ RestAssured.given()
+ .contentType(ContentType.JSON)
+ .accept(ContentType.TEXT)
+ .post("/freemarker/freemarkerLetter")
+ .then()
+ .statusCode(200)
+ .body(equalTo("Dear Christian. You ordered item 7 on Monday."));
+ }
+
+ @Test
+ public void freemarkerDataModel() {
+ RestAssured.given()
+ .contentType(ContentType.JSON)
+ .accept(ContentType.TEXT)
+ .post("/freemarker/freemarkerDataModel")
+ .then()
+ .statusCode(200)
+ .body(equalTo("Dear Willem. You ordered item 7 on Monday."));
+ }
+
+ @Test
+ public void valuesInProperties() {
+ RestAssured.given()
+ .contentType(ContentType.JSON)
+ .accept(ContentType.TEXT)
+ .post("/freemarker/valuesInProperties")
+ .then()
+ .statusCode(200)
+ .body(equalTo("Dear Christian. You ordered item 7."));
+ }
+
+ @Test
+ public void bodyAsDomainObject() {
+ RestAssured.given()
+ .accept(ContentType.TEXT)
+ .get("/freemarker/bodyAsDomainObject/{firstName}/{lastName}", "Claus", "Ibsen")
.then()
- .statusCode(200);
+ .statusCode(200)
+ .body(equalTo("Hi Claus how are you? Its a nice day.\nGive my regards to the family Ibsen."));
}
+ @Test
+ public void apple() {
+ RestAssured.given()
+ .contentType(ContentType.JSON)
+ .accept(ContentType.TEXT)
+ .post("/freemarker/apple")
+ .then()
+ .statusCode(200)
+ .body(equalTo("I am a Orange whose color is orange. I cost 7."));
+ }
}