From 63a21add607f928ffda749f62efb17aebf383faf Mon Sep 17 00:00:00 2001 From: zero88 Date: Wed, 28 Sep 2022 16:19:47 +0700 Subject: [PATCH 1/3] [#146] Upgrade version of lib dependencies --- buildSrc/src/main/kotlin/Dependencies.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 2b7c343e..d07b8003 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -38,7 +38,7 @@ object TestLibs { object Version { - const val junit5 = "5.7.0" + const val junit5 = "5.9.1" } const val junit5Api = "org.junit.jupiter:junit-jupiter-api:${Version.junit5}" @@ -51,7 +51,7 @@ object TestLibs { object TestContainers { object Version { - const val ver = "1.17.1" + const val ver = "1.17.3" } const val junit5 = "org.testcontainers:junit-jupiter:${Version.ver}" @@ -64,12 +64,13 @@ object VertxLibs { object Version { private val pool = mapOf(2 to (0..7).toList(), 3 to (0..3).toList()) - @JvmField val vertx = "4.${pool.ver(2, 3)}" + @JvmField val vertx = "4.${pool.ver(3, 0)}" const val docgen = "0.9.4" + const val junitVertx = "4.2.5" } @JvmField val core = "io.vertx:vertx-core:${Version.vertx}" - @JvmField val junit5 = "io.vertx:vertx-junit5:${Version.vertx}" + @JvmField val junit5 = "io.vertx:vertx-junit5:${Version.junitVertx}" @JvmField val sqlClient = "io.vertx:vertx-sql-client:${Version.vertx}" @JvmField val jdbc = "io.vertx:vertx-jdbc-client:${Version.vertx}" @JvmField val pgsql = "io.vertx:vertx-pg-client:${Version.vertx}" From 2abdbd5a1aa2d08ef684516e1eee1d24f025fb10 Mon Sep 17 00:00:00 2001 From: zero88 Date: Mon, 3 Oct 2022 10:56:38 +0700 Subject: [PATCH 2/3] [GHA] Add workaround to verify test failed --- .github/workflows/jooqx.yml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/workflows/jooqx.yml b/.github/workflows/jooqx.yml index 07737a1e..407a28e8 100644 --- a/.github/workflows/jooqx.yml +++ b/.github/workflows/jooqx.yml @@ -118,12 +118,14 @@ jobs: - name: Run test shell: bash run: | - ./gradlew --stacktrace \ - :integtest:${{ steps.db_profile.outputs.project }}:test \ - :integtest:${{ steps.db_profile.outputs.project }}:jacocoTestReport \ - -Pprofile=${{ env.PROFILE }} \ - -PdbImage=${{ steps.db_profile.outputs.dbImage }} \ - -PsemanticVersion=${{ needs.context.outputs.semanticVersion }} + count=$(./gradlew --stacktrace \ + :integtest:${{ steps.db_profile.outputs.project }}:test \ + :integtest:${{ steps.db_profile.outputs.project }}:jacocoTestReport \ + -Pprofile=${{ env.PROFILE }} \ + -PdbImage=${{ steps.db_profile.outputs.dbImage }} \ + -PsemanticVersion=${{ needs.context.outputs.semanticVersion }} \ + | tee 1>&2 | grep -c 'There were failing tests' ||:) + (( count > 0 )) && exit 1 || echo # - name: SonarQube # shell: bash From 7091cef2c2eaa46d54e75a1eb0fbdf68a8c9f18b Mon Sep 17 00:00:00 2001 From: zero88 Date: Sat, 1 Oct 2022 18:10:56 +0700 Subject: [PATCH 3/3] Add some tests to verify datatype Vertx > 4.3.0 --- .../integtest/jooqx/pg/PgUseVertxType.java | 9 ++-- .../jooqx/pg/jooq/PgJDBCQueryTest.java | 16 ++++++ .../jooqx/pg/jooq/PgLegacyDataTypeTest.java | 15 ++++++ .../jooqx/pg/vertx/PgJDBCRawSqlTest.java | 53 ++++++++++++++++++ .../jooqx/pg/vertx/PgPoolRawSqlTest.java | 54 +++++++++++++++++++ sakila | 2 +- webdocs | 2 +- 7 files changed, 145 insertions(+), 6 deletions(-) create mode 100644 integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/vertx/PgJDBCRawSqlTest.java create mode 100644 integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/vertx/PgPoolRawSqlTest.java diff --git a/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/PgUseVertxType.java b/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/PgUseVertxType.java index 1742bf71..11be69c3 100644 --- a/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/PgUseVertxType.java +++ b/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/PgUseVertxType.java @@ -3,9 +3,10 @@ import io.github.zero88.jooqx.datatype.DataTypeMapperRegistry; import io.github.zero88.jooqx.provider.TypeMapperRegistryProvider; import io.github.zero88.jooqx.spi.pg.datatype.PgTypeMapperRegistry; +import io.github.zero88.sample.model.pgsql.DefaultCatalog; +import io.github.zero88.sample.model.pgsql.Public; -public interface PgUseVertxType - extends TypeMapperRegistryProvider, PostgreSQLHelper { +public interface PgUseVertxType extends TypeMapperRegistryProvider, PostgreSQLHelper { @Override default DataTypeMapperRegistry typeMapperRegistry() { @@ -16,8 +17,8 @@ default DataTypeMapperRegistry typeMapperRegistry() { } @Override - default io.github.zero88.sample.model.pgsql.Public schema() { - return io.github.zero88.sample.model.pgsql.DefaultCatalog.DEFAULT_CATALOG.PUBLIC; + default Public schema() { + return DefaultCatalog.DEFAULT_CATALOG.PUBLIC; } boolean alreadyGenerated(); diff --git a/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/jooq/PgJDBCQueryTest.java b/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/jooq/PgJDBCQueryTest.java index ac65d15e..8faa8513 100644 --- a/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/jooq/PgJDBCQueryTest.java +++ b/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/jooq/PgJDBCQueryTest.java @@ -23,6 +23,8 @@ import io.vertx.jdbcclient.JDBCPool; import io.vertx.junit5.Checkpoint; import io.vertx.junit5.VertxTestContext; +import io.vertx.sqlclient.Row; +import io.vertx.sqlclient.RowSet; //Fixed in https://github.com/vert-x3/vertx-jdbc-client/pull/235 class PgJDBCQueryTest extends PgSQLJooqxTest @@ -40,6 +42,20 @@ public DataTypeMapperRegistry typeMapperRegistry() { return PgUseJooqType.super.typeMapperRegistry().add(UserTypeAsJooqType.create(new JDBCIntervalConverter())); } + @Test + void test_simple(VertxTestContext ctx) { + Checkpoint cp = ctx.checkpoint(); + jooqx.sqlClient() + .query("select '[\"test\"]'::jsonb") + .execute() + .onFailure(ctx::failNow) + .onSuccess(res -> ctx.verify(() -> { + final RowSet value = res.value(); + Assertions.assertInstanceOf(String.class, value.iterator().next().getValue(0)); + cp.flag(); + })); + } + @Test void test_query_temporal(VertxTestContext ctx) { Checkpoint cp = ctx.checkpoint(); diff --git a/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/jooq/PgLegacyDataTypeTest.java b/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/jooq/PgLegacyDataTypeTest.java index a32b7335..829d0e9c 100644 --- a/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/jooq/PgLegacyDataTypeTest.java +++ b/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/jooq/PgLegacyDataTypeTest.java @@ -1,5 +1,7 @@ package io.github.zero88.integtest.jooqx.pg.jooq; +import org.jooq.JSONB; +import org.jooq.impl.DSL; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -53,6 +55,19 @@ public DataTypeMapperRegistry typeMapperRegistry() { UserTypeAsJooqType.create(new FullAddressConverter())); } + @Test + void test_simple(VertxTestContext ctx) { + Checkpoint cp = ctx.checkpoint(); + jooqx.sqlQuery("select '[\"test\"]'::jsonb", DSLAdapter.fetchOne(DSL.field("test", JSONB.class))) + .onSuccess(rec -> ctx.verify(() -> { + final Object value = rec.getValue(0); + Assertions.assertInstanceOf(JSONB.class, value); + Assertions.assertEquals(JSONB.jsonb("[\"test\"]"), value); + cp.flag(); + })) + .onFailure(ctx::failNow); + } + @Test void test_query_numeric(VertxTestContext ctx) { Checkpoint cp = ctx.checkpoint(); diff --git a/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/vertx/PgJDBCRawSqlTest.java b/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/vertx/PgJDBCRawSqlTest.java new file mode 100644 index 00000000..15910ede --- /dev/null +++ b/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/vertx/PgJDBCRawSqlTest.java @@ -0,0 +1,53 @@ +package io.github.zero88.integtest.jooqx.pg.vertx; + +import org.jooq.impl.DSL; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import io.github.zero88.integtest.jooqx.pg.PgUseVertxType; +import io.github.zero88.jooqx.DSLAdapter; +import io.github.zero88.jooqx.spi.jdbc.JDBCErrorConverterProvider; +import io.github.zero88.jooqx.spi.jdbc.JDBCPoolHikariProvider; +import io.github.zero88.jooqx.spi.pg.PgSQLJooqxTest; +import io.vertx.core.json.JsonArray; +import io.vertx.core.json.JsonObject; +import io.vertx.jdbcclient.JDBCPool; +import io.vertx.junit5.Checkpoint; +import io.vertx.junit5.VertxTestContext; + +@SuppressWarnings("JUnitMalformedDeclaration") +class PgJDBCRawSqlTest extends PgSQLJooqxTest + implements JDBCPoolHikariProvider, JDBCErrorConverterProvider, PgUseVertxType { + + @Override + public boolean alreadyGenerated() { + return false; + } + + @Test + void test_select_to_JsonArray(VertxTestContext ctx) { + Checkpoint cp = ctx.checkpoint(); + jooqx.sqlQuery("select '[\"test\"]'::jsonb", DSLAdapter.fetchOne(DSL.field("test", String.class))) + .onSuccess(rec -> ctx.verify(() -> { + final Object value = rec.getValue(0); + Assertions.assertInstanceOf(String.class, value); + Assertions.assertEquals(new JsonArray().add("test"), new JsonArray((String) value)); + cp.flag(); + })) + .onFailure(ctx::failNow); + } + + @Test + void test_select_to_JsonObject(VertxTestContext ctx) { + Checkpoint cp = ctx.checkpoint(); + jooqx.sqlQuery("select '{\"test\": 123}'::jsonb", DSLAdapter.fetchOne(DSL.field("test", String.class))) + .onSuccess(rec -> ctx.verify(() -> { + final Object value = rec.getValue(0); + Assertions.assertInstanceOf(String.class, value); + Assertions.assertEquals(new JsonObject().put("test", 123), new JsonObject((String) value)); + cp.flag(); + })) + .onFailure(ctx::failNow); + } + +} diff --git a/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/vertx/PgPoolRawSqlTest.java b/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/vertx/PgPoolRawSqlTest.java new file mode 100644 index 00000000..8ab97101 --- /dev/null +++ b/integtest/pg/src/test/java/io/github/zero88/integtest/jooqx/pg/vertx/PgPoolRawSqlTest.java @@ -0,0 +1,54 @@ +package io.github.zero88.integtest.jooqx.pg.vertx; + +import org.jooq.JSONB; +import org.jooq.impl.DSL; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import io.github.zero88.integtest.jooqx.pg.PgUseVertxType; +import io.github.zero88.jooqx.DSLAdapter; +import io.github.zero88.jooqx.spi.pg.PgPoolProvider; +import io.github.zero88.jooqx.spi.pg.PgSQLErrorConverterProvider; +import io.github.zero88.jooqx.spi.pg.PgSQLJooqxTest; +import io.vertx.core.json.JsonArray; +import io.vertx.core.json.JsonObject; +import io.vertx.junit5.Checkpoint; +import io.vertx.junit5.VertxTestContext; +import io.vertx.pgclient.PgPool; + +@SuppressWarnings("JUnitMalformedDeclaration") +class PgPoolRawSqlTest extends PgSQLJooqxTest + implements PgSQLErrorConverterProvider, PgPoolProvider, PgUseVertxType { + + @Override + public boolean alreadyGenerated() { + return false; + } + + @Test + void test_select_to_JsonArray(VertxTestContext ctx) { + Checkpoint cp = ctx.checkpoint(); + jooqx.sqlQuery("select '[\"test\"]'::jsonb", DSLAdapter.fetchOne(DSL.field("test", JSONB.class))) + .onSuccess(rec -> ctx.verify(() -> { + final Object value = rec.getValue(0); + Assertions.assertInstanceOf(JsonArray.class, value); + Assertions.assertEquals(new JsonArray().add("test"), value); + cp.flag(); + })) + .onFailure(ctx::failNow); + } + + @Test + void test_select_to_JsonObject(VertxTestContext ctx) { + Checkpoint cp = ctx.checkpoint(); + jooqx.sqlQuery("select '{\"test\": 123}'::jsonb", DSLAdapter.fetchOne(DSL.field("test", JSONB.class))) + .onSuccess(rec -> ctx.verify(() -> { + final Object value = rec.getValue(0); + Assertions.assertInstanceOf(JsonObject.class, value); + Assertions.assertEquals(new JsonObject().put("test", 123), value); + cp.flag(); + })) + .onFailure(ctx::failNow); + } + +} diff --git a/sakila b/sakila index b3469a97..ca41f9ef 160000 --- a/sakila +++ b/sakila @@ -1 +1 @@ -Subproject commit b3469a971dbf5b22eaa9163dca16bbafc90c6710 +Subproject commit ca41f9ef126987113b04c92d9c43b05a7592bc8a diff --git a/webdocs b/webdocs index 95683bbd..aad6cec9 160000 --- a/webdocs +++ b/webdocs @@ -1 +1 @@ -Subproject commit 95683bbd003e62ba7c3d9b22dc25c800bbcd6d40 +Subproject commit aad6cec9ab39091bbcd0b31b5088f200ec4dbb4d