This commit is contained in:
2026-08-25 15:08:34 +08:00
parent e815abcbd7
commit 44198866d9
64 changed files with 1382 additions and 360 deletions
@@ -52,3 +52,43 @@ test('customer statistics application layer only depends inward', () => {
&& edge.target.startsWith('com.baiyue.firstleg.') && !edge.target.startsWith(prefix));
assert.deepEqual(outwardDependencies, []);
});
test('price book query is a leaf slice and removes the package cycle', () => {
const report = analyze();
const classes = report.classes.filter(entry => entry.slice === 'pricebook-query');
assert.deepEqual(classes.map(entry => entry.fqcn).sort(), [
'com.baiyue.firstleg.pricebookquery.adapter.out.persistence.PriceBookQueryMapper',
'com.baiyue.firstleg.pricebookquery.application.PriceBookQueryService',
'com.baiyue.firstleg.pricebookquery.application.model.PriceBookQueryRows',
'com.baiyue.firstleg.pricebookquery.application.port.in.PriceBookQueryUseCase',
'com.baiyue.firstleg.pricebookquery.application.port.out.PriceBookQueryReader',
]);
assert.deepEqual(report.sliceEdges.filter(edge => edge.source === 'pricebook-query'), []);
assert.deepEqual(report.sliceEdges.filter(edge => edge.target === 'pricebook-query')
.map(edge => edge.source).sort(), ['booking-customs-trucking', 'measurement-pricing', 'split-loading']);
assert.equal(report.sliceSccs.some(component => component.includes('pricebook-query')), false);
assert.deepEqual(report.packageSccs, []);
});
test('price book query application and consumers respect ports', () => {
const report = analyze();
const prefix = 'com.baiyue.firstleg.pricebookquery.application';
const applicationClasses = report.classes.filter(entry => entry.packageName.startsWith(prefix));
assert.equal(applicationClasses.length, 4);
for (const entry of applicationClasses) {
assert.equal(entry.imports.some(imported => imported.startsWith('org.springframework.web')), false);
assert.equal(entry.imports.some(imported => imported.startsWith('org.apache.ibatis')), false);
assert.equal(entry.imports.some(imported => imported.startsWith('com.baomidou.mybatisplus')), false);
}
const outwardDependencies = report.classDependencies.filter(edge => edge.source.startsWith(prefix)
&& edge.target.startsWith('com.baiyue.firstleg.') && !edge.target.startsWith(prefix));
assert.deepEqual(outwardDependencies, []);
const allowedTargets = [
'com.baiyue.firstleg.pricebookquery.application.model.',
'com.baiyue.firstleg.pricebookquery.application.port.in.',
];
const implementationLeaks = report.classDependencies.filter(edge => !edge.source.startsWith('com.baiyue.firstleg.pricebookquery.')
&& edge.target.startsWith('com.baiyue.firstleg.pricebookquery.')
&& !allowedTargets.some(prefixValue => edge.target.startsWith(prefixValue)));
assert.deepEqual(implementationLeaks, []);
});