chore: auto test new context in HexagonalArchitectureTest
This commit is contained in:
@@ -9,6 +9,11 @@ import org.junit.jupiter.api.Test
|
|||||||
* Vérifie le respect des frontières de l'architecture hexagonale (ports & adapters),
|
* Vérifie le respect des frontières de l'architecture hexagonale (ports & adapters),
|
||||||
* pour chaque bounded context sous `eventDemo.contexts`.
|
* 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.<xxx>`) soit automatiquement couvert par ce test,
|
||||||
|
* sans modification de ce fichier.
|
||||||
|
*
|
||||||
* Convention attendue, pour un contexte donné :
|
* Convention attendue, pour un contexte donné :
|
||||||
* eventDemo.contexts.<context>.domain
|
* eventDemo.contexts.<context>.domain
|
||||||
* eventDemo.contexts.<context>.application
|
* eventDemo.contexts.<context>.application
|
||||||
@@ -21,15 +26,28 @@ import org.junit.jupiter.api.Test
|
|||||||
*/
|
*/
|
||||||
class HexagonalArchitectureTest {
|
class HexagonalArchitectureTest {
|
||||||
private val rootPackage = "eventDemo.contexts"
|
private val rootPackage = "eventDemo.contexts"
|
||||||
private val contexts = listOf("auth", "game")
|
|
||||||
|
|
||||||
private val classes =
|
private val classes =
|
||||||
ClassFileImporter()
|
ClassFileImporter()
|
||||||
.withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
|
.withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
|
||||||
.importPackages(rootPackage)
|
.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<String> =
|
||||||
|
classes
|
||||||
|
.map { it.packageName }
|
||||||
|
.filter { it.startsWith("$rootPackage.") }
|
||||||
|
.map { it.removePrefix("$rootPackage.").substringBefore('.') }
|
||||||
|
.toSet()
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `respecte les couches de l'architecture hexagonale`() {
|
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 ->
|
contexts.forEach { context ->
|
||||||
val basePackage = "$rootPackage.$context"
|
val basePackage = "$rootPackage.$context"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user