test(backend): add ArchUnit domain boundary enforcement (Rules 1–4) #428
@@ -118,11 +118,15 @@ class ArchitectureTest {
|
|||||||
// Tracked in: http://heim-nas:3005/marcel/familienarchiv/issues/427
|
// Tracked in: http://heim-nas:3005/marcel/familienarchiv/issues/427
|
||||||
|
|
||||||
private static DescribedPredicate<JavaClass> foreignJpaRepositoryFor(String ownDomain) {
|
private static DescribedPredicate<JavaClass> 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<JavaClass>("be a JPA repository from a domain other than " + ownDomain) {
|
return new DescribedPredicate<JavaClass>("be a JPA repository from a domain other than " + ownDomain) {
|
||||||
@Override
|
@Override
|
||||||
public boolean test(JavaClass clazz) {
|
public boolean test(JavaClass clazz) {
|
||||||
return clazz.isAssignableTo(JpaRepository.class)
|
return clazz.isAssignableTo(JpaRepository.class)
|
||||||
&& !clazz.getPackageName().contains("." + ownDomain);
|
&& !clazz.getPackageName().matches(ownPackagePattern);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user