@aiready/testability 0.5.0 → 0.6.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/.turbo/turbo-build.log +5 -5
- package/.turbo/turbo-test.log +104 -9
- package/package.json +2 -2
- package/src/__tests__/types.test.ts +72 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
> @aiready/testability@0.
|
|
3
|
+
> @aiready/testability@0.6.0 build /Users/pengcao/projects/aiready/packages/testability
|
|
4
4
|
> tsup src/index.ts src/cli.ts --format cjs,esm --dts
|
|
5
5
|
|
|
6
6
|
[34mCLI[39m Building entry: src/cli.ts, src/index.ts
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
[34mESM[39m Build start
|
|
12
12
|
[32mCJS[39m [1mdist/cli.js [22m[32m15.61 KB[39m
|
|
13
13
|
[32mCJS[39m [1mdist/index.js [22m[32m10.73 KB[39m
|
|
14
|
-
[32mCJS[39m ⚡️ Build success in
|
|
15
|
-
[32mESM[39m [1mdist/cli.mjs [22m[32m5.75 KB[39m
|
|
14
|
+
[32mCJS[39m ⚡️ Build success in 41ms
|
|
16
15
|
[32mESM[39m [1mdist/index.mjs [22m[32m1.28 KB[39m
|
|
16
|
+
[32mESM[39m [1mdist/cli.mjs [22m[32m5.75 KB[39m
|
|
17
17
|
[32mESM[39m [1mdist/chunk-QOIBI5E7.mjs [22m[32m8.31 KB[39m
|
|
18
|
-
[32mESM[39m ⚡️ Build success in
|
|
18
|
+
[32mESM[39m ⚡️ Build success in 40ms
|
|
19
19
|
DTS Build start
|
|
20
|
-
DTS ⚡️ Build success in
|
|
20
|
+
DTS ⚡️ Build success in 1497ms
|
|
21
21
|
DTS dist/cli.d.ts 20.00 B
|
|
22
22
|
DTS dist/index.d.ts 2.41 KB
|
|
23
23
|
DTS dist/cli.d.mts 20.00 B
|
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,19 +1,114 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
> @aiready/testability@0.
|
|
3
|
+
> @aiready/testability@0.6.0 test /Users/pengcao/projects/aiready/packages/testability
|
|
4
4
|
> vitest run
|
|
5
5
|
|
|
6
6
|
[?25l
|
|
7
7
|
[1m[46m RUN [49m[22m [36mv4.0.18 [39m[90m/Users/pengcao/projects/aiready/packages/testability[39m
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
[
|
|
11
|
-
[32m✓[39m src/__tests__/analyzer.test.ts [2m([22m[2m5 tests[22m[2m)[22m[33m 1659[2mms[22m[39m
|
|
12
|
-
[33m[2m✓[22m[39m detects test frameworks in multiple languages [33m 1635[2mms[22m[39m
|
|
9
|
+
[?2026h
|
|
10
|
+
[1m[33m ❯ [39m[22msrc/__tests__/provider.test.ts[2m [queued][22m
|
|
13
11
|
|
|
14
|
-
[2m Test Files [22m
|
|
15
|
-
[2m Tests [22m
|
|
16
|
-
[2m Start at [
|
|
17
|
-
[2m Duration [
|
|
12
|
+
[2m Test Files [22m[1m[32m0 passed[39m[22m[90m (4)[39m
|
|
13
|
+
[2m Tests [22m[1m[32m0 passed[39m[22m[90m (0)[39m
|
|
14
|
+
[2m Start at [22m17:20:11
|
|
15
|
+
[2m Duration [22m731ms
|
|
16
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K
|
|
17
|
+
[1m[33m ❯ [39m[22msrc/__tests__/provider.test.ts[2m [queued][22m
|
|
18
|
+
[1m[33m ❯ [39m[22msrc/__tests__/types.test.ts[2m [queued][22m
|
|
19
|
+
|
|
20
|
+
[2m Test Files [22m[1m[32m0 passed[39m[22m[90m (4)[39m
|
|
21
|
+
[2m Tests [22m[1m[32m0 passed[39m[22m[90m (0)[39m
|
|
22
|
+
[2m Start at [22m17:20:11
|
|
23
|
+
[2m Duration [22m833ms
|
|
24
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K
|
|
25
|
+
[1m[33m ❯ [39m[22msrc/__tests__/analyzer.test.ts[2m [queued][22m
|
|
26
|
+
[1m[33m ❯ [39m[22msrc/__tests__/provider.test.ts[2m [queued][22m
|
|
27
|
+
[1m[33m ❯ [39m[22msrc/__tests__/scoring.test.ts[2m [queued][22m
|
|
28
|
+
[1m[33m ❯ [39m[22msrc/__tests__/types.test.ts[2m [queued][22m
|
|
29
|
+
|
|
30
|
+
[2m Test Files [22m[1m[32m0 passed[39m[22m[90m (4)[39m
|
|
31
|
+
[2m Tests [22m[1m[32m0 passed[39m[22m[90m (0)[39m
|
|
32
|
+
[2m Start at [22m17:20:11
|
|
33
|
+
[2m Duration [22m1.17s
|
|
34
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K
|
|
35
|
+
[1m[33m ❯ [39m[22msrc/__tests__/analyzer.test.ts[2m [queued][22m
|
|
36
|
+
[1m[33m ❯ [39m[22msrc/__tests__/provider.test.ts[2m [queued][22m
|
|
37
|
+
[1m[33m ❯ [39m[22msrc/__tests__/scoring.test.ts[2m [queued][22m
|
|
38
|
+
[1m[33m ❯ [39m[22msrc/__tests__/types.test.ts[2m 0/4[22m
|
|
39
|
+
|
|
40
|
+
[2m Test Files [22m[1m[32m0 passed[39m[22m[90m (4)[39m
|
|
41
|
+
[2m Tests [22m[1m[32m0 passed[39m[22m[90m (4)[39m
|
|
42
|
+
[2m Start at [22m17:20:11
|
|
43
|
+
[2m Duration [22m1.32s
|
|
44
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K
|
|
45
|
+
[1m[33m ❯ [39m[22msrc/__tests__/analyzer.test.ts[2m [queued][22m
|
|
46
|
+
[1m[33m ❯ [39m[22msrc/__tests__/provider.test.ts[2m [queued][22m
|
|
47
|
+
[1m[33m ❯ [39m[22msrc/__tests__/scoring.test.ts[2m [queued][22m
|
|
48
|
+
[1m[33m ❯ [39m[22msrc/__tests__/types.test.ts[2m 1/4[22m
|
|
49
|
+
|
|
50
|
+
[2m Test Files [22m[1m[32m0 passed[39m[22m[90m (4)[39m
|
|
51
|
+
[2m Tests [22m[1m[32m1 passed[39m[22m[90m (4)[39m
|
|
52
|
+
[2m Start at [22m17:20:11
|
|
53
|
+
[2m Duration [22m1.62s
|
|
54
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/__tests__/types.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 140[2mms[22m[39m
|
|
55
|
+
|
|
56
|
+
[1m[33m ❯ [39m[22msrc/__tests__/analyzer.test.ts[2m [queued][22m
|
|
57
|
+
[1m[33m ❯ [39m[22msrc/__tests__/provider.test.ts[2m [queued][22m
|
|
58
|
+
[1m[33m ❯ [39m[22msrc/__tests__/scoring.test.ts[2m [queued][22m
|
|
59
|
+
|
|
60
|
+
[2m Test Files [22m[1m[32m1 passed[39m[22m[90m (4)[39m
|
|
61
|
+
[2m Tests [22m[1m[32m4 passed[39m[22m[90m (4)[39m
|
|
62
|
+
[2m Start at [22m17:20:11
|
|
63
|
+
[2m Duration [22m2.11s
|
|
64
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K
|
|
65
|
+
[1m[33m ❯ [39m[22msrc/__tests__/analyzer.test.ts[2m [queued][22m
|
|
66
|
+
[1m[33m ❯ [39m[22msrc/__tests__/provider.test.ts[2m [queued][22m
|
|
67
|
+
[1m[33m ❯ [39m[22msrc/__tests__/scoring.test.ts[2m [queued][22m
|
|
68
|
+
|
|
69
|
+
[2m Test Files [22m[1m[32m1 passed[39m[22m[90m (4)[39m
|
|
70
|
+
[2m Tests [22m[1m[32m4 passed[39m[22m[90m (4)[39m
|
|
71
|
+
[2m Start at [22m17:20:11
|
|
72
|
+
[2m Duration [22m3.07s
|
|
73
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K
|
|
74
|
+
[1m[33m ❯ [39m[22msrc/__tests__/analyzer.test.ts[2m [queued][22m
|
|
75
|
+
[1m[33m ❯ [39m[22msrc/__tests__/provider.test.ts[2m 0/2[22m
|
|
76
|
+
[1m[33m ❯ [39m[22msrc/__tests__/scoring.test.ts[2m [queued][22m
|
|
77
|
+
|
|
78
|
+
[2m Test Files [22m[1m[32m1 passed[39m[22m[90m (4)[39m
|
|
79
|
+
[2m Tests [22m[1m[32m4 passed[39m[22m[90m (6)[39m
|
|
80
|
+
[2m Start at [22m17:20:11
|
|
81
|
+
[2m Duration [22m3.37s
|
|
82
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/__tests__/provider.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 5[2mms[22m[39m
|
|
83
|
+
|
|
84
|
+
[1m[33m ❯ [39m[22msrc/__tests__/analyzer.test.ts[2m 0/5[22m
|
|
85
|
+
[1m[33m ❯ [39m[22msrc/__tests__/scoring.test.ts[2m [queued][22m
|
|
86
|
+
|
|
87
|
+
[2m Test Files [22m[1m[32m2 passed[39m[22m[90m (4)[39m
|
|
88
|
+
[2m Tests [22m[1m[32m6 passed[39m[22m[90m (11)[39m
|
|
89
|
+
[2m Start at [22m17:20:11
|
|
90
|
+
[2m Duration [22m3.48s
|
|
91
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/__tests__/scoring.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 23[2mms[22m[39m
|
|
92
|
+
|
|
93
|
+
[1m[33m ❯ [39m[22msrc/__tests__/analyzer.test.ts[2m 0/5[22m
|
|
94
|
+
|
|
95
|
+
[2m Test Files [22m[1m[32m3 passed[39m[22m[90m (4)[39m
|
|
96
|
+
[2m Tests [22m[1m[32m9 passed[39m[22m[90m (14)[39m
|
|
97
|
+
[2m Start at [22m17:20:11
|
|
98
|
+
[2m Duration [22m4.08s
|
|
99
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K
|
|
100
|
+
[1m[33m ❯ [39m[22msrc/__tests__/analyzer.test.ts[2m 1/5[22m
|
|
101
|
+
|
|
102
|
+
[2m Test Files [22m[1m[32m3 passed[39m[22m[90m (4)[39m
|
|
103
|
+
[2m Tests [22m[1m[32m10 passed[39m[22m[90m (14)[39m
|
|
104
|
+
[2m Start at [22m17:20:11
|
|
105
|
+
[2m Duration [22m4.79s
|
|
106
|
+
[?2026l[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/__tests__/analyzer.test.ts [2m([22m[2m5 tests[22m[2m)[22m[33m 1345[2mms[22m[39m
|
|
107
|
+
[33m[2m✓[22m[39m detects test frameworks in multiple languages [33m 1319[2mms[22m[39m
|
|
108
|
+
|
|
109
|
+
[2m Test Files [22m [1m[32m4 passed[39m[22m[90m (4)[39m
|
|
110
|
+
[2m Tests [22m [1m[32m14 passed[39m[22m[90m (14)[39m
|
|
111
|
+
[2m Start at [22m 17:20:11
|
|
112
|
+
[2m Duration [22m 4.90s[2m (transform 3.18s, setup 0ms, import 8.22s, tests 1.51s, environment 0ms)[22m
|
|
18
113
|
|
|
19
114
|
[?25h
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiready/testability",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "Measures how safely and verifiably AI-generated changes can be made to your codebase",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"chalk": "^5.3.0",
|
|
41
41
|
"commander": "^14.0.0",
|
|
42
42
|
"glob": "^13.0.0",
|
|
43
|
-
"@aiready/core": "0.
|
|
43
|
+
"@aiready/core": "0.23.1"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/node": "^24.0.0",
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import type { TestabilityOptions, TestabilityReport } from '../types';
|
|
3
|
+
|
|
4
|
+
describe('Testability Types', () => {
|
|
5
|
+
describe('TestabilityOptions', () => {
|
|
6
|
+
it('should allow required rootDir', () => {
|
|
7
|
+
const options: TestabilityOptions = {
|
|
8
|
+
rootDir: '/test/project',
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
expect(options.rootDir).toBe('/test/project');
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('should allow optional minCoverageRatio', () => {
|
|
15
|
+
const options: TestabilityOptions = {
|
|
16
|
+
rootDir: '/test/project',
|
|
17
|
+
minCoverageRatio: 0.5,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
expect(options.minCoverageRatio).toBe(0.5);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('should allow custom test patterns', () => {
|
|
24
|
+
const options: TestabilityOptions = {
|
|
25
|
+
rootDir: '/test/project',
|
|
26
|
+
testPatterns: ['**/*.test.ts', '**/*.spec.ts', '**/*.e2e.ts'],
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
expect(options.testPatterns).toHaveLength(3);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
describe('TestabilityReport', () => {
|
|
34
|
+
it('should structure summary correctly', () => {
|
|
35
|
+
const report: TestabilityReport = {
|
|
36
|
+
summary: {
|
|
37
|
+
sourceFiles: 100,
|
|
38
|
+
testFiles: 30,
|
|
39
|
+
coverageRatio: 0.3,
|
|
40
|
+
score: 60,
|
|
41
|
+
rating: 'moderate',
|
|
42
|
+
aiChangeSafetyRating: 'moderate-risk',
|
|
43
|
+
dimensions: {
|
|
44
|
+
testCoverageRatio: 30,
|
|
45
|
+
purityScore: 70,
|
|
46
|
+
dependencyInjectionScore: 50,
|
|
47
|
+
interfaceFocusScore: 80,
|
|
48
|
+
observabilityScore: 60,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
issues: [],
|
|
52
|
+
rawData: {
|
|
53
|
+
sourceFiles: 100,
|
|
54
|
+
testFiles: 30,
|
|
55
|
+
pureFunctions: 80,
|
|
56
|
+
totalFunctions: 100,
|
|
57
|
+
injectionPatterns: 5,
|
|
58
|
+
totalClasses: 20,
|
|
59
|
+
bloatedInterfaces: 10,
|
|
60
|
+
totalInterfaces: 50,
|
|
61
|
+
externalStateMutations: 15,
|
|
62
|
+
hasTestFramework: true,
|
|
63
|
+
},
|
|
64
|
+
recommendations: ['Add more tests to reach 30% coverage'],
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
expect(report.summary.sourceFiles).toBe(100);
|
|
68
|
+
expect(report.summary.coverageRatio).toBe(0.3);
|
|
69
|
+
expect(report.rawData.hasTestFramework).toBe(true);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
});
|