test-genie-mcp 2.0.0
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/README.md +219 -0
- package/dist/analyzers/astAnalyzer.d.ts +108 -0
- package/dist/analyzers/astAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/astAnalyzer.js +800 -0
- package/dist/analyzers/astAnalyzer.js.map +1 -0
- package/dist/analyzers/performanceAnalyzer.d.ts +90 -0
- package/dist/analyzers/performanceAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/performanceAnalyzer.js +647 -0
- package/dist/analyzers/performanceAnalyzer.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +683 -0
- package/dist/index.js.map +1 -0
- package/dist/platforms/android/index.d.ts +90 -0
- package/dist/platforms/android/index.d.ts.map +1 -0
- package/dist/platforms/android/index.js +519 -0
- package/dist/platforms/android/index.js.map +1 -0
- package/dist/platforms/flutter/index.d.ts +105 -0
- package/dist/platforms/flutter/index.d.ts.map +1 -0
- package/dist/platforms/flutter/index.js +533 -0
- package/dist/platforms/flutter/index.js.map +1 -0
- package/dist/platforms/ios/index.d.ts +79 -0
- package/dist/platforms/ios/index.d.ts.map +1 -0
- package/dist/platforms/ios/index.js +393 -0
- package/dist/platforms/ios/index.js.map +1 -0
- package/dist/platforms/react-native/index.d.ts +160 -0
- package/dist/platforms/react-native/index.d.ts.map +1 -0
- package/dist/platforms/react-native/index.js +602 -0
- package/dist/platforms/react-native/index.js.map +1 -0
- package/dist/platforms/web/index.d.ts +177 -0
- package/dist/platforms/web/index.d.ts.map +1 -0
- package/dist/platforms/web/index.js +637 -0
- package/dist/platforms/web/index.js.map +1 -0
- package/dist/storage/index.d.ts +35 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +351 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/tools/analysis/analyzeAppStructure.d.ts +9 -0
- package/dist/tools/analysis/analyzeAppStructure.d.ts.map +1 -0
- package/dist/tools/analysis/analyzeAppStructure.js +289 -0
- package/dist/tools/analysis/analyzeAppStructure.js.map +1 -0
- package/dist/tools/analysis/createTestPlan.d.ts +21 -0
- package/dist/tools/analysis/createTestPlan.d.ts.map +1 -0
- package/dist/tools/analysis/createTestPlan.js +214 -0
- package/dist/tools/analysis/createTestPlan.js.map +1 -0
- package/dist/tools/analysis/generateScenarios.d.ts +21 -0
- package/dist/tools/analysis/generateScenarios.d.ts.map +1 -0
- package/dist/tools/analysis/generateScenarios.js +567 -0
- package/dist/tools/analysis/generateScenarios.js.map +1 -0
- package/dist/tools/automation/cicdIntegration.d.ts +41 -0
- package/dist/tools/automation/cicdIntegration.d.ts.map +1 -0
- package/dist/tools/automation/cicdIntegration.js +825 -0
- package/dist/tools/automation/cicdIntegration.js.map +1 -0
- package/dist/tools/automation/generateReport.d.ts +16 -0
- package/dist/tools/automation/generateReport.d.ts.map +1 -0
- package/dist/tools/automation/generateReport.js +406 -0
- package/dist/tools/automation/generateReport.js.map +1 -0
- package/dist/tools/automation/runFullAutomation.d.ts +25 -0
- package/dist/tools/automation/runFullAutomation.d.ts.map +1 -0
- package/dist/tools/automation/runFullAutomation.js +296 -0
- package/dist/tools/automation/runFullAutomation.js.map +1 -0
- package/dist/tools/detection/detectLogicErrors.d.ts +18 -0
- package/dist/tools/detection/detectLogicErrors.d.ts.map +1 -0
- package/dist/tools/detection/detectLogicErrors.js +470 -0
- package/dist/tools/detection/detectLogicErrors.js.map +1 -0
- package/dist/tools/detection/detectMemoryLeaks.d.ts +23 -0
- package/dist/tools/detection/detectMemoryLeaks.d.ts.map +1 -0
- package/dist/tools/detection/detectMemoryLeaks.js +453 -0
- package/dist/tools/detection/detectMemoryLeaks.js.map +1 -0
- package/dist/tools/execution/runScenarioTest.d.ts +34 -0
- package/dist/tools/execution/runScenarioTest.d.ts.map +1 -0
- package/dist/tools/execution/runScenarioTest.js +334 -0
- package/dist/tools/execution/runScenarioTest.js.map +1 -0
- package/dist/tools/execution/runSimulation.d.ts +17 -0
- package/dist/tools/execution/runSimulation.d.ts.map +1 -0
- package/dist/tools/execution/runSimulation.js +250 -0
- package/dist/tools/execution/runSimulation.js.map +1 -0
- package/dist/tools/execution/runStressTest.d.ts +52 -0
- package/dist/tools/execution/runStressTest.d.ts.map +1 -0
- package/dist/tools/execution/runStressTest.js +176 -0
- package/dist/tools/execution/runStressTest.js.map +1 -0
- package/dist/tools/fixing/applyFix.d.ts +44 -0
- package/dist/tools/fixing/applyFix.d.ts.map +1 -0
- package/dist/tools/fixing/applyFix.js +399 -0
- package/dist/tools/fixing/applyFix.js.map +1 -0
- package/dist/tools/fixing/confirmFix.d.ts +31 -0
- package/dist/tools/fixing/confirmFix.d.ts.map +1 -0
- package/dist/tools/fixing/confirmFix.js +136 -0
- package/dist/tools/fixing/confirmFix.js.map +1 -0
- package/dist/tools/fixing/suggestFixes.d.ts +23 -0
- package/dist/tools/fixing/suggestFixes.d.ts.map +1 -0
- package/dist/tools/fixing/suggestFixes.js +349 -0
- package/dist/tools/fixing/suggestFixes.js.map +1 -0
- package/dist/types.d.ts +322 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/codeParser.d.ts +12 -0
- package/dist/utils/codeParser.d.ts.map +1 -0
- package/dist/utils/codeParser.js +487 -0
- package/dist/utils/codeParser.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================
|
|
3
|
+
// Analyze App Structure Tool
|
|
4
|
+
// ============================================
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.analyzeAppStructure = analyzeAppStructure;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const codeParser_js_1 = require("../../utils/codeParser.js");
|
|
43
|
+
function analyzeAppStructure(params) {
|
|
44
|
+
const { projectPath, depth = 'normal' } = params;
|
|
45
|
+
if (!fs.existsSync(projectPath)) {
|
|
46
|
+
throw new Error(`Project path does not exist: ${projectPath}`);
|
|
47
|
+
}
|
|
48
|
+
// Detect platform and language
|
|
49
|
+
const platform = params.platform || (0, codeParser_js_1.detectPlatform)(projectPath);
|
|
50
|
+
const language = (0, codeParser_js_1.detectLanguage)(platform, projectPath);
|
|
51
|
+
// Get file extensions based on platform
|
|
52
|
+
const extensions = getExtensions(platform);
|
|
53
|
+
const files = (0, codeParser_js_1.getAllFiles)(projectPath, extensions);
|
|
54
|
+
// Parse components and screens
|
|
55
|
+
const components = [];
|
|
56
|
+
const screens = [];
|
|
57
|
+
const apis = [];
|
|
58
|
+
for (const file of files) {
|
|
59
|
+
const content = fs.readFileSync(file, 'utf-8');
|
|
60
|
+
// Parse component
|
|
61
|
+
const component = parseComponent(file, content, platform);
|
|
62
|
+
if (component) {
|
|
63
|
+
// Determine if it's a screen or component
|
|
64
|
+
if (isScreen(file, content, platform)) {
|
|
65
|
+
screens.push(componentToScreen(component, content, platform));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
components.push(component);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Parse API calls
|
|
72
|
+
if (depth !== 'shallow') {
|
|
73
|
+
const fileApis = (0, codeParser_js_1.parseApiCalls)(content);
|
|
74
|
+
for (const api of fileApis) {
|
|
75
|
+
api.path = file;
|
|
76
|
+
apis.push(api);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Detect state management
|
|
81
|
+
const stateManagement = detectStateManagement(projectPath, platform);
|
|
82
|
+
// Get dependencies
|
|
83
|
+
const dependencies = getDependencies(projectPath, platform);
|
|
84
|
+
return {
|
|
85
|
+
projectPath,
|
|
86
|
+
platform,
|
|
87
|
+
language,
|
|
88
|
+
screens,
|
|
89
|
+
components,
|
|
90
|
+
apis,
|
|
91
|
+
stateManagement,
|
|
92
|
+
dependencies,
|
|
93
|
+
analyzedAt: new Date().toISOString(),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function getExtensions(platform) {
|
|
97
|
+
switch (platform) {
|
|
98
|
+
case 'ios':
|
|
99
|
+
return ['.swift', '.m', '.mm'];
|
|
100
|
+
case 'android':
|
|
101
|
+
return ['.kt', '.java'];
|
|
102
|
+
case 'flutter':
|
|
103
|
+
return ['.dart'];
|
|
104
|
+
case 'react-native':
|
|
105
|
+
case 'web':
|
|
106
|
+
return ['.tsx', '.ts', '.jsx', '.js'];
|
|
107
|
+
default:
|
|
108
|
+
return ['.ts', '.js'];
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function parseComponent(filePath, content, platform) {
|
|
112
|
+
switch (platform) {
|
|
113
|
+
case 'ios':
|
|
114
|
+
return (0, codeParser_js_1.parseSwiftComponent)(filePath, content);
|
|
115
|
+
case 'android':
|
|
116
|
+
return (0, codeParser_js_1.parseKotlinComponent)(filePath, content);
|
|
117
|
+
case 'flutter':
|
|
118
|
+
return (0, codeParser_js_1.parseDartWidget)(filePath, content);
|
|
119
|
+
case 'react-native':
|
|
120
|
+
case 'web':
|
|
121
|
+
return (0, codeParser_js_1.parseReactComponent)(filePath, content);
|
|
122
|
+
default:
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function isScreen(filePath, content, platform) {
|
|
127
|
+
const fileName = path.basename(filePath).toLowerCase();
|
|
128
|
+
// Common naming patterns
|
|
129
|
+
if (fileName.includes('screen') || fileName.includes('page') || fileName.includes('view')) {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
switch (platform) {
|
|
133
|
+
case 'ios':
|
|
134
|
+
return content.includes('UIViewController') ||
|
|
135
|
+
content.includes('View: View') ||
|
|
136
|
+
content.includes('@main') ||
|
|
137
|
+
filePath.includes('Screens') ||
|
|
138
|
+
filePath.includes('Views');
|
|
139
|
+
case 'android':
|
|
140
|
+
return content.includes('Activity') ||
|
|
141
|
+
content.includes('Fragment') ||
|
|
142
|
+
content.includes('@Composable') && content.includes('Scaffold');
|
|
143
|
+
case 'flutter':
|
|
144
|
+
return content.includes('Scaffold') ||
|
|
145
|
+
filePath.includes('screens') ||
|
|
146
|
+
filePath.includes('pages');
|
|
147
|
+
case 'react-native':
|
|
148
|
+
case 'web':
|
|
149
|
+
return content.includes('Screen') ||
|
|
150
|
+
content.includes('Page') ||
|
|
151
|
+
filePath.includes('screens') ||
|
|
152
|
+
filePath.includes('pages');
|
|
153
|
+
default:
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function componentToScreen(component, content, platform) {
|
|
158
|
+
const navigation = [];
|
|
159
|
+
// Detect navigation patterns
|
|
160
|
+
switch (platform) {
|
|
161
|
+
case 'ios':
|
|
162
|
+
if (content.includes('NavigationLink')) {
|
|
163
|
+
const matches = content.matchAll(/NavigationLink.*destination:\s*(\w+)/g);
|
|
164
|
+
for (const match of matches) {
|
|
165
|
+
navigation.push({ target: match[1] ?? '', type: 'push' });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (content.includes('presentationMode')) {
|
|
169
|
+
navigation.push({ target: 'previous', type: 'pop' });
|
|
170
|
+
}
|
|
171
|
+
break;
|
|
172
|
+
case 'android':
|
|
173
|
+
const navMatches = content.matchAll(/navigate\(['"]([^'"]+)['"]\)/g);
|
|
174
|
+
for (const match of navMatches) {
|
|
175
|
+
navigation.push({ target: match[1] ?? '', type: 'push' });
|
|
176
|
+
}
|
|
177
|
+
break;
|
|
178
|
+
case 'flutter':
|
|
179
|
+
const flutterNavMatches = content.matchAll(/Navigator\.(push|pop|pushReplacement)\w*.*?['"]?(\w+)['"]?/g);
|
|
180
|
+
for (const match of flutterNavMatches) {
|
|
181
|
+
const type = match[1] === 'pop' ? 'pop' : match[1] === 'pushReplacement' ? 'replace' : 'push';
|
|
182
|
+
navigation.push({ target: match[2] ?? '', type });
|
|
183
|
+
}
|
|
184
|
+
break;
|
|
185
|
+
case 'react-native':
|
|
186
|
+
case 'web':
|
|
187
|
+
const rnNavMatches = content.matchAll(/navigation\.(navigate|goBack|replace)\(['"](\w+)['"]/g);
|
|
188
|
+
for (const match of rnNavMatches) {
|
|
189
|
+
const type = match[1] === 'goBack' ? 'pop' : match[1] === 'replace' ? 'replace' : 'push';
|
|
190
|
+
navigation.push({ target: match[2] ?? '', type });
|
|
191
|
+
}
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
name: component.name,
|
|
196
|
+
path: component.path,
|
|
197
|
+
type: 'screen',
|
|
198
|
+
components: component.dependencies.filter(d => !d.startsWith('@') && !d.startsWith('.')),
|
|
199
|
+
navigation,
|
|
200
|
+
stateUsage: component.state.map(s => s.name),
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
function detectStateManagement(projectPath, platform) {
|
|
204
|
+
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
205
|
+
const pubspecPath = path.join(projectPath, 'pubspec.yaml');
|
|
206
|
+
const buildGradlePath = path.join(projectPath, 'app', 'build.gradle');
|
|
207
|
+
if (platform === 'react-native' || platform === 'web') {
|
|
208
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
209
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
210
|
+
const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
|
|
211
|
+
if (deps['redux'] || deps['@reduxjs/toolkit']) {
|
|
212
|
+
return { type: 'redux', stores: [], actions: [] };
|
|
213
|
+
}
|
|
214
|
+
if (deps['mobx']) {
|
|
215
|
+
return { type: 'mobx', stores: [], actions: [] };
|
|
216
|
+
}
|
|
217
|
+
if (deps['zustand']) {
|
|
218
|
+
return { type: 'zustand', stores: [], actions: [] };
|
|
219
|
+
}
|
|
220
|
+
if (deps['recoil']) {
|
|
221
|
+
return { type: 'recoil', stores: [], actions: [] };
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (platform === 'flutter') {
|
|
226
|
+
if (fs.existsSync(pubspecPath)) {
|
|
227
|
+
const pubspec = fs.readFileSync(pubspecPath, 'utf-8');
|
|
228
|
+
if (pubspec.includes('flutter_bloc') || pubspec.includes('bloc')) {
|
|
229
|
+
return { type: 'bloc', stores: [], actions: [] };
|
|
230
|
+
}
|
|
231
|
+
if (pubspec.includes('provider')) {
|
|
232
|
+
return { type: 'provider', stores: [], actions: [] };
|
|
233
|
+
}
|
|
234
|
+
if (pubspec.includes('riverpod')) {
|
|
235
|
+
return { type: 'riverpod', stores: [], actions: [] };
|
|
236
|
+
}
|
|
237
|
+
if (pubspec.includes('get:') || pubspec.includes('getx')) {
|
|
238
|
+
return { type: 'getx', stores: [], actions: [] };
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
function getDependencies(projectPath, platform) {
|
|
245
|
+
const dependencies = [];
|
|
246
|
+
if (platform === 'react-native' || platform === 'web') {
|
|
247
|
+
const packageJsonPath = path.join(projectPath, 'package.json');
|
|
248
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
249
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
250
|
+
for (const [name, version] of Object.entries(packageJson.dependencies || {})) {
|
|
251
|
+
dependencies.push({ name, version: version, type: 'production' });
|
|
252
|
+
}
|
|
253
|
+
for (const [name, version] of Object.entries(packageJson.devDependencies || {})) {
|
|
254
|
+
dependencies.push({ name, version: version, type: 'development' });
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
if (platform === 'flutter') {
|
|
259
|
+
const pubspecPath = path.join(projectPath, 'pubspec.yaml');
|
|
260
|
+
if (fs.existsSync(pubspecPath)) {
|
|
261
|
+
const pubspec = fs.readFileSync(pubspecPath, 'utf-8');
|
|
262
|
+
const depMatches = pubspec.matchAll(/^\s{2}(\w+):\s*[\^~]?([\d.]+)/gm);
|
|
263
|
+
for (const match of depMatches) {
|
|
264
|
+
dependencies.push({
|
|
265
|
+
name: match[1] ?? '',
|
|
266
|
+
version: match[2] ?? '',
|
|
267
|
+
type: 'production',
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (platform === 'ios') {
|
|
273
|
+
const podfileLockPath = path.join(projectPath, 'Podfile.lock');
|
|
274
|
+
if (fs.existsSync(podfileLockPath)) {
|
|
275
|
+
const podfileLock = fs.readFileSync(podfileLockPath, 'utf-8');
|
|
276
|
+
const podMatches = podfileLock.matchAll(/^\s{2}- (\w+)\s*\(([\d.]+)\)/gm);
|
|
277
|
+
for (const match of podMatches) {
|
|
278
|
+
dependencies.push({
|
|
279
|
+
name: match[1] ?? '',
|
|
280
|
+
version: match[2] ?? '',
|
|
281
|
+
type: 'production',
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return dependencies;
|
|
287
|
+
}
|
|
288
|
+
exports.default = analyzeAppStructure;
|
|
289
|
+
//# sourceMappingURL=analyzeAppStructure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyzeAppStructure.js","sourceRoot":"","sources":["../../../src/tools/analysis/analyzeAppStructure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { TestScenario, TestPlan, ScheduleInfo, AppStructure } from '../../types.js';
|
|
2
|
+
interface CreateTestPlanParams {
|
|
3
|
+
name: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
scenarios: TestScenario[];
|
|
6
|
+
appStructure: AppStructure;
|
|
7
|
+
priorityFilter?: ('critical' | 'high' | 'medium' | 'low')[];
|
|
8
|
+
typeFilter?: string[];
|
|
9
|
+
schedule?: ScheduleInfo;
|
|
10
|
+
maxDuration?: number;
|
|
11
|
+
}
|
|
12
|
+
interface CreateTestPlanResult {
|
|
13
|
+
plan: TestPlan;
|
|
14
|
+
excludedScenarios: TestScenario[];
|
|
15
|
+
estimatedDuration: number;
|
|
16
|
+
summary: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function createTestPlan(params: CreateTestPlanParams): CreateTestPlanResult;
|
|
19
|
+
export declare function createQuickPlan(appStructure: AppStructure, scenarios: TestScenario[], template: 'smoke' | 'regression' | 'nightly' | 'full'): CreateTestPlanResult;
|
|
20
|
+
export default createTestPlan;
|
|
21
|
+
//# sourceMappingURL=createTestPlan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTestPlan.d.ts","sourceRoot":"","sources":["../../../src/tools/analysis/createTestPlan.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAgB,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGlG,UAAU,oBAAoB;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,CAAC,EAAE,CAAC,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC,EAAE,CAAC;IAC5D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,oBAAoB;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,iBAAiB,EAAE,YAAY,EAAE,CAAC;IAClC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,oBAAoB,CA6EjF;AA+HD,wBAAgB,eAAe,CAC7B,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,YAAY,EAAE,EACzB,QAAQ,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,MAAM,GACpD,oBAAoB,CAyCtB;AAYD,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ============================================
|
|
3
|
+
// Create Test Plan Tool
|
|
4
|
+
// ============================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createTestPlan = createTestPlan;
|
|
7
|
+
exports.createQuickPlan = createQuickPlan;
|
|
8
|
+
const uuid_1 = require("uuid");
|
|
9
|
+
const index_js_1 = require("../../storage/index.js");
|
|
10
|
+
function createTestPlan(params) {
|
|
11
|
+
const { name, description = '', scenarios, appStructure, priorityFilter, typeFilter, schedule, maxDuration, } = params;
|
|
12
|
+
// Filter scenarios
|
|
13
|
+
let filteredScenarios = [...scenarios];
|
|
14
|
+
// Filter by priority
|
|
15
|
+
if (priorityFilter && priorityFilter.length > 0) {
|
|
16
|
+
filteredScenarios = filteredScenarios.filter(s => priorityFilter.includes(s.priority));
|
|
17
|
+
}
|
|
18
|
+
// Filter by type
|
|
19
|
+
if (typeFilter && typeFilter.length > 0) {
|
|
20
|
+
filteredScenarios = filteredScenarios.filter(s => typeFilter.includes(s.type));
|
|
21
|
+
}
|
|
22
|
+
// Sort by priority (critical > high > medium > low)
|
|
23
|
+
const priorityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
24
|
+
filteredScenarios.sort((a, b) => priorityOrder[a.priority] - priorityOrder[b.priority]);
|
|
25
|
+
// Apply max duration limit
|
|
26
|
+
let includedScenarios = [];
|
|
27
|
+
let excludedScenarios = [];
|
|
28
|
+
let totalDuration = 0;
|
|
29
|
+
if (maxDuration) {
|
|
30
|
+
for (const scenario of filteredScenarios) {
|
|
31
|
+
if (totalDuration + scenario.estimatedDuration <= maxDuration) {
|
|
32
|
+
includedScenarios.push(scenario);
|
|
33
|
+
totalDuration += scenario.estimatedDuration;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
excludedScenarios.push(scenario);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
includedScenarios = filteredScenarios;
|
|
42
|
+
totalDuration = filteredScenarios.reduce((sum, s) => sum + s.estimatedDuration, 0);
|
|
43
|
+
}
|
|
44
|
+
// Calculate coverage
|
|
45
|
+
const coverage = calculateCoverage(includedScenarios, appStructure);
|
|
46
|
+
// Create plan
|
|
47
|
+
const plan = {
|
|
48
|
+
id: (0, uuid_1.v4)(),
|
|
49
|
+
name,
|
|
50
|
+
description: description || generatePlanDescription(includedScenarios, appStructure),
|
|
51
|
+
scenarios: includedScenarios,
|
|
52
|
+
coverage,
|
|
53
|
+
schedule,
|
|
54
|
+
createdAt: new Date().toISOString(),
|
|
55
|
+
};
|
|
56
|
+
// Save plan
|
|
57
|
+
(0, index_js_1.saveTestPlan)(plan, appStructure.projectPath);
|
|
58
|
+
return {
|
|
59
|
+
plan,
|
|
60
|
+
excludedScenarios,
|
|
61
|
+
estimatedDuration: totalDuration,
|
|
62
|
+
summary: generatePlanSummary(plan, excludedScenarios, totalDuration),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function calculateCoverage(scenarios, app) {
|
|
66
|
+
const coveredScreens = new Set();
|
|
67
|
+
const coveredComponents = new Set();
|
|
68
|
+
const coveredApis = new Set();
|
|
69
|
+
let edgeCases = 0;
|
|
70
|
+
let stateTransitions = 0;
|
|
71
|
+
for (const scenario of scenarios) {
|
|
72
|
+
// Count edge cases
|
|
73
|
+
if (scenario.tags.includes('edge-case') || scenario.tags.includes('error-handling')) {
|
|
74
|
+
edgeCases++;
|
|
75
|
+
}
|
|
76
|
+
// Count state transitions
|
|
77
|
+
if (scenario.tags.includes('state') || scenario.tags.includes('state-management')) {
|
|
78
|
+
stateTransitions++;
|
|
79
|
+
}
|
|
80
|
+
// Track covered screens
|
|
81
|
+
for (const step of scenario.steps) {
|
|
82
|
+
if (step.target) {
|
|
83
|
+
const matchingScreen = app.screens.find(s => s.name.toLowerCase().includes(step.target.toLowerCase()));
|
|
84
|
+
if (matchingScreen) {
|
|
85
|
+
coveredScreens.add(matchingScreen.name);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
// Track covered components from tags
|
|
90
|
+
for (const tag of scenario.tags) {
|
|
91
|
+
const matchingComponent = app.components.find(c => c.name.toLowerCase() === tag.toLowerCase());
|
|
92
|
+
if (matchingComponent) {
|
|
93
|
+
coveredComponents.add(matchingComponent.name);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Track covered APIs
|
|
97
|
+
if (scenario.tags.includes('api')) {
|
|
98
|
+
for (const step of scenario.steps) {
|
|
99
|
+
if (step.target && step.target.includes('/')) {
|
|
100
|
+
coveredApis.add(step.target);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return {
|
|
106
|
+
screens: Math.round((coveredScreens.size / Math.max(app.screens.length, 1)) * 100),
|
|
107
|
+
components: Math.round((coveredComponents.size / Math.max(app.components.length, 1)) * 100),
|
|
108
|
+
apis: Math.round((coveredApis.size / Math.max(app.apis.length, 1)) * 100),
|
|
109
|
+
stateTransitions,
|
|
110
|
+
edgeCases,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function generatePlanDescription(scenarios, app) {
|
|
114
|
+
const types = [...new Set(scenarios.map(s => s.type))];
|
|
115
|
+
return `Test plan covering ${types.join(', ')} tests for ${app.platform} application with ${app.screens.length} screens and ${app.components.length} components.`;
|
|
116
|
+
}
|
|
117
|
+
function generatePlanSummary(plan, excludedScenarios, totalDuration) {
|
|
118
|
+
const lines = [];
|
|
119
|
+
lines.push(`Test Plan: ${plan.name}`);
|
|
120
|
+
lines.push(`━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━`);
|
|
121
|
+
lines.push(`Total Scenarios: ${plan.scenarios.length}`);
|
|
122
|
+
// By type
|
|
123
|
+
const byType = {};
|
|
124
|
+
for (const s of plan.scenarios) {
|
|
125
|
+
byType[s.type] = (byType[s.type] || 0) + 1;
|
|
126
|
+
}
|
|
127
|
+
lines.push(`\nBy Type:`);
|
|
128
|
+
for (const [type, count] of Object.entries(byType)) {
|
|
129
|
+
lines.push(` - ${type}: ${count}`);
|
|
130
|
+
}
|
|
131
|
+
// By priority
|
|
132
|
+
const byPriority = {};
|
|
133
|
+
for (const s of plan.scenarios) {
|
|
134
|
+
byPriority[s.priority] = (byPriority[s.priority] || 0) + 1;
|
|
135
|
+
}
|
|
136
|
+
lines.push(`\nBy Priority:`);
|
|
137
|
+
for (const [priority, count] of Object.entries(byPriority)) {
|
|
138
|
+
lines.push(` - ${priority}: ${count}`);
|
|
139
|
+
}
|
|
140
|
+
// Coverage
|
|
141
|
+
lines.push(`\nCoverage:`);
|
|
142
|
+
lines.push(` - Screens: ${plan.coverage.screens}%`);
|
|
143
|
+
lines.push(` - Components: ${plan.coverage.components}%`);
|
|
144
|
+
lines.push(` - APIs: ${plan.coverage.apis}%`);
|
|
145
|
+
lines.push(` - Edge Cases: ${plan.coverage.edgeCases}`);
|
|
146
|
+
// Duration
|
|
147
|
+
const hours = Math.floor(totalDuration / 3600);
|
|
148
|
+
const minutes = Math.floor((totalDuration % 3600) / 60);
|
|
149
|
+
const seconds = totalDuration % 60;
|
|
150
|
+
lines.push(`\nEstimated Duration: ${hours}h ${minutes}m ${seconds}s`);
|
|
151
|
+
// Excluded
|
|
152
|
+
if (excludedScenarios.length > 0) {
|
|
153
|
+
lines.push(`\nExcluded Scenarios: ${excludedScenarios.length} (due to time limit)`);
|
|
154
|
+
}
|
|
155
|
+
// Schedule
|
|
156
|
+
if (plan.schedule) {
|
|
157
|
+
lines.push(`\nSchedule: ${plan.schedule.type}`);
|
|
158
|
+
if (plan.schedule.nextRun) {
|
|
159
|
+
lines.push(`Next Run: ${plan.schedule.nextRun}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return lines.join('\n');
|
|
163
|
+
}
|
|
164
|
+
// Quick plan templates
|
|
165
|
+
function createQuickPlan(appStructure, scenarios, template) {
|
|
166
|
+
switch (template) {
|
|
167
|
+
case 'smoke':
|
|
168
|
+
return createTestPlan({
|
|
169
|
+
name: 'Smoke Test',
|
|
170
|
+
description: 'Quick smoke test covering critical functionality',
|
|
171
|
+
scenarios,
|
|
172
|
+
appStructure,
|
|
173
|
+
priorityFilter: ['critical', 'high'],
|
|
174
|
+
typeFilter: ['e2e'],
|
|
175
|
+
maxDuration: 300, // 5 minutes
|
|
176
|
+
});
|
|
177
|
+
case 'regression':
|
|
178
|
+
return createTestPlan({
|
|
179
|
+
name: 'Regression Test',
|
|
180
|
+
description: 'Comprehensive regression test suite',
|
|
181
|
+
scenarios,
|
|
182
|
+
appStructure,
|
|
183
|
+
priorityFilter: ['critical', 'high', 'medium'],
|
|
184
|
+
maxDuration: 3600, // 1 hour
|
|
185
|
+
});
|
|
186
|
+
case 'nightly':
|
|
187
|
+
return createTestPlan({
|
|
188
|
+
name: 'Nightly Test',
|
|
189
|
+
description: 'Full nightly test including performance and memory tests',
|
|
190
|
+
scenarios,
|
|
191
|
+
appStructure,
|
|
192
|
+
schedule: { type: 'daily', nextRun: getNextNightlyRun() },
|
|
193
|
+
});
|
|
194
|
+
case 'full':
|
|
195
|
+
default:
|
|
196
|
+
return createTestPlan({
|
|
197
|
+
name: 'Full Test Suite',
|
|
198
|
+
description: 'Complete test suite covering all scenarios',
|
|
199
|
+
scenarios,
|
|
200
|
+
appStructure,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
function getNextNightlyRun() {
|
|
205
|
+
const now = new Date();
|
|
206
|
+
const next = new Date(now);
|
|
207
|
+
next.setHours(2, 0, 0, 0); // 2 AM
|
|
208
|
+
if (next <= now) {
|
|
209
|
+
next.setDate(next.getDate() + 1);
|
|
210
|
+
}
|
|
211
|
+
return next.toISOString();
|
|
212
|
+
}
|
|
213
|
+
exports.default = createTestPlan;
|
|
214
|
+
//# sourceMappingURL=createTestPlan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTestPlan.js","sourceRoot":"","sources":["../../../src/tools/analysis/createTestPlan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AppStructure, TestScenario, TestType } from '../../types.js';
|
|
2
|
+
interface GenerateScenariosParams {
|
|
3
|
+
appStructure: AppStructure;
|
|
4
|
+
testTypes?: TestType[];
|
|
5
|
+
coverage?: 'minimal' | 'standard' | 'comprehensive';
|
|
6
|
+
focusAreas?: string[];
|
|
7
|
+
maxScenarios?: number;
|
|
8
|
+
}
|
|
9
|
+
interface GenerateScenariosResult {
|
|
10
|
+
scenarios: TestScenario[];
|
|
11
|
+
coverage: {
|
|
12
|
+
screens: number;
|
|
13
|
+
components: number;
|
|
14
|
+
apis: number;
|
|
15
|
+
edgeCases: number;
|
|
16
|
+
};
|
|
17
|
+
summary: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function generateScenarios(params: GenerateScenariosParams): GenerateScenariosResult;
|
|
20
|
+
export default generateScenarios;
|
|
21
|
+
//# sourceMappingURL=generateScenarios.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateScenarios.d.ts","sourceRoot":"","sources":["../../../src/tools/analysis/generateScenarios.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,YAAY,EACZ,YAAY,EAEZ,QAAQ,EAIT,MAAM,gBAAgB,CAAC;AAGxB,UAAU,uBAAuB;IAC/B,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,eAAe,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,uBAAuB;IAC/B,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,QAAQ,EAAE;QACR,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,uBAAuB,CA6D1F;AAqkBD,eAAe,iBAAiB,CAAC"}
|