You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zh...@apache.org on 2023/04/14 05:32:01 UTC

[camel-quarkus] 01/02: Fix #4717 to expand camel-quarkus-mybatis test coverage

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

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

commit 8c368fa7d6d7fabef7841b1c2c31be2b811b7515
Author: Zheng Feng <zh...@gmail.com>
AuthorDate: Wed Apr 12 22:26:46 2023 +0800

    Fix #4717 to expand camel-quarkus-mybatis test coverage
---
 integration-tests/mybatis/pom.xml                  |   4 +-
 .../quarkus/component/mybatis/it/MyBatisRoute.java |  36 +++++-
 .../component/mybatis/it/MybatisResource.java      |  67 ++++++++++
 .../src/main/resources/application.properties      |   2 +
 .../mybatis/src/main/resources/insert.sql          |   7 +-
 .../component/mybatis/it/MyBatisConsumerTest.java  |  47 +++++++
 .../quarkus/component/mybatis/it/MyBatisTest.java  | 141 ++++++++++++++++++++-
 7 files changed, 292 insertions(+), 12 deletions(-)

diff --git a/integration-tests/mybatis/pom.xml b/integration-tests/mybatis/pom.xml
index e45bc4f85e..9243f2d594 100644
--- a/integration-tests/mybatis/pom.xml
+++ b/integration-tests/mybatis/pom.xml
@@ -37,11 +37,11 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-mock</artifactId>
+            <artifactId>camel-quarkus-jta</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-jta</artifactId>
+            <artifactId>camel-quarkus-mock</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel.quarkus</groupId>
diff --git a/integration-tests/mybatis/src/main/java/org/apache/camel/quarkus/component/mybatis/it/MyBatisRoute.java b/integration-tests/mybatis/src/main/java/org/apache/camel/quarkus/component/mybatis/it/MyBatisRoute.java
index 6747a88939..1c2833b246 100644
--- a/integration-tests/mybatis/src/main/java/org/apache/camel/quarkus/component/mybatis/it/MyBatisRoute.java
+++ b/integration-tests/mybatis/src/main/java/org/apache/camel/quarkus/component/mybatis/it/MyBatisRoute.java
@@ -20,23 +20,49 @@ package org.apache.camel.quarkus.component.mybatis.it;
 import javax.enterprise.context.ApplicationScoped;
 
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.quarkus.component.mybatis.it.entity.Account;
 
 @ApplicationScoped
 public class MyBatisRoute extends RouteBuilder {
     @Override
     public void configure() throws Exception {
         from("direct:selectOne")
-                .to("mybatis:selectAccountById?statementType=SelectOne")
-                .to("mock:result");
+                .to("mybatis:selectAccountById?statementType=SelectOne");
+
+        from("direct:selectList")
+                .to("mybatis:selectAllAccounts?statementType=SelectList");
 
         from("direct:insertOne")
                 .transacted()
                 .to("mybatis:insertAccount?statementType=Insert")
-                .to("mock:result");
+                .process(exchange -> {
+                    Account account = exchange.getIn().getBody(Account.class);
+                    if (account.getFirstName().equals("Rollback")) {
+                        throw new RuntimeException("Rollback");
+                    }
+                });
+
+        from("direct:insertList")
+                .transacted()
+                .to("mybatis:batchInsertAccount?statementType=InsertList");
 
         from("direct:deleteOne")
                 .transacted()
-                .to("mybatis:deleteAccountById?statementType=Delete")
-                .to("mock:result");
+                .to("mybatis:deleteAccountById?statementType=Delete");
+
+        from("direct:deleteList")
+                .transacted()
+                .to("mybatis:batchDeleteAccountById?statementType=DeleteList");
+
+        from("direct:updateOne")
+                .transacted()
+                .to("mybatis:updateAccount?statementType=Update");
+
+        from("direct:updateList")
+                .transacted()
+                .to("mybatis:batchUpdateAccount?statementType=UpdateList");
+
+        from("mybatis:selectUnprocessedAccounts?onConsume=consumeAccount").routeId("mybatis-consumer").autoStartup(false)
+                .to("mock:results");
     }
 }
