From c790d0a50afc0d3cea7ec02b7fda39df6b05af66 Mon Sep 17 00:00:00 2001 From: sverweij Date: Sat, 8 Jul 2023 17:18:13 +0200 Subject: [PATCH] feature(report): adds support for 'instability' type rules in the azure-devops reporter --- src/report/azure-devops.mjs | 14 ++++++++++++- .../instabilities-azure-devops-format.txt | 2 ++ .../report/azure-devops/azure-devops.spec.mjs | 20 ++++++++++--------- 3 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 test/report/azure-devops/__mocks__/instabilities-azure-devops-format.txt diff --git a/src/report/azure-devops.mjs b/src/report/azure-devops.mjs index f40b99922..a72770dc0 100644 --- a/src/report/azure-devops.mjs +++ b/src/report/azure-devops.mjs @@ -58,6 +58,18 @@ function formatReachabilityViolation(pViolation) { } (via ${pViolation.via.join(" -> ")})`; } +/** + * @param {import("../../types/violations.js").IViolation} pViolation + * @returns {string} + */ +function formatInstabilityViolation(pViolation) { + return `${pViolation.rule.name}: ${pViolation.from} -> ${ + pViolation.to + } (instability: ${formatPercentage( + pViolation.metrics.from.instability + )} -> ${formatPercentage(pViolation.metrics.to.instability)})`; +} + /** * @param {import("../../types/violations.js").IViolation} pViolation * @returns {string} @@ -68,7 +80,7 @@ function formatViolation(pViolation) { dependency: formatDependencyViolation, cycle: formatCycleViolation, reachability: formatReachabilityViolation, - // instability: formatInstabilityViolation, + instability: formatInstabilityViolation, }; let lFormattedViolators = _formatViolation( pViolation, diff --git a/test/report/azure-devops/__mocks__/instabilities-azure-devops-format.txt b/test/report/azure-devops/__mocks__/instabilities-azure-devops-format.txt new file mode 100644 index 000000000..cb1c8a451 --- /dev/null +++ b/test/report/azure-devops/__mocks__/instabilities-azure-devops-format.txt @@ -0,0 +1,2 @@ +##vso[task.logissue type=warning;sourcepath=src/more-stable.js]sdp: src/more-stable.js -> src/less-stable.js (instability: 42% -> 100%) +##vso[task.complete result=SucceededWithIssues;]1 dependency violations (0 error, 1 warning/ informational). 3 modules, 3 dependencies cruised diff --git a/test/report/azure-devops/azure-devops.spec.mjs b/test/report/azure-devops/azure-devops.spec.mjs index 7d076accb..fcc2a9332 100644 --- a/test/report/azure-devops/azure-devops.spec.mjs +++ b/test/report/azure-devops/azure-devops.spec.mjs @@ -12,7 +12,7 @@ import circulars from "./__mocks__/circular-deps.mjs"; import vias from "./__mocks__/via-deps.mjs"; // import unsupportedErrorLevels from "./__mocks__/unsupported-severity.mjs"; // import knownViolations from "./__mocks__/known-violations.mjs"; -// import instabilities from "./__mocks__/instabilities.mjs"; +import instabilities from "./__mocks__/instabilities.mjs"; function readFixture(pRelativePath) { return readFileSync( @@ -105,16 +105,18 @@ describe("[I] report/azure-devops", () => { expect(lResult.exitCode).to.equal(4); }); - // it("renders instability transgressions", () => { - // const lFixture = readFixture( - // "__mocks__/instabilities-azure-devops-format.txt" - // ); - // const lResult = render(instabilities); + it("renders instability transgressions", () => { + const lFixture = readFixture( + "__mocks__/instabilities-azure-devops-format.txt" + ); + const lResult = render(instabilities); - // expect(lResult.output).to.equal(lFixture); + expect(normalizeNewline(lResult.output)).to.equal( + normalizeNewline(lFixture) + ); - // expect(lResult.exitCode).to.equal(0); - // }); + expect(lResult.exitCode).to.equal(0); + }); // it("renders unsupported error levels (like 'ignore') as 'info'", () => { // const lFixture = readFixture(