@sun-asterisk/sungen 1.0.7 → 1.0.9
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 +15 -3
- package/dist/generators/cli.js +1 -1
- package/dist/generators/scaffold-generator/index.d.ts +0 -5
- package/dist/generators/scaffold-generator/index.d.ts.map +1 -1
- package/dist/generators/scaffold-generator/index.js +17 -22
- package/dist/generators/scaffold-generator/index.js.map +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
- package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +1 -1
- package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
- package/dist/generators/test-generator/template-engine.js +3 -0
- package/dist/generators/test-generator/template-engine.js.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.d.ts +8 -0
- package/dist/generators/test-generator/utils/data-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/data-resolver.js +29 -4
- package/dist/generators/test-generator/utils/data-resolver.js.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.d.ts +15 -0
- package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
- package/dist/generators/test-generator/utils/selector-resolver.js +318 -31
- package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
- package/dist/input/cli-adapter.js +1 -1
- package/dist/orchestrator/pipeline.d.ts.map +1 -1
- package/dist/orchestrator/pipeline.js +1 -0
- package/dist/orchestrator/pipeline.js.map +1 -1
- package/dist/orchestrator/project-initializer.d.ts.map +1 -1
- package/dist/orchestrator/project-initializer.js +1 -0
- package/dist/orchestrator/project-initializer.js.map +1 -1
- package/dist/orchestrator/screen-manager.d.ts +8 -0
- package/dist/orchestrator/screen-manager.d.ts.map +1 -1
- package/dist/orchestrator/screen-manager.js +87 -13
- package/dist/orchestrator/screen-manager.js.map +1 -1
- package/package.json +1 -1
- package/src/generators/cli.ts +1 -1
- package/src/generators/scaffold-generator/index.ts +17 -26
- package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
- package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +1 -1
- package/src/generators/test-generator/template-engine.ts +4 -0
- package/src/generators/test-generator/utils/data-resolver.ts +34 -4
- package/src/generators/test-generator/utils/selector-resolver.ts +366 -36
- package/src/input/cli-adapter.ts +1 -1
- package/src/orchestrator/pipeline.ts +1 -0
- package/src/orchestrator/project-initializer.ts +1 -0
- package/src/orchestrator/screen-manager.ts +90 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-initializer.d.ts","sourceRoot":"","sources":["../../src/orchestrator/project-initializer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAgB;;IAMpC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,eAAe;
|
|
1
|
+
{"version":3,"file":"project-initializer.d.ts","sourceRoot":"","sources":["../../src/orchestrator/project-initializer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,YAAY,CAAgB;;IAMpC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmBzB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,eAAe;IA8BvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAapB;;OAEG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAoFnC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;CA2D1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-initializer.js","sourceRoot":"","sources":["../../src/orchestrator/project-initializer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"project-initializer.js","sourceRoot":"","sources":["../../src/orchestrator/project-initializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,14 @@ export declare class ScreenManager {
|
|
|
39
39
|
* Generate test data YAML template
|
|
40
40
|
*/
|
|
41
41
|
private generateTestDataTemplate;
|
|
42
|
+
/**
|
|
43
|
+
* Generate selector override YAML template (empty with guidelines)
|
|
44
|
+
*/
|
|
45
|
+
private generateSelectorOverrideTemplate;
|
|
46
|
+
/**
|
|
47
|
+
* Generate test-data override YAML template (empty with guidelines)
|
|
48
|
+
*/
|
|
49
|
+
private generateTestDataOverrideTemplate;
|
|
42
50
|
/**
|
|
43
51
|
* Display success message with next steps
|
|
44
52
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-manager.d.ts","sourceRoot":"","sources":["../../src/orchestrator/screen-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAS;;IAO3B;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAkGtD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAY/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoB/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkChC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkBhC;;OAEG;IACH,OAAO,CAAC,cAAc;
|
|
1
|
+
{"version":3,"file":"screen-manager.d.ts","sourceRoot":"","sources":["../../src/orchestrator/screen-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,UAAU,CAAS;;IAO3B;;OAEG;IACG,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAkGtD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAc1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAY/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoB/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkChC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAkBhC;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAiCxC;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAkCxC;;OAEG;IACH,OAAO,CAAC,cAAc;CAoBvB"}
|
|
@@ -65,8 +65,8 @@ class ScreenManager {
|
|
|
65
65
|
const testDataDir = path.join(screenDir, 'test-data');
|
|
66
66
|
// File paths
|
|
67
67
|
const featurePath = path.join(featuresDir, `${filename}.feature`);
|
|
68
|
-
const
|
|
69
|
-
const
|
|
68
|
+
const selectorOverridePath = path.join(selectorsDir, `${filename}.override.yaml`);
|
|
69
|
+
const testDataOverridePath = path.join(testDataDir, `${filename}.override.yaml`);
|
|
70
70
|
// Smart behavior: Create dirs only if first file
|
|
71
71
|
const isFirstFile = !fs.existsSync(screenDir);
|
|
72
72
|
if (isFirstFile) {
|
|
@@ -108,23 +108,23 @@ class ScreenManager {
|
|
|
108
108
|
console.error(` ${error instanceof Error ? error.message : String(error)}`);
|
|
109
109
|
process.exit(1);
|
|
110
110
|
}
|
|
111
|
-
// Generate and write selector file
|
|
112
|
-
const
|
|
111
|
+
// Generate and write selector override file (NOT base file)
|
|
112
|
+
const selectorOverrideContent = this.generateSelectorOverrideTemplate(filename);
|
|
113
113
|
try {
|
|
114
|
-
fs.writeFileSync(
|
|
114
|
+
fs.writeFileSync(selectorOverridePath, selectorOverrideContent, 'utf-8');
|
|
115
115
|
}
|
|
116
116
|
catch (error) {
|
|
117
|
-
console.error(`❌ Error: Failed to create selector file at ${
|
|
117
|
+
console.error(`❌ Error: Failed to create selector override file at ${selectorOverridePath}`);
|
|
118
118
|
console.error(` ${error instanceof Error ? error.message : String(error)}`);
|
|
119
119
|
process.exit(1);
|
|
120
120
|
}
|
|
121
|
-
// Generate and write test data file
|
|
122
|
-
const
|
|
121
|
+
// Generate and write test data override file (NOT base file)
|
|
122
|
+
const testDataOverrideContent = this.generateTestDataOverrideTemplate(filename);
|
|
123
123
|
try {
|
|
124
|
-
fs.writeFileSync(
|
|
124
|
+
fs.writeFileSync(testDataOverridePath, testDataOverrideContent, 'utf-8');
|
|
125
125
|
}
|
|
126
126
|
catch (error) {
|
|
127
|
-
console.error(`❌ Error: Failed to create test data file at ${
|
|
127
|
+
console.error(`❌ Error: Failed to create test data override file at ${testDataOverridePath}`);
|
|
128
128
|
console.error(` ${error instanceof Error ? error.message : String(error)}`);
|
|
129
129
|
process.exit(1);
|
|
130
130
|
}
|
|
@@ -247,6 +247,77 @@ ${screenPath ? `# Path: ${screenPath}` : '# Path: (not specified - update as nee
|
|
|
247
247
|
# Next steps:
|
|
248
248
|
# 1. Add test data variables referenced in your feature scenarios
|
|
249
249
|
# 2. Use {{variable}} syntax in your feature files to reference these values
|
|
250
|
+
`;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Generate selector override YAML template (empty with guidelines)
|
|
254
|
+
*/
|
|
255
|
+
generateSelectorOverrideTemplate(filename) {
|
|
256
|
+
return `# ${filename}.override.yaml - User Override File
|
|
257
|
+
# This file will NEVER be modified by 'sungen map' command
|
|
258
|
+
# Use this to override auto-generated selectors or add custom ones
|
|
259
|
+
#
|
|
260
|
+
# Format:
|
|
261
|
+
# element.key:
|
|
262
|
+
# selector: "css-selector-here" # Optional: custom CSS selector
|
|
263
|
+
# type: role|testid|placeholder|label|text
|
|
264
|
+
# value: "value-for-type"
|
|
265
|
+
# name: "Display Name" # Optional
|
|
266
|
+
# nth: 0 # Optional: element index
|
|
267
|
+
#
|
|
268
|
+
# Examples:
|
|
269
|
+
# email.field:
|
|
270
|
+
# type: testid
|
|
271
|
+
# value: "login-email"
|
|
272
|
+
#
|
|
273
|
+
# submit.button:
|
|
274
|
+
# type: role
|
|
275
|
+
# value: "button"
|
|
276
|
+
# name: "Sign In"
|
|
277
|
+
#
|
|
278
|
+
# custom.element:
|
|
279
|
+
# selector: "#my-custom-id"
|
|
280
|
+
# type: placeholder
|
|
281
|
+
# value: "Enter text"
|
|
282
|
+
#
|
|
283
|
+
# Leave empty if no overrides needed
|
|
284
|
+
# Base selectors will be auto-generated by: sungen map --screen ${filename}
|
|
285
|
+
`;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Generate test-data override YAML template (empty with guidelines)
|
|
289
|
+
*/
|
|
290
|
+
generateTestDataOverrideTemplate(filename) {
|
|
291
|
+
return `# ${filename}.override.yaml - User Override File
|
|
292
|
+
# This file will NEVER be modified by 'sungen map' command
|
|
293
|
+
# Use this to override auto-generated test data or add custom data
|
|
294
|
+
#
|
|
295
|
+
# Format:
|
|
296
|
+
# variable_name: "value"
|
|
297
|
+
#
|
|
298
|
+
# nested:
|
|
299
|
+
# variable: "value"
|
|
300
|
+
#
|
|
301
|
+
# array_example:
|
|
302
|
+
# - "item1"
|
|
303
|
+
# - "item2"
|
|
304
|
+
#
|
|
305
|
+
# Examples:
|
|
306
|
+
# # Simple string override
|
|
307
|
+
# valid_email: "custom@example.com"
|
|
308
|
+
#
|
|
309
|
+
# # Nested object override
|
|
310
|
+
# api:
|
|
311
|
+
# url: "https://staging.example.com"
|
|
312
|
+
# timeout: 5000
|
|
313
|
+
#
|
|
314
|
+
# # Array override
|
|
315
|
+
# test_users:
|
|
316
|
+
# - "user1@example.com"
|
|
317
|
+
# - "user2@example.com"
|
|
318
|
+
#
|
|
319
|
+
# Leave empty if no overrides needed
|
|
320
|
+
# Base test data will be auto-generated by: sungen map --screen ${filename}
|
|
250
321
|
`;
|
|
251
322
|
}
|
|
252
323
|
/**
|
|
@@ -258,12 +329,15 @@ ${screenPath ? `# Path: ${screenPath}` : '# Path: (not specified - update as nee
|
|
|
258
329
|
console.log(`Path: ${screenDir}\n`);
|
|
259
330
|
console.log('Created files:');
|
|
260
331
|
console.log(` 📄 ${path.join(screenDir, 'features', `${filename}.feature`)}`);
|
|
261
|
-
console.log(`
|
|
262
|
-
console.log(`
|
|
332
|
+
console.log(` 📝 ${path.join(screenDir, 'selectors', `${filename}.override.yaml`)} (user-editable)`);
|
|
333
|
+
console.log(` 📝 ${path.join(screenDir, 'test-data', `${filename}.override.yaml`)} (user-editable)\n`);
|
|
334
|
+
console.log('📌 Note: Override files will NEVER be modified by automation');
|
|
335
|
+
console.log(' Edit these files to customize selectors and test data\n');
|
|
263
336
|
console.log('Next steps:');
|
|
264
337
|
console.log(` 1. Edit the Gherkin feature file to define test scenarios`);
|
|
265
338
|
console.log(` 2. Run: sungen map --screen ${name}`);
|
|
266
|
-
console.log(` This will generate selector
|
|
339
|
+
console.log(` This will generate BASE selector and test-data files`);
|
|
340
|
+
console.log(` (Override files remain untouched)\n`);
|
|
267
341
|
console.log('Documentation: https://github.com/sun-asterisk/sungen');
|
|
268
342
|
}
|
|
269
343
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-manager.js","sourceRoot":"","sources":["../../src/orchestrator/screen-manager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAQ7B,MAAa,aAAa;IAIxB;QACE,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,OAAsB;QACpC,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC;QAEtD,uBAAuB;QACvB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEtC,sCAAsC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEzD,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI;YAC3B,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC;YAC5C,CAAC,CAAC,UAAU,CAAC;QAEf,6BAA6B;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAEtD,aAAa;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,UAAU,CAAC,CAAC;QAClE,MAAM,
|
|
1
|
+
{"version":3,"file":"screen-manager.js","sourceRoot":"","sources":["../../src/orchestrator/screen-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/generators/cli.ts
CHANGED
|
@@ -52,7 +52,7 @@ const program = new Command();
|
|
|
52
52
|
program
|
|
53
53
|
.name('qa-generator')
|
|
54
54
|
.description('AI-Native QA Selector DSL Generator')
|
|
55
|
-
.version('1.0.
|
|
55
|
+
.version('1.0.9');
|
|
56
56
|
|
|
57
57
|
// ============================================================================
|
|
58
58
|
// Command: discover
|
|
@@ -15,7 +15,6 @@ export interface ScaffoldElement {
|
|
|
15
15
|
value: string;
|
|
16
16
|
name?: string; // For role type (accessible name)
|
|
17
17
|
nth: number;
|
|
18
|
-
withValue?: string; // For assertions with dynamic value: {{variable}}
|
|
19
18
|
}
|
|
20
19
|
|
|
21
20
|
export interface ScaffoldResult {
|
|
@@ -48,7 +47,6 @@ interface ExtractedElement {
|
|
|
48
47
|
targetType: string; // Target type from Gherkin: button, link, field, radio, dropdown, text, etc.
|
|
49
48
|
lineText: string; // Full line for context
|
|
50
49
|
nth: number; // Index from "field 1", "button 2", etc. (0 = no index specified)
|
|
51
|
-
withValue?: string; // Value ref for assertions with {{value}}
|
|
52
50
|
}
|
|
53
51
|
|
|
54
52
|
export class ScaffoldGenerator {
|
|
@@ -101,9 +99,6 @@ export class ScaffoldGenerator {
|
|
|
101
99
|
const nth = this.extractNthIndex(afterElement);
|
|
102
100
|
const targetType = this.extractTargetType(afterElement, action);
|
|
103
101
|
|
|
104
|
-
// Extract {{value}} for assertions like "see [X] text with {{value}}"
|
|
105
|
-
const withValue = this.extractWithValue(afterElement);
|
|
106
|
-
|
|
107
102
|
elements.push({
|
|
108
103
|
rawText,
|
|
109
104
|
key,
|
|
@@ -111,7 +106,6 @@ export class ScaffoldGenerator {
|
|
|
111
106
|
targetType,
|
|
112
107
|
lineText: trimmedLine,
|
|
113
108
|
nth,
|
|
114
|
-
withValue,
|
|
115
109
|
});
|
|
116
110
|
}
|
|
117
111
|
}
|
|
@@ -170,17 +164,6 @@ export class ScaffoldGenerator {
|
|
|
170
164
|
}
|
|
171
165
|
}
|
|
172
166
|
|
|
173
|
-
/**
|
|
174
|
-
* Extract {{value}} from "with {{value}}" pattern
|
|
175
|
-
*/
|
|
176
|
-
private extractWithValue(text: string): string | undefined {
|
|
177
|
-
const withValueMatch = text.match(/\bwith\s+\{\{([^}]+)\}\}/i);
|
|
178
|
-
if (withValueMatch) {
|
|
179
|
-
return withValueMatch[1].trim();
|
|
180
|
-
}
|
|
181
|
-
return undefined;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
167
|
/**
|
|
185
168
|
* Extract nth index from text after element reference
|
|
186
169
|
* e.g., " field 1 with" -> 1, " button 2" -> 2, " text" -> 0
|
|
@@ -277,7 +260,7 @@ export class ScaffoldGenerator {
|
|
|
277
260
|
* Create a scaffold element based on the action type and target type
|
|
278
261
|
*/
|
|
279
262
|
private createScaffoldElement(element: ExtractedElement): ScaffoldElement {
|
|
280
|
-
const { nth, targetType
|
|
263
|
+
const { nth, targetType } = element;
|
|
281
264
|
|
|
282
265
|
switch (element.action) {
|
|
283
266
|
case 'fill':
|
|
@@ -312,17 +295,13 @@ export class ScaffoldGenerator {
|
|
|
312
295
|
};
|
|
313
296
|
|
|
314
297
|
case 'see':
|
|
315
|
-
// For assertions
|
|
316
|
-
|
|
298
|
+
// For assertions
|
|
299
|
+
return {
|
|
317
300
|
selector: '',
|
|
318
301
|
type: 'text',
|
|
319
302
|
value: element.rawText,
|
|
320
303
|
nth,
|
|
321
304
|
};
|
|
322
|
-
if (withValue) {
|
|
323
|
-
seeElement.withValue = withValue;
|
|
324
|
-
}
|
|
325
|
-
return seeElement;
|
|
326
305
|
|
|
327
306
|
case 'select':
|
|
328
307
|
// Determine role based on target type (radio, dropdown/combobox, checkbox)
|
|
@@ -544,20 +523,24 @@ export class ScaffoldGenerator {
|
|
|
544
523
|
|
|
545
524
|
// Check if files exist
|
|
546
525
|
const selectorsPath = path.join(selectorsDir, `${filename}.yaml`);
|
|
526
|
+
const selectorsOverridePath = path.join(selectorsDir, `${filename}.override.yaml`);
|
|
547
527
|
const selectorsExists = fs.existsSync(selectorsPath);
|
|
548
528
|
|
|
549
529
|
const testDataPath = path.join(testDataDir, `${filename}.yaml`);
|
|
530
|
+
const testDataOverridePath = path.join(testDataDir, `${filename}.override.yaml`);
|
|
550
531
|
const testDataExists = fs.existsSync(testDataPath);
|
|
551
532
|
|
|
552
|
-
// Write selectors YAML
|
|
533
|
+
// Write selectors YAML (BASE ONLY - never touch override files)
|
|
553
534
|
if (!selectorsExists || forceOverwrite) {
|
|
554
535
|
this.writeSelectorsYaml(selectorScaffold, selectorsPath, filename);
|
|
555
536
|
}
|
|
537
|
+
// Override file is NEVER touched by map command
|
|
556
538
|
|
|
557
|
-
// Write test-data YAML
|
|
539
|
+
// Write test-data YAML (BASE ONLY - never touch override files)
|
|
558
540
|
if (!testDataExists || forceOverwrite) {
|
|
559
541
|
this.writeTestDataYaml(testDataScaffold, testDataPath, filename);
|
|
560
542
|
}
|
|
543
|
+
// Override file is NEVER touched by map command
|
|
561
544
|
|
|
562
545
|
results.push({
|
|
563
546
|
featureFile: filename,
|
|
@@ -649,6 +632,10 @@ export class ScaffoldGenerator {
|
|
|
649
632
|
const getDisplayValue = (e: ScaffoldElement) => e.name || e.value;
|
|
650
633
|
|
|
651
634
|
const header = `# ${this.capitalizeFirst(screenName)} Screen Selectors (Auto-generated)
|
|
635
|
+
# ⚠️ AUTO-GENERATED - Do not edit directly
|
|
636
|
+
# To override values, edit ${screenName}.override.yaml
|
|
637
|
+
# Manual edits to this file will be lost on regeneration
|
|
638
|
+
#
|
|
652
639
|
# Reference in features: ${Object.values(scaffold).map(e => `[${getDisplayValue(e)}]`).join(', ')}
|
|
653
640
|
|
|
654
641
|
`;
|
|
@@ -668,6 +655,10 @@ export class ScaffoldGenerator {
|
|
|
668
655
|
*/
|
|
669
656
|
private writeTestDataYaml(testData: TestDataResult, outputPath: string, screenName: string): void {
|
|
670
657
|
const header = `# ${this.capitalizeFirst(screenName)} Screen Test Data (Auto-generated)
|
|
658
|
+
# ⚠️ AUTO-GENERATED - Consider editing only the override file
|
|
659
|
+
# To override values, copy to ${screenName}.override.yaml
|
|
660
|
+
# Manual edits to this file will be lost on regeneration
|
|
661
|
+
#
|
|
671
662
|
# Reference in features using {{variable}} syntax
|
|
672
663
|
|
|
673
664
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
await expect(page.getByText(/{{escapeQuotes value}}.*{{dataValue}}/)).toBeVisible();
|
|
1
|
+
await expect(page.getByText(/{{escapeQuotes value}}.*{{escapeRegex dataValue}}/)).toBeVisible();
|
package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{{#if (eq strategy 'testid')}}page.getByTestId('{{value}}'){{else if (eq strategy 'role')}}page.getByRole('{{role}}', { name: '{{escapeQuotes name}}' }){{else if (eq strategy 'placeholder')}}page.getByPlaceholder('{{escapeQuotes value}}'){{else if (eq strategy 'label')}}page.getByLabel('{{escapeQuotes value}}'){{else if (eq strategy 'text')}}page.getByText('{{escapeQuotes value}}'){{else if (eq strategy 'id')}}page.locator('{{selector}}'){{else}}page.locator('{{escapeQuotes selector}}'){{/if}}{{#if (
|
|
1
|
+
{{#if (eq strategy 'testid')}}page.getByTestId('{{value}}'){{else if (eq strategy 'role')}}page.getByRole('{{role}}', { name: '{{escapeQuotes name}}' }){{else if (eq strategy 'placeholder')}}page.getByPlaceholder('{{escapeQuotes value}}'){{else if (eq strategy 'label')}}page.getByLabel('{{escapeQuotes value}}'){{else if (eq strategy 'text')}}page.getByText('{{escapeQuotes value}}'){{else if (eq strategy 'id')}}page.locator('{{selector}}'){{else}}page.locator('{{escapeQuotes selector}}'){{/if}}{{#if (gt nth 0)}}.nth({{subtract nth 1}}){{/if}}
|
|
@@ -24,6 +24,10 @@ export class TemplateEngine {
|
|
|
24
24
|
return text.replace(/'/g, "\\'");
|
|
25
25
|
});
|
|
26
26
|
|
|
27
|
+
Handlebars.registerHelper('escapeRegex', function(text: string) {
|
|
28
|
+
return text.replace(/[.*+?^${}()|[\]\\/]/g, '\\$&');
|
|
29
|
+
});
|
|
30
|
+
|
|
27
31
|
// Comparison helpers for conditional logic
|
|
28
32
|
Handlebars.registerHelper('eq', function(a: any, b: any) {
|
|
29
33
|
return a === b;
|
|
@@ -5,6 +5,11 @@ import yaml from 'yaml';
|
|
|
5
5
|
/**
|
|
6
6
|
* DataResolver - Resolves data references to actual values
|
|
7
7
|
* at generation time (not runtime)
|
|
8
|
+
*
|
|
9
|
+
* Supports override files with priority:
|
|
10
|
+
* 1. .override.yaml (highest - user customizations)
|
|
11
|
+
* 2. -override.yaml (legacy - backward compat)
|
|
12
|
+
* 3. .yaml (lowest - auto-generated base)
|
|
8
13
|
*/
|
|
9
14
|
export class DataResolver {
|
|
10
15
|
private dataCache = new Map<string, any>();
|
|
@@ -108,12 +113,28 @@ export class DataResolver {
|
|
|
108
113
|
|
|
109
114
|
/**
|
|
110
115
|
* Find data file path (checks new screen-based structure)
|
|
116
|
+
* Priority: .override.yaml > -override.yaml > base .yaml
|
|
117
|
+
* Skips files that exist but contain no data (only comments)
|
|
111
118
|
*/
|
|
112
119
|
private findDataFilePath(fileName: string): string | null {
|
|
113
120
|
const possiblePaths = this.getPossibleDataPaths(fileName);
|
|
114
121
|
|
|
115
122
|
for (const p of possiblePaths) {
|
|
116
123
|
if (fs.existsSync(p)) {
|
|
124
|
+
// Check if file has actual data (not just comments/empty)
|
|
125
|
+
const content = fs.readFileSync(p, 'utf-8');
|
|
126
|
+
const data = yaml.parse(content);
|
|
127
|
+
|
|
128
|
+
// Skip if file is empty or only contains null/undefined
|
|
129
|
+
if (data === null || data === undefined || (typeof data === 'object' && Object.keys(data).length === 0)) {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Emit deprecation warning for old -override.yaml pattern
|
|
134
|
+
if (p.includes('-override.yaml')) {
|
|
135
|
+
console.warn(`⚠️ Deprecated: ${path.basename(p)}`);
|
|
136
|
+
console.warn(` Rename to: ${fileName}.override.yaml for better compatibility`);
|
|
137
|
+
}
|
|
117
138
|
return p;
|
|
118
139
|
}
|
|
119
140
|
}
|
|
@@ -123,16 +144,25 @@ export class DataResolver {
|
|
|
123
144
|
|
|
124
145
|
/**
|
|
125
146
|
* Get list of possible data file paths (priority order)
|
|
147
|
+
* Priority: .override.yaml > -override.yaml > base .yaml
|
|
126
148
|
*/
|
|
127
149
|
private getPossibleDataPaths(fileName: string): string[] {
|
|
128
150
|
const paths: string[] = [];
|
|
129
151
|
|
|
130
|
-
// New structure: qa/screens/{screenName}/test-data/
|
|
152
|
+
// New structure: qa/screens/{screenName}/test-data/
|
|
131
153
|
if (this.screenName) {
|
|
132
154
|
const cwd = process.cwd();
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
155
|
+
const basePath = path.join(cwd, 'qa', 'screens', this.screenName, 'test-data');
|
|
156
|
+
|
|
157
|
+
// Priority 1: New .override.yaml pattern (highest)
|
|
158
|
+
paths.push(path.join(basePath, `${fileName}.override.yaml`));
|
|
159
|
+
|
|
160
|
+
// Priority 2: Old -override.yaml pattern (backward compat)
|
|
161
|
+
paths.push(path.join(basePath, `${fileName}-override.yaml`));
|
|
162
|
+
|
|
163
|
+
// Priority 3: Base file (lowest)
|
|
164
|
+
paths.push(path.join(basePath, `${fileName}.yaml`));
|
|
165
|
+
paths.push(path.join(basePath, `${fileName}.yml`));
|
|
136
166
|
}
|
|
137
167
|
|
|
138
168
|
return paths;
|