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.
Files changed (102) hide show
  1. package/README.md +219 -0
  2. package/dist/analyzers/astAnalyzer.d.ts +108 -0
  3. package/dist/analyzers/astAnalyzer.d.ts.map +1 -0
  4. package/dist/analyzers/astAnalyzer.js +800 -0
  5. package/dist/analyzers/astAnalyzer.js.map +1 -0
  6. package/dist/analyzers/performanceAnalyzer.d.ts +90 -0
  7. package/dist/analyzers/performanceAnalyzer.d.ts.map +1 -0
  8. package/dist/analyzers/performanceAnalyzer.js +647 -0
  9. package/dist/analyzers/performanceAnalyzer.js.map +1 -0
  10. package/dist/index.d.ts +3 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +683 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/platforms/android/index.d.ts +90 -0
  15. package/dist/platforms/android/index.d.ts.map +1 -0
  16. package/dist/platforms/android/index.js +519 -0
  17. package/dist/platforms/android/index.js.map +1 -0
  18. package/dist/platforms/flutter/index.d.ts +105 -0
  19. package/dist/platforms/flutter/index.d.ts.map +1 -0
  20. package/dist/platforms/flutter/index.js +533 -0
  21. package/dist/platforms/flutter/index.js.map +1 -0
  22. package/dist/platforms/ios/index.d.ts +79 -0
  23. package/dist/platforms/ios/index.d.ts.map +1 -0
  24. package/dist/platforms/ios/index.js +393 -0
  25. package/dist/platforms/ios/index.js.map +1 -0
  26. package/dist/platforms/react-native/index.d.ts +160 -0
  27. package/dist/platforms/react-native/index.d.ts.map +1 -0
  28. package/dist/platforms/react-native/index.js +602 -0
  29. package/dist/platforms/react-native/index.js.map +1 -0
  30. package/dist/platforms/web/index.d.ts +177 -0
  31. package/dist/platforms/web/index.d.ts.map +1 -0
  32. package/dist/platforms/web/index.js +637 -0
  33. package/dist/platforms/web/index.js.map +1 -0
  34. package/dist/storage/index.d.ts +35 -0
  35. package/dist/storage/index.d.ts.map +1 -0
  36. package/dist/storage/index.js +351 -0
  37. package/dist/storage/index.js.map +1 -0
  38. package/dist/tools/analysis/analyzeAppStructure.d.ts +9 -0
  39. package/dist/tools/analysis/analyzeAppStructure.d.ts.map +1 -0
  40. package/dist/tools/analysis/analyzeAppStructure.js +289 -0
  41. package/dist/tools/analysis/analyzeAppStructure.js.map +1 -0
  42. package/dist/tools/analysis/createTestPlan.d.ts +21 -0
  43. package/dist/tools/analysis/createTestPlan.d.ts.map +1 -0
  44. package/dist/tools/analysis/createTestPlan.js +214 -0
  45. package/dist/tools/analysis/createTestPlan.js.map +1 -0
  46. package/dist/tools/analysis/generateScenarios.d.ts +21 -0
  47. package/dist/tools/analysis/generateScenarios.d.ts.map +1 -0
  48. package/dist/tools/analysis/generateScenarios.js +567 -0
  49. package/dist/tools/analysis/generateScenarios.js.map +1 -0
  50. package/dist/tools/automation/cicdIntegration.d.ts +41 -0
  51. package/dist/tools/automation/cicdIntegration.d.ts.map +1 -0
  52. package/dist/tools/automation/cicdIntegration.js +825 -0
  53. package/dist/tools/automation/cicdIntegration.js.map +1 -0
  54. package/dist/tools/automation/generateReport.d.ts +16 -0
  55. package/dist/tools/automation/generateReport.d.ts.map +1 -0
  56. package/dist/tools/automation/generateReport.js +406 -0
  57. package/dist/tools/automation/generateReport.js.map +1 -0
  58. package/dist/tools/automation/runFullAutomation.d.ts +25 -0
  59. package/dist/tools/automation/runFullAutomation.d.ts.map +1 -0
  60. package/dist/tools/automation/runFullAutomation.js +296 -0
  61. package/dist/tools/automation/runFullAutomation.js.map +1 -0
  62. package/dist/tools/detection/detectLogicErrors.d.ts +18 -0
  63. package/dist/tools/detection/detectLogicErrors.d.ts.map +1 -0
  64. package/dist/tools/detection/detectLogicErrors.js +470 -0
  65. package/dist/tools/detection/detectLogicErrors.js.map +1 -0
  66. package/dist/tools/detection/detectMemoryLeaks.d.ts +23 -0
  67. package/dist/tools/detection/detectMemoryLeaks.d.ts.map +1 -0
  68. package/dist/tools/detection/detectMemoryLeaks.js +453 -0
  69. package/dist/tools/detection/detectMemoryLeaks.js.map +1 -0
  70. package/dist/tools/execution/runScenarioTest.d.ts +34 -0
  71. package/dist/tools/execution/runScenarioTest.d.ts.map +1 -0
  72. package/dist/tools/execution/runScenarioTest.js +334 -0
  73. package/dist/tools/execution/runScenarioTest.js.map +1 -0
  74. package/dist/tools/execution/runSimulation.d.ts +17 -0
  75. package/dist/tools/execution/runSimulation.d.ts.map +1 -0
  76. package/dist/tools/execution/runSimulation.js +250 -0
  77. package/dist/tools/execution/runSimulation.js.map +1 -0
  78. package/dist/tools/execution/runStressTest.d.ts +52 -0
  79. package/dist/tools/execution/runStressTest.d.ts.map +1 -0
  80. package/dist/tools/execution/runStressTest.js +176 -0
  81. package/dist/tools/execution/runStressTest.js.map +1 -0
  82. package/dist/tools/fixing/applyFix.d.ts +44 -0
  83. package/dist/tools/fixing/applyFix.d.ts.map +1 -0
  84. package/dist/tools/fixing/applyFix.js +399 -0
  85. package/dist/tools/fixing/applyFix.js.map +1 -0
  86. package/dist/tools/fixing/confirmFix.d.ts +31 -0
  87. package/dist/tools/fixing/confirmFix.d.ts.map +1 -0
  88. package/dist/tools/fixing/confirmFix.js +136 -0
  89. package/dist/tools/fixing/confirmFix.js.map +1 -0
  90. package/dist/tools/fixing/suggestFixes.d.ts +23 -0
  91. package/dist/tools/fixing/suggestFixes.d.ts.map +1 -0
  92. package/dist/tools/fixing/suggestFixes.js +349 -0
  93. package/dist/tools/fixing/suggestFixes.js.map +1 -0
  94. package/dist/types.d.ts +322 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +6 -0
  97. package/dist/types.js.map +1 -0
  98. package/dist/utils/codeParser.d.ts +12 -0
  99. package/dist/utils/codeParser.d.ts.map +1 -0
  100. package/dist/utils/codeParser.js +487 -0
  101. package/dist/utils/codeParser.js.map +1 -0
  102. 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"}