This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new 05d223a481 Extend validator test coverage
05d223a481 is described below

commit 05d223a48158a4e1cc9a7092912300bd5ee5bf05
Author: JiriOndrusek <[email protected]>
AuthorDate: Thu Sep 5 15:16:20 2024 +0200

    Extend validator test coverage
---
 .../component/validator/it/ValidatorResource.java  | 24 +++++++-
 .../validator/it/ValidatorRouteBuilder.java        |  9 +++
 .../component/validator/it/ValidatorTest.java      | 70 +++++++++++++++++++++-
 3 files changed, 98 insertions(+), 5 deletions(-)

diff --git 
a/integration-tests/validator/src/main/java/org/apache/camel/quarkus/component/validator/it/ValidatorResource.java
 
b/integration-tests/validator/src/main/java/org/apache/camel/quarkus/component/validator/it/ValidatorResource.java
index e54f71e44e..6da076d37c 100644
--- 
a/integration-tests/validator/src/main/java/org/apache/camel/quarkus/component/validator/it/ValidatorResource.java
+++ 
b/integration-tests/validator/src/main/java/org/apache/camel/quarkus/component/validator/it/ValidatorResource.java
@@ -23,9 +23,11 @@ import jakarta.ws.rs.POST;
 import jakarta.ws.rs.Path;
 import jakarta.ws.rs.PathParam;
 import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.QueryParam;
 import jakarta.ws.rs.core.MediaType;
 import jakarta.ws.rs.core.Response;
 import org.apache.camel.ProducerTemplate;
+import 
org.apache.camel.support.processor.validation.NoXmlHeaderValidationException;
 
 @Path("/validator")
 @ApplicationScoped
