api-tests-coverage 1.0.16 → 1.0.17
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/dashboard/dist/index.html +1 -1
- package/dist/src/discovery/fileClassifier.d.ts.map +1 -1
- package/dist/src/discovery/fileClassifier.js +15 -16
- package/dist/src/discovery/projectDiscovery.d.ts.map +1 -1
- package/dist/src/discovery/projectDiscovery.js +4 -1
- package/dist/src/languages/java/semanticBuilder.d.ts.map +1 -1
- package/dist/src/languages/java/semanticBuilder.js +69 -12
- package/dist/src/languages/javascript/angularDetector.d.ts.map +1 -1
- package/dist/src/languages/javascript/angularDetector.js +50 -17
- package/dist/src/languages/javascript/assertionResolver.js +6 -4
- package/dist/src/languages/javascript/hapiDetector.d.ts.map +1 -1
- package/dist/src/languages/javascript/hapiDetector.js +48 -5
- package/dist/src/languages/javascript/vueDetector.d.ts +2 -0
- package/dist/src/languages/javascript/vueDetector.d.ts.map +1 -1
- package/dist/src/languages/javascript/vueDetector.js +22 -0
- package/dist/src/languages/python/index.d.ts +1 -1
- package/dist/src/languages/python/index.d.ts.map +1 -1
- package/dist/src/languages/python/index.js +33 -3
- package/dist/src/pipeline/confidence.d.ts +6 -1
- package/dist/src/pipeline/confidence.d.ts.map +1 -1
- package/dist/src/pipeline/confidence.js +8 -3
- package/dist/src/pipeline/graph.d.ts.map +1 -1
- package/dist/src/pipeline/graph.js +16 -4
- package/dist/src/pipeline/stages/ast/astStage.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/astStage.js +46 -2
- package/dist/src/pipeline/stages/ast/baseUrlComposer.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/baseUrlComposer.js +18 -4
- package/dist/src/pipeline/stages/ast/crossFileResolver.js +29 -0
- package/dist/src/pipeline/stages/ast/graphBuilder.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/graphBuilder.js +81 -0
- package/dist/src/pipeline/stages/ast/optionalAuthUnifier.d.ts +3 -1
- package/dist/src/pipeline/stages/ast/optionalAuthUnifier.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/optionalAuthUnifier.js +34 -14
- package/dist/src/pipeline/stages/ast/resolvers/angularInjectionResolver.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/resolvers/angularInjectionResolver.js +22 -3
- package/dist/src/pipeline/stages/ast/resolvers/dddLayerResolver.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/resolvers/dddLayerResolver.js +104 -28
- package/dist/src/pipeline/stages/ast/resolvers/mybatisResolver.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/resolvers/mybatisResolver.js +56 -0
- package/dist/src/pipeline/stages/ast/resolvers/vuexActionResolver.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/resolvers/vuexActionResolver.js +43 -18
- package/dist/src/pipeline/stages/ast/rulesEnforcer.d.ts.map +1 -1
- package/dist/src/pipeline/stages/ast/rulesEnforcer.js +336 -45
- package/dist/src/pipeline/stages/merge/conflictDetector.d.ts +2 -0
- package/dist/src/pipeline/stages/merge/conflictDetector.d.ts.map +1 -1
- package/dist/src/pipeline/stages/merge/conflictDetector.js +54 -2
- package/dist/src/pipeline/stages/merge/coverageMappingBuilder.d.ts.map +1 -1
- package/dist/src/pipeline/stages/merge/coverageMappingBuilder.js +67 -3
- package/dist/src/pipeline/stages/tia/mockBoundaryDetector.d.ts.map +1 -1
- package/dist/src/pipeline/stages/tia/mockBoundaryDetector.js +8 -1
- package/dist/src/pipeline/stages/tia/parameterizedTestExpander.js +8 -4
- package/dist/src/pipeline/stages/tia/testLayerClassifier.d.ts.map +1 -1
- package/dist/src/pipeline/stages/tia/testLayerClassifier.js +36 -10
- package/dist/src/pipeline/types.d.ts +1 -1
- package/dist/src/pipeline/types.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -148,12 +148,20 @@ function classifyTestLayer(filePath, content) {
|
|
|
148
148
|
const basename = path.basename(filePath);
|
|
149
149
|
// Sort rules by priority (highest first)
|
|
150
150
|
const sortedRules = [...CLASSIFICATION_RULES].sort((a, b) => b.priority - a.priority);
|
|
151
|
+
// Track the best path-only (directory/filename) candidate in case no
|
|
152
|
+
// content-based match is found. Content-based evidence always wins over
|
|
153
|
+
// path-based evidence so that a file living in /tests/integration/ but
|
|
154
|
+
// containing only unit-level code is classified by its content, not its
|
|
155
|
+
// directory name.
|
|
156
|
+
let pathOnlyCandidate = null;
|
|
151
157
|
for (const rule of sortedRules) {
|
|
152
158
|
let matchCount = 0;
|
|
159
|
+
let hasContentMatch = false;
|
|
160
|
+
const ruleSignals = [];
|
|
153
161
|
// Check directory patterns
|
|
154
162
|
for (const pattern of rule.directoryPatterns) {
|
|
155
163
|
if (pattern.test(normalizedPath)) {
|
|
156
|
-
|
|
164
|
+
ruleSignals.push(`dir:${rule.layer}`);
|
|
157
165
|
matchCount++;
|
|
158
166
|
break;
|
|
159
167
|
}
|
|
@@ -161,7 +169,7 @@ function classifyTestLayer(filePath, content) {
|
|
|
161
169
|
// Check file name patterns
|
|
162
170
|
for (const pattern of rule.fileNamePatterns) {
|
|
163
171
|
if (pattern.test(basename)) {
|
|
164
|
-
|
|
172
|
+
ruleSignals.push(`name:${rule.layer}`);
|
|
165
173
|
matchCount++;
|
|
166
174
|
break;
|
|
167
175
|
}
|
|
@@ -170,22 +178,40 @@ function classifyTestLayer(filePath, content) {
|
|
|
170
178
|
if (content) {
|
|
171
179
|
for (const pattern of rule.contentPatterns) {
|
|
172
180
|
if (pattern.test(content)) {
|
|
173
|
-
|
|
181
|
+
ruleSignals.push(`content:${rule.layer}`);
|
|
174
182
|
matchCount++;
|
|
183
|
+
hasContentMatch = true;
|
|
175
184
|
break;
|
|
176
185
|
}
|
|
177
186
|
}
|
|
178
187
|
}
|
|
179
188
|
if (matchCount > 0) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
189
|
+
if (hasContentMatch) {
|
|
190
|
+
// Content-based match — return immediately (highest-priority content wins)
|
|
191
|
+
signals.push(...ruleSignals);
|
|
192
|
+
const confidence = matchCount >= 2 ? 'high' : 'medium';
|
|
193
|
+
return {
|
|
194
|
+
filePath,
|
|
195
|
+
layer: rule.layer,
|
|
196
|
+
confidence,
|
|
197
|
+
signals,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
else if (!pathOnlyCandidate) {
|
|
201
|
+
// Path-only match — store as candidate but keep searching for content
|
|
202
|
+
pathOnlyCandidate = {
|
|
203
|
+
filePath,
|
|
204
|
+
layer: rule.layer,
|
|
205
|
+
confidence: matchCount >= 2 ? 'high' : 'medium',
|
|
206
|
+
signals: [...ruleSignals],
|
|
207
|
+
};
|
|
208
|
+
}
|
|
187
209
|
}
|
|
188
210
|
}
|
|
211
|
+
// If a path-only candidate was found but no content-based match, use it
|
|
212
|
+
if (pathOnlyCandidate) {
|
|
213
|
+
return pathOnlyCandidate;
|
|
214
|
+
}
|
|
189
215
|
// Default: unit test
|
|
190
216
|
return {
|
|
191
217
|
filePath,
|
|
@@ -24,7 +24,7 @@ export type UrlResolution = 'literal' | 'symbolic' | 'unresolved';
|
|
|
24
24
|
export type ConflictType = 'dast-unreachable' | 'runtime-unconfirmed' | 'stage-disagreement' | 'security-annotation-not-enforced' | 'unhandled-server-error' | 'undeclared-endpoint';
|
|
25
25
|
export type ConflictSeverity = 'info' | 'warning' | 'error';
|
|
26
26
|
export type GraphNodeType = 'endpoint' | 'parameter' | 'controller' | 'service' | 'repository' | 'model' | 'exception-branch' | 'route' | 'file' | 'class' | 'function' | 'test-file' | 'test-suite' | 'test-case' | 'assertion' | 'fixture' | 'helper' | 'base-test-class' | 'mock-boundary' | 'param-variant' | 'conflict' | 'runtime-event' | 'dependency';
|
|
27
|
-
export type GraphEdgeType = 'defines' | 'calls' | 'validates' | 'throws' | 'handles' | 'tests' | 'asserts' | 'extends' | 'imports-helper' | 'mocks' | 'resolves-to' | 'param-expands-to' | 'depends-on' | 'observed-by' | 'executes' | 'conflicts-with';
|
|
27
|
+
export type GraphEdgeType = 'defines' | 'calls' | 'validates' | 'throws' | 'handles' | 'tests' | 'asserts' | 'extends' | 'imports-helper' | 'mocks' | 'resolves-to' | 'param-expands-to' | 'depends-on' | 'observed-by' | 'executes' | 'conflicts-with' | 'router-mount' | 'injects' | 'implements';
|
|
28
28
|
export interface GraphNode {
|
|
29
29
|
id: string;
|
|
30
30
|
type: GraphNodeType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/pipeline/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIvF;;;;;;;GAOG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAIxE,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAI1E,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,WAAW,GACX,aAAa,GACb,KAAK,GACL,KAAK,GACL,aAAa,GACb,UAAU,CAAC;AAIf,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,mBAAmB,GACnB,qBAAqB,GACrB,aAAa,GACb,aAAa,GACb,cAAc,GACd,WAAW,CAAC;AAIhB,MAAM,MAAM,eAAe,GACvB,QAAQ,GACR,WAAW,GACX,SAAS,GACT,QAAQ,GACR,YAAY,CAAC;AAIjB,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAIlE,MAAM,MAAM,YAAY,GACpB,kBAAkB,GAClB,qBAAqB,GACrB,oBAAoB,GACpB,kCAAkC,GAClC,wBAAwB,GACxB,qBAAqB,CAAC;AAE1B,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAI5D,MAAM,MAAM,aAAa,GAErB,UAAU,GACV,WAAW,GACX,YAAY,GACZ,SAAS,GACT,YAAY,GACZ,OAAO,GACP,kBAAkB,GAClB,OAAO,GACP,MAAM,GACN,OAAO,GACP,UAAU,GAEV,WAAW,GACX,YAAY,GACZ,WAAW,GACX,WAAW,GACX,SAAS,GACT,QAAQ,GACR,iBAAiB,GAEjB,eAAe,GACf,eAAe,GACf,UAAU,GACV,eAAe,GACf,YAAY,CAAC;AAIjB,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,OAAO,GACP,WAAW,GACX,QAAQ,GACR,SAAS,GACT,OAAO,GACP,SAAS,GACT,SAAS,GACT,gBAAgB,GAChB,OAAO,GACP,aAAa,GACb,kBAAkB,GAClB,YAAY,GACZ,aAAa,GACb,UAAU,GACV,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/pipeline/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "api-tests-coverage",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.17",
|
|
4
4
|
"description": "CLI and library to measure how thoroughly your test suite exercises your API surface area",
|
|
5
5
|
"main": "dist/src/lib/index.js",
|
|
6
6
|
"types": "dist/src/lib/index.d.ts",
|
|
@@ -30,9 +30,9 @@
|
|
|
30
30
|
],
|
|
31
31
|
"repository": {
|
|
32
32
|
"type": "git",
|
|
33
|
-
"url": "https://github.com/
|
|
33
|
+
"url": "https://github.com/q-intel/apiTestsCoverageAnalyzer.git"
|
|
34
34
|
},
|
|
35
|
-
"homepage": "https://github.com/
|
|
35
|
+
"homepage": "https://github.com/q-intel/apiTestsCoverageAnalyzer#readme",
|
|
36
36
|
"license": "MIT",
|
|
37
37
|
"scripts": {
|
|
38
38
|
"build": "tsc",
|