@pagopa/dx-savemoney 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/__tests__/finding.test.d.ts +17 -0
- package/dist/__tests__/finding.test.d.ts.map +1 -0
- package/dist/__tests__/finding.test.js +124 -0
- package/dist/__tests__/finding.test.js.map +1 -0
- package/dist/azure/__tests__/analyzer-tags.test.d.ts +8 -0
- package/dist/azure/__tests__/analyzer-tags.test.d.ts.map +1 -0
- package/dist/azure/__tests__/analyzer-tags.test.js +43 -0
- package/dist/azure/__tests__/analyzer-tags.test.js.map +1 -0
- package/dist/azure/__tests__/config.test.d.ts +9 -0
- package/dist/azure/__tests__/config.test.d.ts.map +1 -0
- package/dist/azure/__tests__/config.test.js +70 -0
- package/dist/azure/__tests__/config.test.js.map +1 -0
- package/dist/azure/__tests__/report.test.d.ts +9 -0
- package/dist/azure/__tests__/report.test.d.ts.map +1 -0
- package/dist/azure/__tests__/report.test.js +120 -0
- package/dist/azure/__tests__/report.test.js.map +1 -0
- package/dist/azure/__tests__/utils.test.d.ts +15 -0
- package/dist/azure/__tests__/utils.test.d.ts.map +1 -0
- package/dist/azure/__tests__/utils.test.js +181 -0
- package/dist/azure/__tests__/utils.test.js.map +1 -0
- package/dist/azure/analyzers/__tests__/advisor.test.d.ts +9 -0
- package/dist/azure/analyzers/__tests__/advisor.test.d.ts.map +1 -0
- package/dist/azure/analyzers/__tests__/advisor.test.js +314 -0
- package/dist/azure/analyzers/__tests__/advisor.test.js.map +1 -0
- package/dist/azure/resources/__tests__/storage.test.d.ts +11 -0
- package/dist/azure/resources/__tests__/storage.test.d.ts.map +1 -0
- package/dist/azure/resources/__tests__/storage.test.js +99 -0
- package/dist/azure/resources/__tests__/storage.test.js.map +1 -0
- package/dist/index.test.d.ts +2 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +78 -0
- package/dist/index.test.js.map +1 -0
- package/package.json +3 -3
- package/src/azure/__tests__/report.test.ts +10 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.test.js","sourceRoot":"","sources":["../../../../src/azure/resources/__tests__/storage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { mergeResults } from "./index.js";
|
|
3
|
+
describe("mergeResults", () => {
|
|
4
|
+
it("should concatenate reasons from both results", () => {
|
|
5
|
+
const baseResult = {
|
|
6
|
+
costRisk: "low",
|
|
7
|
+
reason: "No tags found. ",
|
|
8
|
+
suspectedUnused: true,
|
|
9
|
+
};
|
|
10
|
+
const specificResult = {
|
|
11
|
+
costRisk: "medium",
|
|
12
|
+
reason: "Disk is unattached. ",
|
|
13
|
+
suspectedUnused: true,
|
|
14
|
+
};
|
|
15
|
+
const merged = mergeResults(baseResult, specificResult);
|
|
16
|
+
expect(merged.reason).toBe("No tags found. Disk is unattached. ");
|
|
17
|
+
expect(merged.costRisk).toBe("medium");
|
|
18
|
+
expect(merged.suspectedUnused).toBe(true);
|
|
19
|
+
});
|
|
20
|
+
it("should use specific result's cost risk", () => {
|
|
21
|
+
const baseResult = {
|
|
22
|
+
costRisk: "low",
|
|
23
|
+
reason: "Base reason. ",
|
|
24
|
+
suspectedUnused: false,
|
|
25
|
+
};
|
|
26
|
+
const specificResult = {
|
|
27
|
+
costRisk: "high",
|
|
28
|
+
reason: "High risk reason. ",
|
|
29
|
+
suspectedUnused: true,
|
|
30
|
+
};
|
|
31
|
+
const merged = mergeResults(baseResult, specificResult);
|
|
32
|
+
expect(merged.costRisk).toBe("high");
|
|
33
|
+
});
|
|
34
|
+
it("should OR suspectedUnused flags", () => {
|
|
35
|
+
const baseResult = {
|
|
36
|
+
costRisk: "low",
|
|
37
|
+
reason: "Base. ",
|
|
38
|
+
suspectedUnused: false,
|
|
39
|
+
};
|
|
40
|
+
const specificResult = {
|
|
41
|
+
costRisk: "medium",
|
|
42
|
+
reason: "Specific. ",
|
|
43
|
+
suspectedUnused: true,
|
|
44
|
+
};
|
|
45
|
+
const merged = mergeResults(baseResult, specificResult);
|
|
46
|
+
expect(merged.suspectedUnused).toBe(true);
|
|
47
|
+
});
|
|
48
|
+
it("should handle empty reasons", () => {
|
|
49
|
+
const baseResult = {
|
|
50
|
+
costRisk: "low",
|
|
51
|
+
reason: "",
|
|
52
|
+
suspectedUnused: false,
|
|
53
|
+
};
|
|
54
|
+
const specificResult = {
|
|
55
|
+
costRisk: "medium",
|
|
56
|
+
reason: "Only specific reason. ",
|
|
57
|
+
suspectedUnused: false,
|
|
58
|
+
};
|
|
59
|
+
const merged = mergeResults(baseResult, specificResult);
|
|
60
|
+
expect(merged.reason).toBe("Only specific reason. ");
|
|
61
|
+
});
|
|
62
|
+
it("should preserve both reasons when both are present", () => {
|
|
63
|
+
const baseResult = {
|
|
64
|
+
costRisk: "low",
|
|
65
|
+
reason: "First issue. ",
|
|
66
|
+
suspectedUnused: true,
|
|
67
|
+
};
|
|
68
|
+
const specificResult = {
|
|
69
|
+
costRisk: "high",
|
|
70
|
+
reason: "Second issue. ",
|
|
71
|
+
suspectedUnused: false,
|
|
72
|
+
};
|
|
73
|
+
const merged = mergeResults(baseResult, specificResult);
|
|
74
|
+
expect(merged.reason).toBe("First issue. Second issue. ");
|
|
75
|
+
expect(merged.suspectedUnused).toBe(true); // true OR false = true
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pagopa/dx-savemoney",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Azure resource analyzer for finding unused or cost-inefficient resources.",
|
|
6
6
|
"repository": {
|
|
@@ -45,11 +45,11 @@
|
|
|
45
45
|
"@tsconfig/node24": "24.0.4",
|
|
46
46
|
"@types/js-yaml": "^4.0.9",
|
|
47
47
|
"@types/node": "^22.19.17",
|
|
48
|
-
"@vitest/coverage-v8": "^
|
|
48
|
+
"@vitest/coverage-v8": "^4.1.8",
|
|
49
49
|
"eslint": "^10.3.0",
|
|
50
50
|
"prettier": "3.8.3",
|
|
51
51
|
"typescript": "~5.9.3",
|
|
52
|
-
"vitest": "^
|
|
52
|
+
"vitest": "^4.1.8",
|
|
53
53
|
"@pagopa/eslint-config": "^6.0.4"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
@@ -52,7 +52,7 @@ const LOW_ENTRY = makeEntry(
|
|
|
52
52
|
// ── helpers ────────────────────────────────────────────────────────────────
|
|
53
53
|
|
|
54
54
|
function allLogs(spy: ReturnType<typeof vi.spyOn>) {
|
|
55
|
-
return spy.mock.calls.map((c) => c[0]
|
|
55
|
+
return spy.mock.calls.map((c: string[]) => c[0]).join("\n");
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
// ── tests ──────────────────────────────────────────────────────────────────
|
|
@@ -95,10 +95,8 @@ describe("generateReport — lint format", () => {
|
|
|
95
95
|
it("splits a multi-sentence reason into separate findings", async () => {
|
|
96
96
|
// Reason has two sentences separated by '. '
|
|
97
97
|
await generateReport([HIGH_ENTRY], "lint");
|
|
98
|
-
const calls = logSpy.mock.calls.map(
|
|
99
|
-
|
|
100
|
-
);
|
|
101
|
-
const findingLines = calls.filter((l) => l.startsWith(" "));
|
|
98
|
+
const calls = logSpy.mock.calls.map((c: string[]) => c[0] ?? "");
|
|
99
|
+
const findingLines = calls.filter((l: string) => l.startsWith(" "));
|
|
102
100
|
// "VM is deallocated." and "No disk activity detected." → 2 findings
|
|
103
101
|
expect(findingLines.length).toBe(2);
|
|
104
102
|
});
|
|
@@ -131,7 +129,7 @@ describe("generateReport — lint format", () => {
|
|
|
131
129
|
|
|
132
130
|
it("prints nothing but the summary for an empty report", async () => {
|
|
133
131
|
await generateReport([], "lint");
|
|
134
|
-
const calls = logSpy.mock.calls.map((c) => c[0]
|
|
132
|
+
const calls = logSpy.mock.calls.map((c: string[]) => c[0]);
|
|
135
133
|
expect(calls).toHaveLength(1);
|
|
136
134
|
expect(calls[0]).toContain("0 issues found");
|
|
137
135
|
});
|
|
@@ -152,13 +150,17 @@ describe("generateReport — table format", () => {
|
|
|
152
150
|
await expect(generateReport([], "table")).resolves.toBeUndefined();
|
|
153
151
|
// Table is always printed; the summary line ("0 issues found") follows.
|
|
154
152
|
expect(logSpy.mock.calls.length).toBeGreaterThanOrEqual(1);
|
|
155
|
-
const output = logSpy.mock.calls
|
|
153
|
+
const output = logSpy.mock.calls
|
|
154
|
+
.map((c: string[]) => String(c[0]))
|
|
155
|
+
.join("\n");
|
|
156
156
|
expect(output).toContain("0 issues found");
|
|
157
157
|
});
|
|
158
158
|
|
|
159
159
|
it("includes resource name and reason in the rendered table", async () => {
|
|
160
160
|
await generateReport([HIGH_ENTRY], "table");
|
|
161
|
-
const output = logSpy.mock.calls
|
|
161
|
+
const output = logSpy.mock.calls
|
|
162
|
+
.map((c: string[]) => String(c[0]))
|
|
163
|
+
.join("\n");
|
|
162
164
|
expect(output).toContain("vm-high");
|
|
163
165
|
expect(output).toContain("VM is deallocated");
|
|
164
166
|
});
|