From 0dd58556a78f8230eda7d4af5bea2e298c4d4302 Mon Sep 17 00:00:00 2001 From: Marcel Date: Tue, 5 May 2026 17:57:47 +0200 Subject: [PATCH] test(archunit): fix foreignJpaRepositoryFor exact-segment matching Replace substring contains() with a regex exact-segment match so a domain whose name is a substring of another (e.g. "tag" in "tagging") cannot silently escape the predicate and produce a false negative. Co-Authored-By: Claude Sonnet 4.6 --- .../org/raddatz/familienarchiv/shared/ArchitectureTest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/backend/src/test/java/org/raddatz/familienarchiv/shared/ArchitectureTest.java b/backend/src/test/java/org/raddatz/familienarchiv/shared/ArchitectureTest.java index 61804b01..9ec21149 100644 --- a/backend/src/test/java/org/raddatz/familienarchiv/shared/ArchitectureTest.java +++ b/backend/src/test/java/org/raddatz/familienarchiv/shared/ArchitectureTest.java @@ -118,11 +118,15 @@ class ArchitectureTest { // Tracked in: http://heim-nas:3005/marcel/familienarchiv/issues/427 private static DescribedPredicate foreignJpaRepositoryFor(String ownDomain) { + // Exact-segment match: prevents a domain name that is a substring of another + // (e.g. "tag" inside "tagging") from silently escaping the predicate. + // The pattern matches the domain as a complete path segment, with an optional sub-package. + String ownPackagePattern = ".*\\.familienarchiv\\." + ownDomain + "(\\..+)?$"; return new DescribedPredicate("be a JPA repository from a domain other than " + ownDomain) { @Override public boolean test(JavaClass clazz) { return clazz.isAssignableTo(JpaRepository.class) - && !clazz.getPackageName().contains("." + ownDomain); + && !clazz.getPackageName().matches(ownPackagePattern); } }; }