api-tests-coverage 1.0.13 → 1.0.15
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/src/pipeline/confidence.d.ts +70 -0
- package/dist/src/pipeline/confidence.d.ts.map +1 -0
- package/dist/src/pipeline/confidence.js +198 -0
- package/dist/src/pipeline/graph.d.ts +58 -0
- package/dist/src/pipeline/graph.d.ts.map +1 -0
- package/dist/src/pipeline/graph.js +199 -0
- package/dist/src/pipeline/index.d.ts +24 -0
- package/dist/src/pipeline/index.d.ts.map +1 -0
- package/dist/src/pipeline/index.js +41 -0
- package/dist/src/pipeline/orchestrator.d.ts +42 -0
- package/dist/src/pipeline/orchestrator.d.ts.map +1 -0
- package/dist/src/pipeline/orchestrator.js +115 -0
- package/dist/src/pipeline/stageInterface.d.ts +45 -0
- package/dist/src/pipeline/stageInterface.d.ts.map +1 -0
- package/dist/src/pipeline/stageInterface.js +17 -0
- package/dist/src/pipeline/stages/ast/abstractLayerTraversal.d.ts +38 -0
- package/dist/src/pipeline/stages/ast/abstractLayerTraversal.d.ts.map +1 -0
- package/dist/src/pipeline/stages/ast/abstractLayerTraversal.js +203 -0
- package/dist/src/pipeline/stages/ast/astStage.d.ts +19 -0
- package/dist/src/pipeline/stages/ast/astStage.d.ts.map +1 -0
- package/dist/src/pipeline/stages/ast/astStage.js +238 -0
- package/dist/src/pipeline/stages/ast/crossFileResolver.d.ts +23 -0
- package/dist/src/pipeline/stages/ast/crossFileResolver.d.ts.map +1 -0
- package/dist/src/pipeline/stages/ast/crossFileResolver.js +183 -0
- package/dist/src/pipeline/stages/ast/graphBuilder.d.ts +15 -0
- package/dist/src/pipeline/stages/ast/graphBuilder.d.ts.map +1 -0
- package/dist/src/pipeline/stages/ast/graphBuilder.js +268 -0
- package/dist/src/pipeline/stages/ast/importResolver.d.ts +22 -0
- package/dist/src/pipeline/stages/ast/importResolver.d.ts.map +1 -0
- package/dist/src/pipeline/stages/ast/importResolver.js +186 -0
- package/dist/src/pipeline/stages/ast/types.d.ts +85 -0
- package/dist/src/pipeline/stages/ast/types.d.ts.map +1 -0
- package/dist/src/pipeline/stages/ast/types.js +5 -0
- package/dist/src/pipeline/stages/dast/conflictEmitter.d.ts +25 -0
- package/dist/src/pipeline/stages/dast/conflictEmitter.d.ts.map +1 -0
- package/dist/src/pipeline/stages/dast/conflictEmitter.js +90 -0
- package/dist/src/pipeline/stages/dast/dastStage.d.ts +17 -0
- package/dist/src/pipeline/stages/dast/dastStage.d.ts.map +1 -0
- package/dist/src/pipeline/stages/dast/dastStage.js +203 -0
- package/dist/src/pipeline/stages/dast/types.d.ts +49 -0
- package/dist/src/pipeline/stages/dast/types.d.ts.map +1 -0
- package/dist/src/pipeline/stages/dast/types.js +9 -0
- package/dist/src/pipeline/stages/iast/iastStage.d.ts +17 -0
- package/dist/src/pipeline/stages/iast/iastStage.d.ts.map +1 -0
- package/dist/src/pipeline/stages/iast/iastStage.js +191 -0
- package/dist/src/pipeline/stages/iast/types.d.ts +48 -0
- package/dist/src/pipeline/stages/iast/types.d.ts.map +1 -0
- package/dist/src/pipeline/stages/iast/types.js +8 -0
- package/dist/src/pipeline/stages/merge/conflictDetector.d.ts +17 -0
- package/dist/src/pipeline/stages/merge/conflictDetector.d.ts.map +1 -0
- package/dist/src/pipeline/stages/merge/conflictDetector.js +60 -0
- package/dist/src/pipeline/stages/merge/coverageMappingBuilder.d.ts +15 -0
- package/dist/src/pipeline/stages/merge/coverageMappingBuilder.d.ts.map +1 -0
- package/dist/src/pipeline/stages/merge/coverageMappingBuilder.js +141 -0
- package/dist/src/pipeline/stages/merge/mergeRules.d.ts +39 -0
- package/dist/src/pipeline/stages/merge/mergeRules.d.ts.map +1 -0
- package/dist/src/pipeline/stages/merge/mergeRules.js +90 -0
- package/dist/src/pipeline/stages/merge/mergeStage.d.ts +20 -0
- package/dist/src/pipeline/stages/merge/mergeStage.d.ts.map +1 -0
- package/dist/src/pipeline/stages/merge/mergeStage.js +145 -0
- package/dist/src/pipeline/stages/merge/summaryComputer.d.ts +11 -0
- package/dist/src/pipeline/stages/merge/summaryComputer.d.ts.map +1 -0
- package/dist/src/pipeline/stages/merge/summaryComputer.js +46 -0
- package/dist/src/pipeline/stages/sca/ciDetector.d.ts +15 -0
- package/dist/src/pipeline/stages/sca/ciDetector.d.ts.map +1 -0
- package/dist/src/pipeline/stages/sca/ciDetector.js +87 -0
- package/dist/src/pipeline/stages/sca/dependencyClassification.d.ts +31 -0
- package/dist/src/pipeline/stages/sca/dependencyClassification.d.ts.map +1 -0
- package/dist/src/pipeline/stages/sca/dependencyClassification.js +296 -0
- package/dist/src/pipeline/stages/sca/dependencyDetector.d.ts +25 -0
- package/dist/src/pipeline/stages/sca/dependencyDetector.d.ts.map +1 -0
- package/dist/src/pipeline/stages/sca/dependencyDetector.js +416 -0
- package/dist/src/pipeline/stages/sca/scaStage.d.ts +21 -0
- package/dist/src/pipeline/stages/sca/scaStage.d.ts.map +1 -0
- package/dist/src/pipeline/stages/sca/scaStage.js +208 -0
- package/dist/src/pipeline/stages/sca/types.d.ts +61 -0
- package/dist/src/pipeline/stages/sca/types.d.ts.map +1 -0
- package/dist/src/pipeline/stages/sca/types.js +9 -0
- package/dist/src/pipeline/stages/tia/mockBoundaryDetector.d.ts +19 -0
- package/dist/src/pipeline/stages/tia/mockBoundaryDetector.d.ts.map +1 -0
- package/dist/src/pipeline/stages/tia/mockBoundaryDetector.js +118 -0
- package/dist/src/pipeline/stages/tia/parameterizedTestExpander.d.ts +20 -0
- package/dist/src/pipeline/stages/tia/parameterizedTestExpander.d.ts.map +1 -0
- package/dist/src/pipeline/stages/tia/parameterizedTestExpander.js +238 -0
- package/dist/src/pipeline/stages/tia/testEndpointMapper.d.ts +22 -0
- package/dist/src/pipeline/stages/tia/testEndpointMapper.d.ts.map +1 -0
- package/dist/src/pipeline/stages/tia/testEndpointMapper.js +134 -0
- package/dist/src/pipeline/stages/tia/testLayerClassifier.d.ts +16 -0
- package/dist/src/pipeline/stages/tia/testLayerClassifier.d.ts.map +1 -0
- package/dist/src/pipeline/stages/tia/testLayerClassifier.js +191 -0
- package/dist/src/pipeline/stages/tia/tiaStage.d.ts +20 -0
- package/dist/src/pipeline/stages/tia/tiaStage.d.ts.map +1 -0
- package/dist/src/pipeline/stages/tia/tiaStage.js +215 -0
- package/dist/src/pipeline/stages/tia/types.d.ts +52 -0
- package/dist/src/pipeline/stages/tia/types.d.ts.map +1 -0
- package/dist/src/pipeline/stages/tia/types.js +5 -0
- package/dist/src/pipeline/types.d.ts +128 -0
- package/dist/src/pipeline/types.d.ts.map +1 -0
- package/dist/src/pipeline/types.js +9 -0
- package/package.json +1 -1
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Test layer classifier — classifies test files into 7 layers:
|
|
4
|
+
* unit, component, integration, api, e2e, performance, security.
|
|
5
|
+
*
|
|
6
|
+
* Uses multiple signals: directory patterns, naming patterns,
|
|
7
|
+
* framework annotations, and import analysis.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.classifyTestLayer = classifyTestLayer;
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const CLASSIFICATION_RULES = [
|
|
46
|
+
{
|
|
47
|
+
layer: 'e2e',
|
|
48
|
+
directoryPatterns: [/\be2e\b/i, /\bcypress\b/i, /\bplaywright\b/i, /\bselenium\b/i, /\bfunctional\b/i, /\bacceptance\b/i],
|
|
49
|
+
fileNamePatterns: [/\.e2e\./i, /\.feature$/i],
|
|
50
|
+
contentPatterns: [
|
|
51
|
+
/cy\.\w+/, // Cypress
|
|
52
|
+
/test\.goto|page\.\w+|playwright/i, // Playwright
|
|
53
|
+
/driver\.|WebDriver|selenium/i, // Selenium
|
|
54
|
+
/Given|When|Then|Scenario:/, // Cucumber/Gherkin
|
|
55
|
+
/browser\.\w+/i, // Browser automation
|
|
56
|
+
],
|
|
57
|
+
priority: 90,
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
layer: 'performance',
|
|
61
|
+
directoryPatterns: [/\bperformance\b/i, /\bperf\b/i, /\bload\b/i, /\bstress\b/i, /\bbenchmark\b/i],
|
|
62
|
+
fileNamePatterns: [/\.perf\./i, /\.bench\./i, /\.load\./i, /\.k6\./i],
|
|
63
|
+
contentPatterns: [
|
|
64
|
+
/import\s.*k6/, // k6
|
|
65
|
+
/from\s+['"]k6/,
|
|
66
|
+
/io\.gatling/i, // Gatling
|
|
67
|
+
/locust|HttpUser|TaskSet/i, // Locust
|
|
68
|
+
/import\s.*artillery/i, // Artillery
|
|
69
|
+
/autocannon/i, // Autocannon
|
|
70
|
+
],
|
|
71
|
+
priority: 85,
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
layer: 'security',
|
|
75
|
+
directoryPatterns: [/\bsecurity\b/i, /\bsec-test\b/i, /\bpentest\b/i],
|
|
76
|
+
fileNamePatterns: [/\.security\./i, /\.sec\./i],
|
|
77
|
+
contentPatterns: [
|
|
78
|
+
/@Tag\(["']security["']\)/i, // JUnit @Tag
|
|
79
|
+
/csrf|xss|sql.?injection|auth.?bypass/i,
|
|
80
|
+
/ZAP|OWASP|pentest/i,
|
|
81
|
+
],
|
|
82
|
+
priority: 80,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
layer: 'api',
|
|
86
|
+
directoryPatterns: [/\bapi\b/i, /\bapi[-_]?test\b/i, /\bcontract\b/i],
|
|
87
|
+
fileNamePatterns: [/\.api\./i, /\.contract\./i],
|
|
88
|
+
contentPatterns: [
|
|
89
|
+
/supertest|request\(app\)/i, // Supertest
|
|
90
|
+
/MockMvc|mockMvc/, // Spring MockMvc
|
|
91
|
+
/TestRestTemplate|restTemplate/, // Spring RestTemplate
|
|
92
|
+
/httpx\.AsyncClient/i, // Python httpx
|
|
93
|
+
/RestAssured|given\(\)\./i, // REST Assured
|
|
94
|
+
/\.pact\./i, // Pact
|
|
95
|
+
],
|
|
96
|
+
priority: 70,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
layer: 'integration',
|
|
100
|
+
directoryPatterns: [/\bintegration\b/i, /\bint[-_]?test\b/i],
|
|
101
|
+
fileNamePatterns: [/\.integration\./i, /\.int\./i, /IT\.java$/],
|
|
102
|
+
contentPatterns: [
|
|
103
|
+
/@SpringBootTest/, // Spring Boot integration test
|
|
104
|
+
/TestRestTemplate/, // Spring REST testing
|
|
105
|
+
/@Testcontainers/i, // Testcontainers
|
|
106
|
+
/@DataJpaTest/i, // Spring Data JPA
|
|
107
|
+
/@WebMvcTest/i, // Spring MVC test
|
|
108
|
+
/testcontainers/i, // Docker containers
|
|
109
|
+
],
|
|
110
|
+
priority: 60,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
layer: 'component',
|
|
114
|
+
directoryPatterns: [/\bcomponent\b/i],
|
|
115
|
+
fileNamePatterns: [/\.component\./i],
|
|
116
|
+
contentPatterns: [
|
|
117
|
+
/render\(|screen\./, // React Testing Library
|
|
118
|
+
/@testing-library/, // Testing Library
|
|
119
|
+
/shallow\(|mount\(/, // Enzyme
|
|
120
|
+
/ComponentFixture|TestBed/, // Angular testing
|
|
121
|
+
],
|
|
122
|
+
priority: 50,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
layer: 'unit',
|
|
126
|
+
directoryPatterns: [/\bunit\b/i],
|
|
127
|
+
fileNamePatterns: [/\.unit\./i],
|
|
128
|
+
contentPatterns: [
|
|
129
|
+
// Unit tests are the default; no specific content patterns needed
|
|
130
|
+
],
|
|
131
|
+
priority: 10,
|
|
132
|
+
},
|
|
133
|
+
];
|
|
134
|
+
/**
|
|
135
|
+
* Classify a test file into a layer.
|
|
136
|
+
*
|
|
137
|
+
* @param filePath - The test file path
|
|
138
|
+
* @param content - Optional file content for content-based classification
|
|
139
|
+
*/
|
|
140
|
+
function classifyTestLayer(filePath, content) {
|
|
141
|
+
const signals = [];
|
|
142
|
+
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
143
|
+
const basename = path.basename(filePath);
|
|
144
|
+
// Sort rules by priority (highest first)
|
|
145
|
+
const sortedRules = [...CLASSIFICATION_RULES].sort((a, b) => b.priority - a.priority);
|
|
146
|
+
for (const rule of sortedRules) {
|
|
147
|
+
let matchCount = 0;
|
|
148
|
+
// Check directory patterns
|
|
149
|
+
for (const pattern of rule.directoryPatterns) {
|
|
150
|
+
if (pattern.test(normalizedPath)) {
|
|
151
|
+
signals.push(`dir:${rule.layer}`);
|
|
152
|
+
matchCount++;
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Check file name patterns
|
|
157
|
+
for (const pattern of rule.fileNamePatterns) {
|
|
158
|
+
if (pattern.test(basename)) {
|
|
159
|
+
signals.push(`name:${rule.layer}`);
|
|
160
|
+
matchCount++;
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Check content patterns (if content is available)
|
|
165
|
+
if (content) {
|
|
166
|
+
for (const pattern of rule.contentPatterns) {
|
|
167
|
+
if (pattern.test(content)) {
|
|
168
|
+
signals.push(`content:${rule.layer}`);
|
|
169
|
+
matchCount++;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (matchCount > 0) {
|
|
175
|
+
const confidence = matchCount >= 2 ? 'high' : 'medium';
|
|
176
|
+
return {
|
|
177
|
+
filePath,
|
|
178
|
+
layer: rule.layer,
|
|
179
|
+
confidence,
|
|
180
|
+
signals,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Default: unit test
|
|
185
|
+
return {
|
|
186
|
+
filePath,
|
|
187
|
+
layer: 'unit',
|
|
188
|
+
confidence: 'low',
|
|
189
|
+
signals: ['default:unit'],
|
|
190
|
+
};
|
|
191
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TIA (Test Impact Analysis) stage — Stage 3 of the pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Implements:
|
|
5
|
+
* - Test layer classification (7 layers)
|
|
6
|
+
* - Mock boundary detection
|
|
7
|
+
* - Parameterized test expansion
|
|
8
|
+
* - Test-to-endpoint mapping
|
|
9
|
+
*
|
|
10
|
+
* The TIA stage reads the AST stage output from context.stageOutputs
|
|
11
|
+
* to get semantic models and the knowledge graph.
|
|
12
|
+
*/
|
|
13
|
+
import type { PipelineStage, PipelineContext } from '../../stageInterface';
|
|
14
|
+
import type { TiaOutput } from './types';
|
|
15
|
+
export declare class TiaStage implements PipelineStage<TiaOutput> {
|
|
16
|
+
readonly name: "tia";
|
|
17
|
+
readonly optional = false;
|
|
18
|
+
execute(context: PipelineContext): Promise<TiaOutput>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=tiaStage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tiaStage.d.ts","sourceRoot":"","sources":["../../../../../src/pipeline/stages/tia/tiaStage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAWzC,qBAAa,QAAS,YAAW,aAAa,CAAC,SAAS,CAAC;IACvD,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAU;IAC/B,QAAQ,CAAC,QAAQ,SAAS;IAEpB,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC;CAmJ5D"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TIA (Test Impact Analysis) stage — Stage 3 of the pipeline.
|
|
4
|
+
*
|
|
5
|
+
* Implements:
|
|
6
|
+
* - Test layer classification (7 layers)
|
|
7
|
+
* - Mock boundary detection
|
|
8
|
+
* - Parameterized test expansion
|
|
9
|
+
* - Test-to-endpoint mapping
|
|
10
|
+
*
|
|
11
|
+
* The TIA stage reads the AST stage output from context.stageOutputs
|
|
12
|
+
* to get semantic models and the knowledge graph.
|
|
13
|
+
*/
|
|
14
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
17
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
18
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
19
|
+
}
|
|
20
|
+
Object.defineProperty(o, k2, desc);
|
|
21
|
+
}) : (function(o, m, k, k2) {
|
|
22
|
+
if (k2 === undefined) k2 = k;
|
|
23
|
+
o[k2] = m[k];
|
|
24
|
+
}));
|
|
25
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
26
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
27
|
+
}) : function(o, v) {
|
|
28
|
+
o["default"] = v;
|
|
29
|
+
});
|
|
30
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
31
|
+
var ownKeys = function(o) {
|
|
32
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
33
|
+
var ar = [];
|
|
34
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
35
|
+
return ar;
|
|
36
|
+
};
|
|
37
|
+
return ownKeys(o);
|
|
38
|
+
};
|
|
39
|
+
return function (mod) {
|
|
40
|
+
if (mod && mod.__esModule) return mod;
|
|
41
|
+
var result = {};
|
|
42
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
43
|
+
__setModuleDefault(result, mod);
|
|
44
|
+
return result;
|
|
45
|
+
};
|
|
46
|
+
})();
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.TiaStage = void 0;
|
|
49
|
+
const testLayerClassifier_1 = require("./testLayerClassifier");
|
|
50
|
+
const mockBoundaryDetector_1 = require("./mockBoundaryDetector");
|
|
51
|
+
const parameterizedTestExpander_1 = require("./parameterizedTestExpander");
|
|
52
|
+
const testEndpointMapper_1 = require("./testEndpointMapper");
|
|
53
|
+
const fileClassifier_1 = require("../../../discovery/fileClassifier");
|
|
54
|
+
const fs = __importStar(require("fs"));
|
|
55
|
+
const path = __importStar(require("path"));
|
|
56
|
+
class TiaStage {
|
|
57
|
+
constructor() {
|
|
58
|
+
this.name = 'tia';
|
|
59
|
+
this.optional = false;
|
|
60
|
+
}
|
|
61
|
+
async execute(context) {
|
|
62
|
+
var _a;
|
|
63
|
+
const startTime = Date.now();
|
|
64
|
+
const filesScanned = [];
|
|
65
|
+
const filesSkipped = [];
|
|
66
|
+
// Get upstream outputs
|
|
67
|
+
const astOutput = context.stageOutputs.get('ast');
|
|
68
|
+
const scaOutput = context.stageOutputs.get('sca');
|
|
69
|
+
// Collect test files from AST models or discover
|
|
70
|
+
const testFiles = [];
|
|
71
|
+
if (astOutput) {
|
|
72
|
+
for (const [filePath] of astOutput.models) {
|
|
73
|
+
if ((0, fileClassifier_1.isTestFile)(path.basename(filePath))) {
|
|
74
|
+
testFiles.push(filePath);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const output = {
|
|
79
|
+
classifications: [],
|
|
80
|
+
mockBoundaries: [],
|
|
81
|
+
parameterizedTests: [],
|
|
82
|
+
testEndpointMappings: [],
|
|
83
|
+
};
|
|
84
|
+
// 1. Classify test layers
|
|
85
|
+
for (const testFile of testFiles) {
|
|
86
|
+
let content;
|
|
87
|
+
try {
|
|
88
|
+
content = fs.readFileSync(testFile, 'utf-8');
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
filesSkipped.push({ file: testFile, reason: 'read-error' });
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
filesScanned.push(testFile);
|
|
95
|
+
const classification = (0, testLayerClassifier_1.classifyTestLayer)(testFile, content);
|
|
96
|
+
output.classifications.push(classification);
|
|
97
|
+
// 2. Detect mock boundaries
|
|
98
|
+
const language = detectLanguageFromPath(testFile);
|
|
99
|
+
const boundaries = (0, mockBoundaryDetector_1.detectMockBoundaries)(testFile, content, language);
|
|
100
|
+
output.mockBoundaries.push(...boundaries);
|
|
101
|
+
// 3. Expand parameterized tests (RULE-07)
|
|
102
|
+
const paramTests = (0, parameterizedTestExpander_1.expandParameterizedTests)(testFile, content, language);
|
|
103
|
+
output.parameterizedTests.push(...paramTests);
|
|
104
|
+
}
|
|
105
|
+
// 4. Map tests to endpoints
|
|
106
|
+
output.testEndpointMappings = (0, testEndpointMapper_1.mapTestsToEndpoints)(context.graph, testFiles);
|
|
107
|
+
// 5. Populate graph with TIA-discovered nodes
|
|
108
|
+
// Add mock-boundary nodes
|
|
109
|
+
for (const boundary of output.mockBoundaries) {
|
|
110
|
+
const nodeId = `mock-boundary:${boundary.testFilePath}:${boundary.mockedTarget}:${(_a = boundary.line) !== null && _a !== void 0 ? _a : 0}`;
|
|
111
|
+
if (!context.graph.hasNode(nodeId)) {
|
|
112
|
+
const node = {
|
|
113
|
+
id: nodeId,
|
|
114
|
+
type: 'mock-boundary',
|
|
115
|
+
label: `Mock: ${boundary.mockedTarget}`,
|
|
116
|
+
sourceStage: 'tia',
|
|
117
|
+
filePath: boundary.testFilePath,
|
|
118
|
+
line: boundary.line,
|
|
119
|
+
metadata: {
|
|
120
|
+
mockingLibrary: boundary.mockingLibrary,
|
|
121
|
+
mockType: boundary.mockType,
|
|
122
|
+
mockedTarget: boundary.mockedTarget,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
context.graph.addNode(node);
|
|
126
|
+
// Add 'mocks' edge from test file to mock boundary
|
|
127
|
+
const fileNodeId = `file:${boundary.testFilePath}`;
|
|
128
|
+
if (context.graph.hasNode(fileNodeId)) {
|
|
129
|
+
const edgeId = `${fileNodeId}->mocks->${nodeId}`;
|
|
130
|
+
if (!context.graph.hasEdge(edgeId)) {
|
|
131
|
+
context.graph.addEdge({
|
|
132
|
+
id: edgeId,
|
|
133
|
+
type: 'mocks',
|
|
134
|
+
sourceNodeId: fileNodeId,
|
|
135
|
+
targetNodeId: nodeId,
|
|
136
|
+
sourceStage: 'tia',
|
|
137
|
+
metadata: { mockType: boundary.mockType },
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// Add param-variant nodes (RULE-07: counted as N variants, not 1)
|
|
144
|
+
for (const paramTest of output.parameterizedTests) {
|
|
145
|
+
const nodeId = `param-variant:${paramTest.testFilePath}:${paramTest.testName}`;
|
|
146
|
+
if (!context.graph.hasNode(nodeId)) {
|
|
147
|
+
const node = {
|
|
148
|
+
id: nodeId,
|
|
149
|
+
type: 'param-variant',
|
|
150
|
+
label: `${paramTest.testName} (${paramTest.variantCount} variants)`,
|
|
151
|
+
sourceStage: 'tia',
|
|
152
|
+
filePath: paramTest.testFilePath,
|
|
153
|
+
line: paramTest.line,
|
|
154
|
+
metadata: {
|
|
155
|
+
variantCount: paramTest.variantCount,
|
|
156
|
+
pattern: paramTest.pattern,
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
context.graph.addNode(node);
|
|
160
|
+
// Add 'param-expands-to' edge from test file
|
|
161
|
+
const fileNodeId = `file:${paramTest.testFilePath}`;
|
|
162
|
+
if (context.graph.hasNode(fileNodeId)) {
|
|
163
|
+
const edgeId = `${fileNodeId}->param-expands-to->${nodeId}`;
|
|
164
|
+
if (!context.graph.hasEdge(edgeId)) {
|
|
165
|
+
context.graph.addEdge({
|
|
166
|
+
id: edgeId,
|
|
167
|
+
type: 'param-expands-to',
|
|
168
|
+
sourceNodeId: fileNodeId,
|
|
169
|
+
targetNodeId: nodeId,
|
|
170
|
+
sourceStage: 'tia',
|
|
171
|
+
metadata: {},
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
// Record diagnostics (RULE-12)
|
|
178
|
+
const diagnostics = {
|
|
179
|
+
stageName: 'tia',
|
|
180
|
+
filesScanned,
|
|
181
|
+
filesSkipped,
|
|
182
|
+
durationMs: Date.now() - startTime,
|
|
183
|
+
metadata: {
|
|
184
|
+
testFilesClassified: output.classifications.length,
|
|
185
|
+
mockBoundariesDetected: output.mockBoundaries.length,
|
|
186
|
+
parameterizedTestsExpanded: output.parameterizedTests.length,
|
|
187
|
+
testEndpointMappings: output.testEndpointMappings.length,
|
|
188
|
+
layerDistribution: countByLayer(output.classifications),
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
context.diagnostics.set('tia', diagnostics);
|
|
192
|
+
context.stageOutputs.set('tia', output);
|
|
193
|
+
return output;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
exports.TiaStage = TiaStage;
|
|
197
|
+
function detectLanguageFromPath(filePath) {
|
|
198
|
+
var _a;
|
|
199
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
200
|
+
const map = {
|
|
201
|
+
'.ts': 'typescript', '.tsx': 'typescript',
|
|
202
|
+
'.js': 'javascript', '.jsx': 'javascript',
|
|
203
|
+
'.java': 'java', '.kt': 'kotlin', '.kts': 'kotlin',
|
|
204
|
+
'.py': 'python', '.rb': 'ruby',
|
|
205
|
+
};
|
|
206
|
+
return (_a = map[ext]) !== null && _a !== void 0 ? _a : 'unknown';
|
|
207
|
+
}
|
|
208
|
+
function countByLayer(classifications) {
|
|
209
|
+
var _a;
|
|
210
|
+
const counts = {};
|
|
211
|
+
for (const c of classifications) {
|
|
212
|
+
counts[c.layer] = ((_a = counts[c.layer]) !== null && _a !== void 0 ? _a : 0) + 1;
|
|
213
|
+
}
|
|
214
|
+
return counts;
|
|
215
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TIA (Test Impact Analysis) stage types.
|
|
3
|
+
*/
|
|
4
|
+
import type { TestLayer, MockType } from '../../types';
|
|
5
|
+
/**
|
|
6
|
+
* Classification result for a single test file.
|
|
7
|
+
*/
|
|
8
|
+
export interface TestClassification {
|
|
9
|
+
filePath: string;
|
|
10
|
+
layer: TestLayer;
|
|
11
|
+
confidence: 'high' | 'medium' | 'low';
|
|
12
|
+
signals: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Detected mock boundary in a test file.
|
|
16
|
+
*/
|
|
17
|
+
export interface DetectedMockBoundary {
|
|
18
|
+
testFilePath: string;
|
|
19
|
+
mockingLibrary: string;
|
|
20
|
+
mockType: MockType;
|
|
21
|
+
mockedTarget: string;
|
|
22
|
+
line?: number;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Result of parameterized test expansion.
|
|
26
|
+
*/
|
|
27
|
+
export interface ExpandedParameterizedTest {
|
|
28
|
+
testFilePath: string;
|
|
29
|
+
testName: string;
|
|
30
|
+
variantCount: number | 'unresolvable';
|
|
31
|
+
pattern: string;
|
|
32
|
+
line?: number;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Mapping from a test file to endpoints it covers.
|
|
36
|
+
*/
|
|
37
|
+
export interface TestEndpointMapping {
|
|
38
|
+
testFilePath: string;
|
|
39
|
+
endpointId: string;
|
|
40
|
+
evidenceType: 'explicit-url' | 'resolved-constant' | 'import-graph' | 'naming-convention' | 'framework-metadata' | 'helper-traversal' | 'page-object';
|
|
41
|
+
confidence: 'high' | 'medium' | 'low';
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Output of the TIA pipeline stage.
|
|
45
|
+
*/
|
|
46
|
+
export interface TiaOutput {
|
|
47
|
+
classifications: TestClassification[];
|
|
48
|
+
mockBoundaries: DetectedMockBoundary[];
|
|
49
|
+
parameterizedTests: ExpandedParameterizedTest[];
|
|
50
|
+
testEndpointMappings: TestEndpointMapping[];
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/pipeline/stages/tia/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAA4B,MAAM,aAAa,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,GAAG,cAAc,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,cAAc,GAAG,mBAAmB,GAAG,cAAc,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,aAAa,CAAC;IACtJ,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,cAAc,EAAE,oBAAoB,EAAE,CAAC;IACvC,kBAAkB,EAAE,yBAAyB,EAAE,CAAC;IAChD,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;CAC7C"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline types — Coverage Knowledge Graph, nodes, edges, confidence,
|
|
3
|
+
* conflict, coverage mapping, diagnostics, and output schema.
|
|
4
|
+
*
|
|
5
|
+
* These are the canonical types consumed by every stage in the 6-stage
|
|
6
|
+
* cascaded pipeline (SCA → AST → TIA → IAST → DAST → Graph Merge).
|
|
7
|
+
*/
|
|
8
|
+
export type { ResolutionType } from '../coverage/deep-analysis/types';
|
|
9
|
+
export type { SupportedLanguage, AssertionType, SemanticModel } from '../ast/astTypes';
|
|
10
|
+
/**
|
|
11
|
+
* Extended confidence level. Adds `verified` to the existing 3-level model.
|
|
12
|
+
*
|
|
13
|
+
* - `low` — Only static AST evidence; no test linkage
|
|
14
|
+
* - `medium` — AST + TIA agree; no runtime confirmation
|
|
15
|
+
* - `high` — Static + at least one runtime stage (IAST or DAST) confirm
|
|
16
|
+
* - `verified` — All stages confirm + assertion is traced and confirmed
|
|
17
|
+
*/
|
|
18
|
+
export type PipelineConfidence = 'low' | 'medium' | 'high' | 'verified';
|
|
19
|
+
export type StageName = 'sca' | 'ast' | 'tia' | 'iast' | 'dast' | 'merge';
|
|
20
|
+
export type TestLayer = 'unit' | 'component' | 'integration' | 'api' | 'e2e' | 'performance' | 'security';
|
|
21
|
+
export type CoverageClass = 'unit-covered' | 'component-covered' | 'integration-covered' | 'api-covered' | 'e2e-covered' | 'mock-covered' | 'uncovered';
|
|
22
|
+
export type AssertionSource = 'direct' | 'inherited' | 'fixture' | 'helper' | 'unresolved';
|
|
23
|
+
export type UrlResolution = 'literal' | 'symbolic' | 'unresolved';
|
|
24
|
+
export type ConflictType = 'dast-unreachable' | 'runtime-unconfirmed' | 'stage-disagreement' | 'security-annotation-not-enforced' | 'unhandled-server-error' | 'undeclared-endpoint';
|
|
25
|
+
export type ConflictSeverity = 'info' | 'warning' | 'error';
|
|
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';
|
|
28
|
+
export interface GraphNode {
|
|
29
|
+
id: string;
|
|
30
|
+
type: GraphNodeType;
|
|
31
|
+
label: string;
|
|
32
|
+
sourceStage: StageName;
|
|
33
|
+
filePath?: string;
|
|
34
|
+
line?: number;
|
|
35
|
+
metadata: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
export interface GraphEdge {
|
|
38
|
+
id: string;
|
|
39
|
+
type: GraphEdgeType;
|
|
40
|
+
sourceNodeId: string;
|
|
41
|
+
targetNodeId: string;
|
|
42
|
+
sourceStage: StageName;
|
|
43
|
+
metadata: Record<string, unknown>;
|
|
44
|
+
}
|
|
45
|
+
export type MockType = 'return-value' | 'exception' | 'spy' | 'partial' | 'timer' | 'env';
|
|
46
|
+
export interface MockBoundary {
|
|
47
|
+
testId: string;
|
|
48
|
+
mockedNodeId: string;
|
|
49
|
+
mockingLibrary: string;
|
|
50
|
+
mockType: MockType;
|
|
51
|
+
effect: 'coverage-limited';
|
|
52
|
+
}
|
|
53
|
+
export interface ConflictNode {
|
|
54
|
+
conflictId: string;
|
|
55
|
+
nodeId: string;
|
|
56
|
+
type: ConflictType;
|
|
57
|
+
stages: StageName[];
|
|
58
|
+
stageOutputs: Record<string, unknown>;
|
|
59
|
+
detail: string;
|
|
60
|
+
suggestedAction: string;
|
|
61
|
+
severity: ConflictSeverity;
|
|
62
|
+
}
|
|
63
|
+
export type CoverageMappingItemType = 'endpoint' | 'service' | 'repository' | 'error-branch' | 'security-path' | 'validation-rule';
|
|
64
|
+
export interface CoverageMapping {
|
|
65
|
+
itemId: string;
|
|
66
|
+
itemType: CoverageMappingItemType;
|
|
67
|
+
linkedTests: string[];
|
|
68
|
+
sourceStages: StageName[];
|
|
69
|
+
confidence: PipelineConfidence;
|
|
70
|
+
coverageClass: CoverageClass;
|
|
71
|
+
mockBoundaries: string[];
|
|
72
|
+
assertionSource: AssertionSource;
|
|
73
|
+
assertionConfirmed: boolean;
|
|
74
|
+
dastReachable: boolean | 'not-probed';
|
|
75
|
+
runtimeConfirmed: boolean;
|
|
76
|
+
urlResolution: UrlResolution;
|
|
77
|
+
conflicts: string[];
|
|
78
|
+
traversalDepth: number;
|
|
79
|
+
}
|
|
80
|
+
export interface SkippedFile {
|
|
81
|
+
file: string;
|
|
82
|
+
reason: string;
|
|
83
|
+
}
|
|
84
|
+
export interface StageDiagnostics {
|
|
85
|
+
stageName: StageName;
|
|
86
|
+
filesScanned: string[];
|
|
87
|
+
filesSkipped: SkippedFile[];
|
|
88
|
+
durationMs: number;
|
|
89
|
+
metadata: Record<string, unknown>;
|
|
90
|
+
}
|
|
91
|
+
export interface PipelineSummary {
|
|
92
|
+
totalEndpoints: number;
|
|
93
|
+
coveredEndpoints: number;
|
|
94
|
+
verifiedEndpoints: number;
|
|
95
|
+
uncoveredEndpoints: number;
|
|
96
|
+
mockLimitedPaths: number;
|
|
97
|
+
unresolvedAbstractions: number;
|
|
98
|
+
conflictCount: number;
|
|
99
|
+
coverageByLayer: Record<TestLayer, number>;
|
|
100
|
+
}
|
|
101
|
+
export interface PipelineSections {
|
|
102
|
+
endpoints: CoverageMapping[];
|
|
103
|
+
parameters: CoverageMapping[];
|
|
104
|
+
integrationFlows: CoverageMapping[];
|
|
105
|
+
security: CoverageMapping[];
|
|
106
|
+
errorHandling: CoverageMapping[];
|
|
107
|
+
performance: CoverageMapping[];
|
|
108
|
+
}
|
|
109
|
+
export interface PipelineOutput {
|
|
110
|
+
graph: {
|
|
111
|
+
nodes: GraphNode[];
|
|
112
|
+
edges: GraphEdge[];
|
|
113
|
+
};
|
|
114
|
+
sections: PipelineSections;
|
|
115
|
+
diagnostics: Record<StageName, StageDiagnostics>;
|
|
116
|
+
summary: PipelineSummary;
|
|
117
|
+
}
|
|
118
|
+
export interface ConfidenceEvidence {
|
|
119
|
+
sourceStages: StageName[];
|
|
120
|
+
hasIastConfirmation: boolean;
|
|
121
|
+
hasDastConfirmation: boolean;
|
|
122
|
+
hasAssertionConfirmation: boolean;
|
|
123
|
+
hasMockBoundary: boolean;
|
|
124
|
+
hasPartialResolution: boolean;
|
|
125
|
+
hasSymbolicUrl: boolean;
|
|
126
|
+
isStaticOnlyMode: boolean;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/pipeline/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pipeline types — Coverage Knowledge Graph, nodes, edges, confidence,
|
|
4
|
+
* conflict, coverage mapping, diagnostics, and output schema.
|
|
5
|
+
*
|
|
6
|
+
* These are the canonical types consumed by every stage in the 6-stage
|
|
7
|
+
* cascaded pipeline (SCA → AST → TIA → IAST → DAST → Graph Merge).
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
package/package.json
CHANGED