diff --git a/integration-tests/mybatis/src/main/java/org/apache/camel/quarkus/component/mybatis/it/MybatisResource.java b/integration-tests/mybatis/src/main/java/org/apache/camel/quarkus/component/mybatis/it/MybatisResource.java
index 27924c7f08..550b982144 100644
--- a/integration-tests/mybatis/src/main/java/org/apache/camel/quarkus/component/mybatis/it/MybatisResource.java
+++ b/integration-tests/mybatis/src/main/java/org/apache/camel/quarkus/component/mybatis/it/MybatisResource.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.quarkus.component.mybatis.it;
 
+import java.util.List;
+import java.util.Map;
+
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 import javax.transaction.Transactional;
@@ -23,18 +26,23 @@ import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
 import javax.ws.rs.GET;
 import javax.ws.rs.NotFoundException;
+import javax.ws.rs.PATCH;
 import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
+import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.quarkus.component.mybatis.it.entity.Account;
 
 @Path("/mybatis")
 @ApplicationScoped
 public class MybatisResource {
+    @Inject
+    CamelContext context;
 
     @Inject
     ProducerTemplate template;
@@ -50,6 +58,13 @@ public class MybatisResource {
         return account;
     }
 
+    @Path("/selectList")
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public List selectList() {
+        return template.requestBody("direct:selectList", null, List.class);
+    }
+
     @Path("/insertOne")
     @POST
     @Consumes(MediaType.APPLICATION_JSON)
@@ -60,6 +75,16 @@ public class MybatisResource {
         return getCounts();
     }
 
+    @Path("/insertList")
+    @POST
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.TEXT_PLAIN)
+    @Transactional
+    public Integer insertList(List<Account> accounts) {
+        template.sendBody("direct:insertList", accounts);
+        return getCounts();
+    }
+
     @Path("/deleteOne")
     @DELETE
     @Produces(MediaType.TEXT_PLAIN)
@@ -69,7 +94,49 @@ public class MybatisResource {
         return getCounts();
     }
 
+    @Path("/deleteList")
+    @DELETE
+    @Produces(MediaType.TEXT_PLAIN)
+    @Transactional
+    public Integer deleteList(List<Integer> ids) {
+        template.sendBody("direct:deleteList", ids);
+        return getCounts();
+    }
+
+    @Path("/updateOne")
+    @PATCH
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.TEXT_PLAIN)
+    @Transactional
+    public Integer updateOne(Account account) {
+        template.sendBody("direct:updateOne", account);
+        return getCounts();
+    }
+
+    @Path("/updateList")
+    @PATCH
+    @Consumes(MediaType.APPLICATION_JSON)
+    @Produces(MediaType.TEXT_PLAIN)
+    @Transactional
+    public Integer updateList(Map<String, Object> params) {
+        template.sendBody("direct:updateList", params);
+        return getCounts();
+    }
+
     private Integer getCounts() {
         return template.requestBody("mybatis:count?statementType=SelectOne", null, Integer.class);
     }
+
+    @Path("/consumer")
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public List consumer() throws Exception {
+        MockEndpoint results = context.getEndpoint("mock:results", MockEndpoint.class);
+        results.expectedMessageCount(2);
+
+        context.getRouteController().startRoute("mybatis-consumer");
+        MockEndpoint.assertIsSatisfied(context);
+
+        return template.requestBody("mybatis:selectProcessedAccounts?statementType=SelectList", null, List.class);
+    }
 }
diff --git a/integration-tests/mybatis/src/main/resources/application.properties b/integration-tests/mybatis/src/main/resources/application.properties
index 6f32aa9595..a513710e03 100644
--- a/integration-tests/mybatis/src/main/resources/application.properties
+++ b/integration-tests/mybatis/src/main/resources/application.properties
@@ -20,6 +20,8 @@ quarkus.datasource.username=username-default
 quarkus.datasource.jdbc.url=jdbc:h2:tcp://localhost/mem:default
 quarkus.datasource.jdbc.transactions=xa
 
+quarkus.transaction-manager.enable-recovery=true
+
 quarkus.mybatis.environment=development
 quarkus.mybatis.xmlconfig.enable=true
 quarkus.mybatis.xmlconfig.path=SqlMapConfig.xml
diff --git a/integration-tests/mybatis/src/main/resources/insert.sql b/integration-tests/mybatis/src/main/resources/insert.sql
index c0a668569f..6c4759bd36 100644
--- a/integration-tests/mybatis/src/main/resources/insert.sql
+++ b/integration-tests/mybatis/src/main/resources/insert.sql
@@ -21,9 +21,10 @@ CREATE TABLE ACCOUNT (
     ACC_ID INTEGER,
     ACC_FIRST_NAME VARCHAR(255),
     ACC_LAST_NAME VARCHAR(255),
-    ACC_EMAIL VARCHAR(255)
+    ACC_EMAIL VARCHAR(255),
+    PROCESSED BOOLEAN DEFAULT false
 );
 
