From df46362c6060323df9b8580c3feb4cd0636ab0c6 Mon Sep 17 00:00:00 2001 From: Tran Ngoc Nhan Date: Tue, 30 Jul 2024 18:50:54 +0700 Subject: [PATCH] test: improve test --- spring-jdbc-oracle-test/pom.xml | 7 ++ .../spring/jdbc/oracle/ArchitectureTest.java | 77 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 spring-jdbc-oracle-test/src/test/java/io/spring/jdbc/oracle/ArchitectureTest.java diff --git a/spring-jdbc-oracle-test/pom.xml b/spring-jdbc-oracle-test/pom.xml index 6222d22..89da819 100644 --- a/spring-jdbc-oracle-test/pom.xml +++ b/spring-jdbc-oracle-test/pom.xml @@ -41,6 +41,13 @@ ${revision} + + com.tngtech.archunit + archunit + 1.3.0 + test + + org.springframework.boot spring-boot-starter-data-jpa diff --git a/spring-jdbc-oracle-test/src/test/java/io/spring/jdbc/oracle/ArchitectureTest.java b/spring-jdbc-oracle-test/src/test/java/io/spring/jdbc/oracle/ArchitectureTest.java new file mode 100644 index 0000000..0dfa81a --- /dev/null +++ b/spring-jdbc-oracle-test/src/test/java/io/spring/jdbc/oracle/ArchitectureTest.java @@ -0,0 +1,77 @@ +package io.spring.jdbc.oracle; + +import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; + +import com.tngtech.archunit.core.importer.ClassFileImporter; +import com.tngtech.archunit.core.importer.ImportOption.DoNotIncludeTests; +import com.tngtech.archunit.lang.ArchRule; +import io.spring.jdbc.oracle.converter.GenericOracleConverter; +import io.spring.jdbc.oracle.converter.OracleConverter; +import io.spring.jdbc.oracle.mapper.Mapper; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.springframework.jdbc.core.SqlReturnType; +import org.springframework.jdbc.core.SqlTypeValue; + +class ArchitectureTest { + + private static final String BASE_PACKAGE = "io.spring.jdbc.oracle"; + + @Test + void reside_in_a_package_rule() { + + var importedClasses = new ClassFileImporter() + .withImportOption(new DoNotIncludeTests()) + .importPackages(BASE_PACKAGE); + + ArchRule genericOracleConverterRule = classes() + .that() + .implement(GenericOracleConverter.class) + .should() + .haveSimpleNameEndingWith(GenericOracleConverter.class.getSimpleName()) + .andShould() + .resideInAPackage(BASE_PACKAGE + ".converter.support"); + + ArchRule oracleConverterRule = classes() + .that() + .implement(OracleConverter.class) + .should() + .haveSimpleNameEndingWith(OracleConverter.class.getSimpleName()) + .andShould() + .resideInAPackage(BASE_PACKAGE + ".converter.support"); + + ArchRule mapperRule = classes() + .that() + .implement(Mapper.class) + .should() + .haveSimpleNameEndingWith(Mapper.class.getSimpleName()) + .andShould() + .resideInAPackage(BASE_PACKAGE + ".mapper"); + + ArchRule typeValueRule = classes() + .that() + .implement(SqlTypeValue.class) + .should() + .haveSimpleNameEndingWith("TypeValue") + .andShould() + .resideInAPackage(BASE_PACKAGE + ".parameter.input"); + + ArchRule returnTypeRule = classes() + .that() + .implement(SqlReturnType.class) + .should() + .haveSimpleNameEndingWith("ReturnType") + .andShould() + .resideInAPackage(BASE_PACKAGE + ".parameter.output"); + + List.of( + genericOracleConverterRule, + oracleConverterRule, + mapperRule, + typeValueRule, + returnTypeRule + ) + .forEach(rule -> rule.check(importedClasses)); + } + +}