diff --git a/src/test/kotlin/eventDemo/architecture/HexagonalArchitectureTest.kt b/src/test/kotlin/eventDemo/architecture/HexagonalArchitectureTest.kt index 62f1d63..9edc5c4 100644 --- a/src/test/kotlin/eventDemo/architecture/HexagonalArchitectureTest.kt +++ b/src/test/kotlin/eventDemo/architecture/HexagonalArchitectureTest.kt @@ -9,6 +9,11 @@ import org.junit.jupiter.api.Test * Vérifie le respect des frontières de l'architecture hexagonale (ports & adapters), * pour chaque bounded context sous `eventDemo.contexts`. * + * Les contexts ne sont pas listés en dur : ils sont déduits des classes réellement + * présentes sous `eventDemo.contexts.*`, de sorte que l'ajout d'un nouveau context + * (nouveau dossier `eventDemo.contexts.`) soit automatiquement couvert par ce test, + * sans modification de ce fichier. + * * Convention attendue, pour un contexte donné : * eventDemo.contexts..domain * eventDemo.contexts..application @@ -21,15 +26,28 @@ import org.junit.jupiter.api.Test */ class HexagonalArchitectureTest { private val rootPackage = "eventDemo.contexts" - private val contexts = listOf("auth", "game") private val classes = ClassFileImporter() .withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS) .importPackages(rootPackage) + // Premier segment de package après "eventDemo.contexts." (ex. "auth", "game", ...), + // recalculé à chaque exécution à partir des classes importées. + private val contexts: Set = + classes + .map { it.packageName } + .filter { it.startsWith("$rootPackage.") } + .map { it.removePrefix("$rootPackage.").substringBefore('.') } + .toSet() + @Test fun `respecte les couches de l'architecture hexagonale`() { + check(contexts.isNotEmpty()) { + "Aucun context trouvé sous `$rootPackage` : le test ne vérifie rien, " + + "vérifiez que le package racine est correct." + } + contexts.forEach { context -> val basePackage = "$rootPackage.$context"