-INSERT INTO ACCOUNT VALUES (123, 'James', 'Strachan', 'TryGuessing@gmail.com');
-INSERT INTO ACCOUNT VALUES (456, 'Claus', 'Ibsen', 'Noname@gmail.com');
+INSERT INTO ACCOUNT VALUES (123, 'James', 'Strachan', 'TryGuessing@gmail.com', false);
+INSERT INTO ACCOUNT VALUES (456, 'Claus', 'Ibsen', 'Noname@gmail.com', false);
 
diff --git a/integration-tests/mybatis/src/test/java/org/apache/camel/quarkus/component/mybatis/it/MyBatisConsumerTest.java b/integration-tests/mybatis/src/test/java/org/apache/camel/quarkus/component/mybatis/it/MyBatisConsumerTest.java
new file mode 100644
index 0000000000..fd138b29f0
--- /dev/null
+++ b/integration-tests/mybatis/src/test/java/org/apache/camel/quarkus/component/mybatis/it/MyBatisConsumerTest.java
@@ -0,0 +1,47 @@
+/*
+ * 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.
+ */
+
+package org.apache.camel.quarkus.component.mybatis.it;
+
+import io.quarkus.test.common.QuarkusTestResource;
+import io.quarkus.test.h2.H2DatabaseTestResource;
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import org.junit.jupiter.api.Test;
+
+import static org.hamcrest.Matchers.equalTo;
+
+@QuarkusTest
+@QuarkusTestResource(H2DatabaseTestResource.class)
+public class MyBatisConsumerTest {
+
+    @Test
+    public void testSelectList() {
+        RestAssured.get("/mybatis/consumer")
+                .then()
+                .statusCode(200)
+                .body("size()", equalTo(2))
+                .body("[0].id", equalTo(123))
+                .body("[0].firstName", equalTo("James"))
+                .body("[0].lastName", equalTo("Strachan"))
+                .body("[0].emailAddress", equalTo("TryGuessing@gmail.com"))
+                .body("[1].id", equalTo(456))
+                .body("[1].firstName", equalTo("Claus"))
+                .body("[1].lastName", equalTo("Ibsen"))
+                .body("[1].emailAddress", equalTo("Noname@gmail.com"));
+    }
+}
diff --git a/integration-tests/mybatis/src/test/java/org/apache/camel/quarkus/component/mybatis/it/MyBatisTest.java b/integration-tests/mybatis/src/test/java/org/apache/camel/quarkus/component/mybatis/it/MyBatisTest.java
index 0d72ad6d9b..e9f9bcc457 100644
--- a/integration-tests/mybatis/src/test/java/org/apache/camel/quarkus/component/mybatis/it/MyBatisTest.java
+++ b/integration-tests/mybatis/src/test/java/org/apache/camel/quarkus/component/mybatis/it/MyBatisTest.java
@@ -16,6 +16,12 @@
  */
 package org.apache.camel.quarkus.component.mybatis.it;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import io.quarkus.test.common.QuarkusTestResource;
 import io.quarkus.test.h2.H2DatabaseTestResource;
 import io.quarkus.test.junit.QuarkusTest;
