UNPKG

archunit

Version:

ArchUnit TypeScript is an architecture testing library, to specify and assert architecture rules in your TypeScript app

112 lines 5.81 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const metrics_1 = require("../../src/metrics"); const path_1 = __importDefault(require("path")); describe('Metrics Filtering Integration', () => { describe('Folder filtering', () => { it('should allow filtering by folder path with string pattern', () => { const metricsBuilder = (0, metrics_1.metrics)().inFolder('src/metrics'); // Verify the metrics builder has filters const filter = metricsBuilder.getFilter(); expect(filter).not.toBeNull(); // Test the fluent API continues to work const thresholdBuilder = metricsBuilder.lcom().lcom96b().shouldBeAbove(0.0); expect(thresholdBuilder).toBeDefined(); }); it('should allow filtering by folder path with regex pattern', () => { const metricsBuilder = (0, metrics_1.metrics)().inFolder(/src\/metrics/); const filter = metricsBuilder.getFilter(); expect(filter).not.toBeNull(); }); it('should allow chaining multiple folder filters', () => { const metricsBuilder = (0, metrics_1.metrics)().inFolder('src').inFolder('metrics'); const filter = metricsBuilder.getFilter(); expect(filter).not.toBeNull(); }); }); describe('File filtering', () => { it('should allow filtering by specific file', () => { const metricsBuilder = (0, metrics_1.metrics)() .inPath('src/metrics/calculation') .withName('lcom.ts'); const filter = metricsBuilder.getFilter(); expect(filter).not.toBeNull(); }); }); describe('Class name filtering', () => { it('should allow filtering by class name with string pattern', () => { const metricsBuilder = (0, metrics_1.metrics)().forClassesMatching('TestClass'); const filter = metricsBuilder.getFilter(); expect(filter).not.toBeNull(); }); it('should allow filtering by class name with regex pattern', () => { const metricsBuilder = (0, metrics_1.metrics)().forClassesMatching(/.*Service$/); const filter = metricsBuilder.getFilter(); expect(filter).not.toBeNull(); }); }); describe('Combined filtering', () => { it('should allow combining multiple filter types', () => { const metricsBuilder = (0, metrics_1.metrics)() .inFolder('src') .forClassesMatching(/.*Builder$/); const filter = metricsBuilder.getFilter(); expect(filter).not.toBeNull(); }); it('should allow complex filtering chains', () => { const metricsBuilder = (0, metrics_1.metrics)() .inFolder(/src\/.*/) .forClassesMatching(/.*Metric.*/) .withName('specific-file.ts'); const filter = metricsBuilder.getFilter(); expect(filter).not.toBeNull(); }); }); describe('No filtering', () => { it('should work without any filters', () => { const metricsBuilder = (0, metrics_1.metrics)(); const filter = metricsBuilder.getFilter(); expect(filter).toBeNull(); }); }); // Smoke test. For example >= 0 is always satisfied, so this // is purely a smoke test suite describe('LCOM Project Summary', () => { const mockProjectPath = path_1.default.join(__dirname, 'mock-project', 'tsconfig.json'); it('should calculate project-wide LCOM metrics summary', async () => { // Get project summary for LCOM metrics const projectSummary = await (0, metrics_1.metrics)(mockProjectPath).lcom().summary(); // Verify we have valid project metrics expect(projectSummary).toBeDefined(); expect(projectSummary.totalClasses).toBeGreaterThanOrEqual(0); // Verify that all average metrics are valid numbers expect(projectSummary.averageLCOM96a).toBeGreaterThanOrEqual(0); expect(projectSummary.averageLCOM96b).toBeGreaterThanOrEqual(0); expect(projectSummary.averageLCOM96b).toBeLessThanOrEqual(1); expect(projectSummary.averageLCOM1).toBeGreaterThanOrEqual(0); expect(projectSummary.averageLCOM2).toBeGreaterThanOrEqual(0); expect(projectSummary.averageLCOM3).toBeGreaterThanOrEqual(0); expect(projectSummary.averageLCOM4).toBeGreaterThanOrEqual(0); expect(projectSummary.averageLCOM5).toBeGreaterThanOrEqual(0); expect(projectSummary.averageLCOMStar).toBeGreaterThanOrEqual(0); expect(projectSummary.averageLCOMStar).toBeLessThanOrEqual(1); // Verify high cohesion class count is valid expect(projectSummary.highCohesionClassCount).toBeGreaterThanOrEqual(0); expect(projectSummary.highCohesionClassCount).toBeLessThanOrEqual(projectSummary.totalClasses); }); it('should filter classes based on builder configuration', async () => { // Get summary for a filtered set of classes const filteredSummary = await (0, metrics_1.metrics)(mockProjectPath) .withName('concrete-service.ts') .lcom() .summary(); // This should include just classes in concrete-service.ts expect(filteredSummary).toBeDefined(); expect(filteredSummary.totalClasses).toBeGreaterThanOrEqual(0); }); }); }); //# sourceMappingURL=metrics-filtering-integration.spec.js.map