@@ -33,14 +35,30 @@ public class ValidatorResource {
     @Inject
     ProducerTemplate producerTemplate;
 
-    @Path("/validate/{scheme}")
+    @Path("/validate/{directName}")
     @POST
     @Consumes(MediaType.APPLICATION_XML)
     @Produces(MediaType.TEXT_PLAIN)
-    public Response processOrderInXml(String statement, @PathParam("scheme") 
String scheme) {
+    public Response processOrderInXml(String statement,
+            @QueryParam("sourceHeader") String headerSourceContent,
+            @PathParam("directName") String directName) {
+
+        //if statement == "", use null instead
+        String body = statement != null && !statement.isEmpty() ? statement : 
null;
+
         try {
-            return Response.ok().entity(producerTemplate.requestBody("direct:" 
+ scheme, statement, String.class)).build();
+            if (headerSourceContent != null) {
+                return 
Response.ok().entity(producerTemplate.requestBodyAndHeader("direct:" + 
directName, null, "source",
+                        headerSourceContent, String.class)).build();
+            }
+
+            return Response.ok().entity(producerTemplate.requestBody("direct:" 
+ directName, body, String.class)).build();
+
         } catch (Exception e) {
+            if (e.getCause() instanceof NoXmlHeaderValidationException) {
+                return 
Response.serverError().entity(e.getCause().getMessage()).build();
+            }
+
             return Response.serverError().entity(e.getMessage()).build();
         }
     }
diff --git 
a/integration-tests/validator/src/main/java/org/apache/camel/quarkus/component/validator/it/ValidatorRouteBuilder.java
 
b/integration-tests/validator/src/main/java/org/apache/camel/quarkus/component/validator/it/ValidatorRouteBuilder.java
index f3024468a5..2b816b01d1 100644
--- 
a/integration-tests/validator/src/main/java/org/apache/camel/quarkus/component/validator/it/ValidatorRouteBuilder.java
+++ 
b/integration-tests/validator/src/main/java/org/apache/camel/quarkus/component/validator/it/ValidatorRouteBuilder.java
@@ -46,6 +46,15 @@ public class ValidatorRouteBuilder extends RouteBuilder {
         from("direct:http")
                 .toD("validator:" + serverURL + "/xsd");
 
+        from("direct:headerSource")
+                .to("validator:message.xsd?headerName=source");
+
+        from("direct:headerSourceFailFalse")
+                
.to("validator:message.xsd?headerName=source&failOnNullHeader=false");
+
+        from("direct:classpathFailFalse")
+                .to("validator:message.xsd?failOnNullBody=false");
+
     }
 
     public String createTempXsd(String sourceXsd) {
diff --git 
a/integration-tests/validator/src/test/java/org/apache/camel/quarkus/component/validator/it/ValidatorTest.java
 
b/integration-tests/validator/src/test/java/org/apache/camel/quarkus/component/validator/it/ValidatorTest.java
index d204e2612a..8c70feec46 100644
--- 
a/integration-tests/validator/src/test/java/org/apache/camel/quarkus/component/validator/it/ValidatorTest.java
+++ 
b/integration-tests/validator/src/test/java/org/apache/camel/quarkus/component/validator/it/ValidatorTest.java
@@ -20,6 +20,7 @@ import io.quarkus.test.common.QuarkusTestResource;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
+import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
 
@@ -29,6 +30,8 @@ import static org.hamcrest.Matchers.containsString;
 @QuarkusTestResource(ValidatorTestResource.class)
 class ValidatorTest {
 
+    private final String ERROR_RESPONSE = "Exception occurred during execution 
on the exchange";
+
     @ParameterizedTest
     @ValueSource(strings = { "classpath", "filesystem", "http" })
     public void validXML(String scheme) {
@@ -53,7 +56,6 @@ class ValidatorTest {
     public void inValidXML(String scheme) {
 
         String requestBody = 
"<message><firstName>MyFirstname</firstName></message>";
-        String errorResponse = "Exception occurred during execution on the 
exchange";
 
         RestAssured.given()
                 .contentType(ContentType.XML)
@@ -62,7 +64,71 @@ class ValidatorTest {
                 .then()
                 .statusCode(500)
                 .assertThat()
-                .body(containsString(errorResponse));
+                .body(containsString(ERROR_RESPONSE));
+
+    }
+
+    @Test
+    public void sourceFromHeader() {
+
+        String requestBody = 
"<message><firstName>MyFirstname</firstName><lastName>MyLastname</lastName></message>";
+
+        //header is empty
+        RestAssured.given()
+                .contentType(ContentType.XML)
+                .post("/validator/validate/headerSource")
+                .then()
+                .statusCode(500)
+                .assertThat()
+                .body(containsString("XML header \"source\" could not be 
found"));
+
+        //correct path
+        RestAssured.given()
+                .contentType(ContentType.XML)
+                .queryParam("sourceHeader", requestBody)
+                .post("/validator/validate/headerSource")
+                .then()
+                .statusCode(200);
+
+        requestBody = "<message><firstName>MyFirstname</firstName></message>";
+
+        //invalid xml
+        RestAssured.given()
+                .contentType(ContentType.XML)
+                .queryParam("sourceHeader", requestBody)
+                .post("/validator/validate/headerSource")
+                .then()
+                .statusCode(500)
+                .assertThat()
+                .body(containsString(ERROR_RESPONSE));
+    }
+
+    @Test
+    public void nullParameters() {
+        String errorResponse = "Exception occurred during execution on the 
exchange";
+
+        //failOnNullHeader == false (true is covered as default value by the 
above tests)
+        RestAssured.given()
+                .contentType(ContentType.XML)
+                .post("/validator/validate/headerSourceFailFalse")
+                .then()
+                .statusCode(200);
+
+        //failOnNullBody == true
+        RestAssured.given()
+                .contentType(ContentType.XML)
+                .post("/validator/validate/classpath")
+                .then()
+                .statusCode(500)
+                .assertThat()
+                .body(containsString(ERROR_RESPONSE));
+
+        //failOnNullBody == false
+        RestAssured.given()
+                .contentType(ContentType.XML)
+                .post("/validator/validate/classpathFailFalse")
+                .then()
+                .statusCode(200);
 
     }
 }

Reply via email to