@@ -33,9 +39,16 @@ public class MyBatisTest {
     public void tests() {
         testSelectOne();
         testSelectOneNotFound();
+        testSelectList();
+        testUpdateOne();
+        testUpdateList();
         testInsert();
+        testInsertList();
+        testInsertRollback();
+        testSelectOneNotFound();
         testDelete();
         testDeleteNotFound();
+        testDeleteList();
     }
 
     public void testSelectOne() {
@@ -54,6 +67,21 @@ public class MyBatisTest {
                 .statusCode(404);
     }
 
+    public void testSelectList() {
+        RestAssured.get("/mybatis/selectList")
+                .then()
+                .statusCode(200)
+                .body("size()", equalTo(2))
+                .body("[0].id", equalTo(123))
+                .body("[0].firstName", equalTo("James"))
+                .body("[0].lastName", equalTo("Strachan"))
+                .body("[0].emailAddress", equalTo("TryGuessing@gmail.com"))
+                .body("[1].id", equalTo(456))
+                .body("[1].firstName", equalTo("Claus"))
+                .body("[1].lastName", equalTo("Ibsen"))
+                .body("[1].emailAddress", equalTo("Noname@gmail.com"));
+    }
+
     public void testInsert() {
         Account account = new Account();
         account.setId(444);
@@ -70,17 +98,126 @@ public class MyBatisTest {
                 .body(equalTo("3"));
     }
 
+    public void testInsertRollback() {
+        Account account = new Account();
+        account.setId(999);
+        account.setFirstName("Rollback");
+        account.setLastName("Rollback");
+        account.setEmailAddress("Rollback@gmail.com");
+
+        RestAssured.given()
+                .contentType(ContentType.JSON)
+                .body(account)
+                .post("/mybatis/insertOne")
+                .then()
+                .statusCode(500);
+    }
+
+    public void testInsertList() {
+        Account account1 = new Account();
+        account1.setId(555);
+        account1.setFirstName("Aaron");
+        account1.setLastName("Daubman");
+        account1.setEmailAddress("ReadTheDevList@gmail.com");
+
+        Account account2 = new Account();
+        account2.setId(666);
+        account2.setFirstName("Amos");
+        account2.setLastName("Feng");
+        account2.setEmailAddress("ZHENG@gmail.com");
+
+        List<Account> accountList = new ArrayList<>(2);
+
+        accountList.add(account1);
+        accountList.add(account2);
+
+        RestAssured.given()
+                .contentType(ContentType.JSON)
+                .body(accountList)
+                .post("/mybatis/insertList")
+                .then()
+                .statusCode(200)
+                .body(equalTo("5"));
+    }
+
+    public void testUpdateOne() {
+        Account account = new Account();
+        account.setId(456);
+        account.setFirstName("Claus");
+        account.setLastName("Ibsen");
+        account.setEmailAddress("Other@gmail.com");
+
+        RestAssured.given()
+                .contentType(ContentType.JSON)
+                .body(account)
+                .patch("/mybatis/updateOne")
+                .then()
+                .statusCode(200)
+                .body(equalTo("2"));
+
+        RestAssured.get("/mybatis/selectOne?id=456")
+                .then()
+                .statusCode(200)
+                .body("id", equalTo(456))
+                .body("firstName", equalTo("Claus"))
+                .body("lastName", equalTo("Ibsen"))
+                .body("emailAddress", equalTo("Other@gmail.com"));
+    }
+
+    public void testUpdateList() {
+        Account account1 = new Account();
+        account1.setId(123);
+
+        Account account2 = new Account();
+        account2.setId(456);
+
+        Map<String, Object> params = new HashMap<>();
+        params.put("list", Arrays.asList(account1, account2));
+        params.put("emailAddress", "Update@gmail.com");
+
+        RestAssured.given()
+                .contentType(ContentType.JSON)
+                .body(params)
+                .patch("/mybatis/updateList")
+                .then()
+                .statusCode(200)
+                .body(equalTo("2"));
+
+        RestAssured.get("/mybatis/selectList")
+                .then()
+                .statusCode(200)
+                .body("size()", equalTo(2))
+                .body("[0].id", equalTo(123))
+                .body("[0].firstName", equalTo("James"))
+                .body("[0].lastName", equalTo("Strachan"))
+                .body("[0].emailAddress", equalTo("Update@gmail.com"))
+                .body("[1].id", equalTo(456))
+                .body("[1].firstName", equalTo("Claus"))
+                .body("[1].lastName", equalTo("Ibsen"))
+                .body("[1].emailAddress", equalTo("Update@gmail.com"));
+    }
+
     public void testDelete() {
         RestAssured.delete("/mybatis/deleteOne?id=456")
                 .then()
                 .statusCode(200)
-                .body(equalTo("2"));
+                .body(equalTo("4"));
     }
 
     public void testDeleteNotFound() {
         RestAssured.delete("/mybatis/deleteOne?id=999")
                 .then()
                 .statusCode(200)
-                .body(equalTo("2"));
+                .body(equalTo("4"));
+    }
+
+    public void testDeleteList() {
+        RestAssured.given()
+                .contentType(ContentType.JSON)
+                .body(Arrays.asList(444, 555, 666))
+                .delete("/mybatis/deleteList")
+                .then()
+                .statusCode(200)
+                .body(equalTo("1"));
     }
 }