@sun-asterisk/sungen 2.4.5 → 2.5.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 (201) hide show
  1. package/dist/cli/commands/delivery.d.ts +7 -0
  2. package/dist/cli/commands/delivery.d.ts.map +1 -0
  3. package/dist/cli/commands/delivery.js +348 -0
  4. package/dist/cli/commands/delivery.js.map +1 -0
  5. package/dist/cli/commands/generate.d.ts.map +1 -1
  6. package/dist/cli/commands/generate.js +2 -0
  7. package/dist/cli/commands/generate.js.map +1 -1
  8. package/dist/cli/commands/update.d.ts.map +1 -1
  9. package/dist/cli/commands/update.js +64 -1
  10. package/dist/cli/commands/update.js.map +1 -1
  11. package/dist/cli/index.js +4 -2
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/exporters/csv-exporter.d.ts +32 -0
  14. package/dist/exporters/csv-exporter.d.ts.map +1 -0
  15. package/dist/exporters/csv-exporter.js +311 -0
  16. package/dist/exporters/csv-exporter.js.map +1 -0
  17. package/dist/exporters/feature-parser.d.ts +48 -0
  18. package/dist/exporters/feature-parser.d.ts.map +1 -0
  19. package/dist/exporters/feature-parser.js +178 -0
  20. package/dist/exporters/feature-parser.js.map +1 -0
  21. package/dist/exporters/package-info.d.ts +9 -0
  22. package/dist/exporters/package-info.d.ts.map +1 -0
  23. package/dist/exporters/package-info.js +73 -0
  24. package/dist/exporters/package-info.js.map +1 -0
  25. package/dist/exporters/playwright-report-parser.d.ts +21 -0
  26. package/dist/exporters/playwright-report-parser.d.ts.map +1 -0
  27. package/dist/exporters/playwright-report-parser.js +184 -0
  28. package/dist/exporters/playwright-report-parser.js.map +1 -0
  29. package/dist/exporters/scenario-merger.d.ts +21 -0
  30. package/dist/exporters/scenario-merger.d.ts.map +1 -0
  31. package/dist/exporters/scenario-merger.js +51 -0
  32. package/dist/exporters/scenario-merger.js.map +1 -0
  33. package/dist/exporters/spec-parser.d.ts +20 -0
  34. package/dist/exporters/spec-parser.d.ts.map +1 -0
  35. package/dist/exporters/spec-parser.js +259 -0
  36. package/dist/exporters/spec-parser.js.map +1 -0
  37. package/dist/exporters/step-formatter.d.ts +32 -0
  38. package/dist/exporters/step-formatter.d.ts.map +1 -0
  39. package/dist/exporters/step-formatter.js +76 -0
  40. package/dist/exporters/step-formatter.js.map +1 -0
  41. package/dist/exporters/test-data-resolver.d.ts +20 -0
  42. package/dist/exporters/test-data-resolver.d.ts.map +1 -0
  43. package/dist/exporters/test-data-resolver.js +96 -0
  44. package/dist/exporters/test-data-resolver.js.map +1 -0
  45. package/dist/exporters/types.d.ts +104 -0
  46. package/dist/exporters/types.d.ts.map +1 -0
  47. package/dist/exporters/types.js +6 -0
  48. package/dist/exporters/types.js.map +1 -0
  49. package/dist/exporters/xlsx-exporter.d.ts +19 -0
  50. package/dist/exporters/xlsx-exporter.d.ts.map +1 -0
  51. package/dist/exporters/xlsx-exporter.js +309 -0
  52. package/dist/exporters/xlsx-exporter.js.map +1 -0
  53. package/dist/generators/gherkin-parser/index.d.ts +1 -0
  54. package/dist/generators/gherkin-parser/index.d.ts.map +1 -1
  55. package/dist/generators/gherkin-parser/index.js +3 -0
  56. package/dist/generators/gherkin-parser/index.js.map +1 -1
  57. package/dist/generators/test-generator/adapters/adapter-interface.d.ts +29 -1
  58. package/dist/generators/test-generator/adapters/adapter-interface.d.ts.map +1 -1
  59. package/dist/generators/test-generator/adapters/playwright/playwright-adapter.d.ts +21 -1
  60. package/dist/generators/test-generator/adapters/playwright/playwright-adapter.d.ts.map +1 -1
  61. package/dist/generators/test-generator/adapters/playwright/playwright-adapter.js +11 -2
  62. package/dist/generators/test-generator/adapters/playwright/playwright-adapter.js.map +1 -1
  63. package/dist/generators/test-generator/adapters/playwright/templates/after-all.hbs +8 -0
  64. package/dist/generators/test-generator/adapters/playwright/templates/after-each.hbs +8 -0
  65. package/dist/generators/test-generator/adapters/playwright/templates/before-all.hbs +8 -0
  66. package/dist/generators/test-generator/adapters/playwright/templates/imports.hbs +3 -0
  67. package/dist/generators/test-generator/adapters/playwright/templates/test-file.hbs +24 -0
  68. package/dist/generators/test-generator/code-generator.d.ts +2 -0
  69. package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
  70. package/dist/generators/test-generator/code-generator.js +109 -12
  71. package/dist/generators/test-generator/code-generator.js.map +1 -1
  72. package/dist/generators/test-generator/step-mapper.d.ts +1 -0
  73. package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
  74. package/dist/generators/test-generator/step-mapper.js +1 -1
  75. package/dist/generators/test-generator/step-mapper.js.map +1 -1
  76. package/dist/generators/test-generator/template-engine.d.ts +29 -1
  77. package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
  78. package/dist/generators/test-generator/template-engine.js +11 -2
  79. package/dist/generators/test-generator/template-engine.js.map +1 -1
  80. package/dist/generators/test-generator/utils/data-resolver.d.ts +11 -2
  81. package/dist/generators/test-generator/utils/data-resolver.d.ts.map +1 -1
  82. package/dist/generators/test-generator/utils/data-resolver.js +36 -25
  83. package/dist/generators/test-generator/utils/data-resolver.js.map +1 -1
  84. package/dist/generators/test-generator/utils/runtime-data-transformer.d.ts +7 -0
  85. package/dist/generators/test-generator/utils/runtime-data-transformer.d.ts.map +1 -0
  86. package/dist/generators/test-generator/utils/runtime-data-transformer.js +42 -0
  87. package/dist/generators/test-generator/utils/runtime-data-transformer.js.map +1 -0
  88. package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
  89. package/dist/generators/test-generator/utils/selector-resolver.js +26 -0
  90. package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
  91. package/dist/generators/types.d.ts +1 -0
  92. package/dist/generators/types.d.ts.map +1 -1
  93. package/dist/generators/types.js.map +1 -1
  94. package/dist/orchestrator/ai-rules-updater.d.ts.map +1 -1
  95. package/dist/orchestrator/ai-rules-updater.js +12 -0
  96. package/dist/orchestrator/ai-rules-updater.js.map +1 -1
  97. package/dist/orchestrator/project-initializer.d.ts +21 -1
  98. package/dist/orchestrator/project-initializer.d.ts.map +1 -1
  99. package/dist/orchestrator/project-initializer.js +158 -74
  100. package/dist/orchestrator/project-initializer.js.map +1 -1
  101. package/dist/orchestrator/screen-manager.d.ts.map +1 -1
  102. package/dist/orchestrator/screen-manager.js +2 -0
  103. package/dist/orchestrator/screen-manager.js.map +1 -1
  104. package/dist/orchestrator/templates/ai-instructions/claude-cmd-add-screen.md +15 -17
  105. package/dist/orchestrator/templates/ai-instructions/claude-cmd-create-test.md +7 -5
  106. package/dist/orchestrator/templates/ai-instructions/claude-cmd-delivery.md +71 -0
  107. package/dist/orchestrator/templates/ai-instructions/claude-cmd-run-test.md +28 -1
  108. package/dist/orchestrator/templates/ai-instructions/claude-config.md +23 -4
  109. package/dist/orchestrator/templates/ai-instructions/claude-skill-capture-figma.md +142 -0
  110. package/dist/orchestrator/templates/ai-instructions/claude-skill-capture-live.md +100 -0
  111. package/dist/orchestrator/templates/ai-instructions/claude-skill-capture-local.md +73 -0
  112. package/dist/orchestrator/templates/ai-instructions/claude-skill-delivery.md +103 -0
  113. package/dist/orchestrator/templates/ai-instructions/claude-skill-gherkin-syntax.md +68 -13
  114. package/dist/orchestrator/templates/ai-instructions/claude-skill-selector-keys.md +22 -0
  115. package/dist/orchestrator/templates/ai-instructions/claude-skill-tc-generation.md +54 -3
  116. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-add-screen.md +13 -15
  117. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-create-test.md +6 -4
  118. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-delivery.md +71 -0
  119. package/dist/orchestrator/templates/ai-instructions/copilot-cmd-run-test.md +38 -14
  120. package/dist/orchestrator/templates/ai-instructions/copilot-config.md +23 -4
  121. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-figma.md +142 -0
  122. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-live.md +100 -0
  123. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-capture-local.md +73 -0
  124. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-delivery.md +103 -0
  125. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md +88 -13
  126. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-selector-keys.md +22 -0
  127. package/dist/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +54 -3
  128. package/dist/orchestrator/templates/playwright.config.d.ts.map +1 -1
  129. package/dist/orchestrator/templates/playwright.config.js +6 -1
  130. package/dist/orchestrator/templates/playwright.config.js.map +1 -1
  131. package/dist/orchestrator/templates/playwright.config.ts +6 -1
  132. package/dist/orchestrator/templates/specs-base.d.ts +12 -1
  133. package/dist/orchestrator/templates/specs-base.d.ts.map +1 -1
  134. package/dist/orchestrator/templates/specs-base.js +47 -5
  135. package/dist/orchestrator/templates/specs-base.js.map +1 -1
  136. package/dist/orchestrator/templates/specs-base.ts +65 -7
  137. package/dist/orchestrator/templates/specs-test-data.d.ts +14 -0
  138. package/dist/orchestrator/templates/specs-test-data.d.ts.map +1 -0
  139. package/dist/orchestrator/templates/specs-test-data.js +100 -0
  140. package/dist/orchestrator/templates/specs-test-data.js.map +1 -0
  141. package/dist/orchestrator/templates/specs-test-data.ts +66 -0
  142. package/package.json +2 -1
  143. package/src/cli/commands/delivery.ts +348 -0
  144. package/src/cli/commands/generate.ts +2 -0
  145. package/src/cli/commands/update.ts +84 -2
  146. package/src/cli/index.ts +4 -2
  147. package/src/exporters/csv-exporter.ts +304 -0
  148. package/src/exporters/feature-parser.ts +168 -0
  149. package/src/exporters/package-info.ts +35 -0
  150. package/src/exporters/playwright-report-parser.ts +168 -0
  151. package/src/exporters/scenario-merger.ts +63 -0
  152. package/src/exporters/spec-parser.ts +247 -0
  153. package/src/exporters/step-formatter.ts +80 -0
  154. package/src/exporters/test-data-resolver.ts +59 -0
  155. package/src/exporters/types.ts +112 -0
  156. package/src/exporters/xlsx-exporter.ts +301 -0
  157. package/src/generators/gherkin-parser/index.ts +4 -0
  158. package/src/generators/test-generator/adapters/adapter-interface.ts +12 -1
  159. package/src/generators/test-generator/adapters/playwright/playwright-adapter.ts +14 -2
  160. package/src/generators/test-generator/adapters/playwright/templates/after-all.hbs +8 -0
  161. package/src/generators/test-generator/adapters/playwright/templates/after-each.hbs +8 -0
  162. package/src/generators/test-generator/adapters/playwright/templates/before-all.hbs +8 -0
  163. package/src/generators/test-generator/adapters/playwright/templates/imports.hbs +3 -0
  164. package/src/generators/test-generator/adapters/playwright/templates/test-file.hbs +24 -0
  165. package/src/generators/test-generator/code-generator.ts +122 -13
  166. package/src/generators/test-generator/step-mapper.ts +2 -2
  167. package/src/generators/test-generator/template-engine.ts +28 -2
  168. package/src/generators/test-generator/utils/data-resolver.ts +45 -27
  169. package/src/generators/test-generator/utils/runtime-data-transformer.ts +51 -0
  170. package/src/generators/test-generator/utils/selector-resolver.ts +26 -0
  171. package/src/generators/types.ts +1 -0
  172. package/src/orchestrator/ai-rules-updater.ts +12 -0
  173. package/src/orchestrator/project-initializer.ts +187 -80
  174. package/src/orchestrator/screen-manager.ts +2 -0
  175. package/src/orchestrator/templates/ai-instructions/claude-cmd-add-screen.md +15 -17
  176. package/src/orchestrator/templates/ai-instructions/claude-cmd-create-test.md +7 -5
  177. package/src/orchestrator/templates/ai-instructions/claude-cmd-delivery.md +71 -0
  178. package/src/orchestrator/templates/ai-instructions/claude-cmd-run-test.md +28 -1
  179. package/src/orchestrator/templates/ai-instructions/claude-config.md +23 -4
  180. package/src/orchestrator/templates/ai-instructions/claude-skill-capture-figma.md +142 -0
  181. package/src/orchestrator/templates/ai-instructions/claude-skill-capture-live.md +100 -0
  182. package/src/orchestrator/templates/ai-instructions/claude-skill-capture-local.md +73 -0
  183. package/src/orchestrator/templates/ai-instructions/claude-skill-delivery.md +103 -0
  184. package/src/orchestrator/templates/ai-instructions/claude-skill-gherkin-syntax.md +68 -13
  185. package/src/orchestrator/templates/ai-instructions/claude-skill-selector-keys.md +22 -0
  186. package/src/orchestrator/templates/ai-instructions/claude-skill-tc-generation.md +54 -3
  187. package/src/orchestrator/templates/ai-instructions/copilot-cmd-add-screen.md +13 -15
  188. package/src/orchestrator/templates/ai-instructions/copilot-cmd-create-test.md +6 -4
  189. package/src/orchestrator/templates/ai-instructions/copilot-cmd-delivery.md +71 -0
  190. package/src/orchestrator/templates/ai-instructions/copilot-cmd-run-test.md +38 -14
  191. package/src/orchestrator/templates/ai-instructions/copilot-config.md +23 -4
  192. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-figma.md +142 -0
  193. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-live.md +100 -0
  194. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-capture-local.md +73 -0
  195. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-delivery.md +103 -0
  196. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-gherkin-syntax.md +88 -13
  197. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-selector-keys.md +22 -0
  198. package/src/orchestrator/templates/ai-instructions/github-skill-sungen-tc-generation.md +54 -3
  199. package/src/orchestrator/templates/playwright.config.ts +6 -1
  200. package/src/orchestrator/templates/specs-base.ts +65 -7
  201. package/src/orchestrator/templates/specs-test-data.ts +66 -0
@@ -0,0 +1,311 @@
1
+ "use strict";
2
+ /**
3
+ * Assemble CSV rows from merged scenarios + test data + playwright results.
4
+ * Outputs a CSV file matching the BM-2-901-13 test case template format.
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.buildTestCaseRows = buildTestCaseRows;
41
+ exports.buildSummary = buildSummary;
42
+ exports.renderCsv = renderCsv;
43
+ exports.writeCsv = writeCsv;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const package_info_1 = require("./package-info");
47
+ const feature_parser_1 = require("./feature-parser");
48
+ const step_formatter_1 = require("./step-formatter");
49
+ const test_data_resolver_1 = require("./test-data-resolver");
50
+ const playwright_report_parser_1 = require("./playwright-report-parser");
51
+ /**
52
+ * Build CSV test case rows from merged scenarios.
53
+ */
54
+ function buildTestCaseRows(input) {
55
+ const rows = [];
56
+ let fallbackIndex = 1;
57
+ for (const m of input.merged) {
58
+ const { vpId, category1 } = (0, feature_parser_1.splitVpAndName)(m.feature.name);
59
+ const tcId = (0, feature_parser_1.generateTcId)(input.screen, vpId, fallbackIndex);
60
+ if (!vpId)
61
+ fallbackIndex++;
62
+ const category2 = (0, feature_parser_1.mapVpToCategory2)(vpId);
63
+ const priority = (0, feature_parser_1.extractPriority)(m.feature.tags);
64
+ const testcaseType = (0, feature_parser_1.extractTestcaseType)(m.feature.tags);
65
+ const authRole = (0, feature_parser_1.extractAuthRole)(m.feature.tags);
66
+ // Prefer .spec.ts resolved comments for Steps/Expected if available
67
+ let steps;
68
+ let expectedResults;
69
+ let precondition;
70
+ if (m.spec) {
71
+ precondition = (0, step_formatter_1.formatPrecondition)(authRole, m.spec.precondition);
72
+ steps = (0, step_formatter_1.formatNumberedSteps)(m.spec.steps);
73
+ expectedResults = (0, step_formatter_1.formatNumberedSteps)(m.spec.expectations);
74
+ }
75
+ else {
76
+ // Fallback to .feature raw steps
77
+ precondition = (0, step_formatter_1.formatPrecondition)(authRole, m.feature.rawGivenSteps);
78
+ steps = (0, step_formatter_1.formatNumberedSteps)(m.feature.rawWhenSteps);
79
+ expectedResults = (0, step_formatter_1.formatNumberedSteps)(m.feature.rawThenSteps);
80
+ }
81
+ const testData = (0, test_data_resolver_1.formatTestData)(m.feature.referencedVars, input.testData);
82
+ // Match Playwright result by test title (from .spec.ts) OR by scenarioName
83
+ let result;
84
+ if (input.results && m.spec) {
85
+ result = input.results.get(m.spec.testTitle);
86
+ }
87
+ // Determine Test Result
88
+ let testResult;
89
+ let executedDate = '';
90
+ let note = '';
91
+ let environment = '';
92
+ let executor = '';
93
+ if (!m.spec) {
94
+ // Scenario not compiled → Manual if @manual, else Not compiled
95
+ testResult = testcaseType === 'Manual' ? 'Pending' : 'N/A';
96
+ if (testcaseType !== 'Manual') {
97
+ note = 'Scenario not compiled — re-run `sungen generate --screen ' + input.screen + '`';
98
+ }
99
+ }
100
+ else if (!result) {
101
+ // Compiled but no execution record → Pending
102
+ testResult = 'Pending';
103
+ }
104
+ else {
105
+ testResult = (0, playwright_report_parser_1.statusToTestResult)(result.status);
106
+ executedDate = (0, playwright_report_parser_1.formatExecutedDate)(result.startTime);
107
+ note = (0, playwright_report_parser_1.formatNote)(result);
108
+ environment = `${input.env.baseURL} (${input.env.projectName})`;
109
+ executor = input.env.executor;
110
+ }
111
+ // If we have environment info and the test actually ran, populate env + executor
112
+ if (testResult !== 'Pending' && testResult !== 'N/A') {
113
+ if (!environment)
114
+ environment = `${input.env.baseURL} (${input.env.projectName})`;
115
+ if (!executor)
116
+ executor = input.env.executor;
117
+ }
118
+ rows.push({
119
+ tcId,
120
+ category1,
121
+ category2,
122
+ category3: input.featureName,
123
+ category4: input.screen,
124
+ precondition,
125
+ testData,
126
+ steps,
127
+ expectedResults,
128
+ priority,
129
+ testcaseType: m.spec ? testcaseType : testcaseType === 'Manual' ? 'Manual' : 'Not compiled',
130
+ testResult,
131
+ executedDate,
132
+ testExecutor: executor,
133
+ testEnvironment: environment,
134
+ note,
135
+ });
136
+ }
137
+ return rows;
138
+ }
139
+ /**
140
+ * Calculate summary statistics from rows.
141
+ */
142
+ function buildSummary(screen, rows, outputFile) {
143
+ const summary = {
144
+ screen,
145
+ total: rows.length,
146
+ passed: 0,
147
+ failed: 0,
148
+ pending: 0,
149
+ na: 0,
150
+ notCompiled: 0,
151
+ outputFile,
152
+ };
153
+ for (const r of rows) {
154
+ if (r.testResult === 'Passed')
155
+ summary.passed++;
156
+ else if (r.testResult === 'Failed')
157
+ summary.failed++;
158
+ else if (r.testResult === 'Pending')
159
+ summary.pending++;
160
+ else if (r.testResult === 'N/A')
161
+ summary.na++;
162
+ if (r.testcaseType === 'Not compiled')
163
+ summary.notCompiled++;
164
+ }
165
+ return summary;
166
+ }
167
+ // ----------------------------------------------------------------------------
168
+ // CSV writer
169
+ // ----------------------------------------------------------------------------
170
+ /**
171
+ * Escape a CSV cell per RFC 4180.
172
+ * Wrap in quotes if contains: comma, newline, quote. Escape embedded " as "".
173
+ */
174
+ function csvCell(v) {
175
+ if (v === null || v === undefined)
176
+ return '';
177
+ const s = String(v);
178
+ if (/[",\n\r]/.test(s)) {
179
+ return '"' + s.replace(/"/g, '""') + '"';
180
+ }
181
+ return s;
182
+ }
183
+ function csvRow(cells) {
184
+ return cells.map(csvCell).join(',');
185
+ }
186
+ /**
187
+ * Compose the full CSV file content matching the BM-2-901-13 template.
188
+ */
189
+ function renderCsv(summary, rows, specLink) {
190
+ const issueDate = (() => {
191
+ const d = new Date();
192
+ return `${String(d.getDate()).padStart(2, '0')}/${String(d.getMonth() + 1).padStart(2, '0')}/${d.getFullYear()}`;
193
+ })();
194
+ const total = summary.total || 1; // avoid div by zero
195
+ const pct = (n) => `${Math.round((n / total) * 100)}%`;
196
+ // UTF-8 BOM for Excel compatibility with Vietnamese
197
+ const BOM = '\ufeff';
198
+ const lines = [];
199
+ // Header metadata block (mirrors sample)
200
+ const titleLabel = `${summary.screen.toUpperCase()} TESTCASE`;
201
+ lines.push(csvRow(['', '', '', titleLabel, '', '', 'No: BM-2-901-13', '', '', '', '', '', '', '', '', '']));
202
+ lines.push(csvRow(['', '', '', '', '', '', `Version: ${(0, package_info_1.getPackageVersion)()}`, '', '', '', '', '', '', '', '', '']));
203
+ lines.push(csvRow(['', '', '', '', '', '', `Issue Date: ${issueDate}`, '', '', '', '', '', '', '', '', '']));
204
+ lines.push(csvRow(['SUN ASTERISK VIETNAM CO., LTD', '', '', '', '', '', 'ISO/IEC 27001:2022 & ISO 9001:2015', '', '', '', '', '', '', '', '', '']));
205
+ lines.push(csvRow(['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']));
206
+ lines.push(csvRow(['', '', 'Total TCs', 'Passed', 'Failed', 'Pending', 'N/A', 'Remaining', '', '', '', '', '', '', '', '']));
207
+ lines.push(csvRow(['', '', summary.total, summary.passed, summary.failed, summary.pending, summary.na, summary.pending + summary.na, '', '', '', '', '', '', '', '']));
208
+ lines.push(csvRow(['', '', '', pct(summary.passed), pct(summary.failed), pct(summary.pending), pct(summary.na), pct(summary.pending + summary.na), '', '', '', '', '', '', '', '']));
209
+ lines.push(csvRow(['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']));
210
+ lines.push(csvRow(['Spec/Design link:', specLink, '', '', '', '', '', '', '', '', '', '', '', '', '', '']));
211
+ lines.push(csvRow(['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']));
212
+ lines.push(csvRow(['*: Mandatory', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']));
213
+ lines.push(csvRow([
214
+ 'TC ID*',
215
+ '{Category 1}',
216
+ '{Category 2}',
217
+ '{Category 3}',
218
+ '{Category 4}',
219
+ 'Pre-condition',
220
+ 'Test Data',
221
+ 'Steps*',
222
+ 'Expected results*',
223
+ 'Priority',
224
+ 'Testcase type',
225
+ 'Test Result*',
226
+ 'Executed Date*',
227
+ 'Test Executor*',
228
+ 'Test Environment',
229
+ 'Note\n(Test evidence, DefectID, Actual result)',
230
+ ]));
231
+ // Group rows by Category 2 (in stable order)
232
+ const order = ['Accessing', 'GUI', 'Function'];
233
+ const grouped = new Map();
234
+ for (const row of rows) {
235
+ const g = grouped.get(row.category2) || [];
236
+ g.push(row);
237
+ grouped.set(row.category2, g);
238
+ }
239
+ const emittedGroups = new Set();
240
+ for (const group of order) {
241
+ const groupRows = grouped.get(group);
242
+ if (!groupRows || groupRows.length === 0)
243
+ continue;
244
+ emittedGroups.add(group);
245
+ // Section header row (empty Category 1, group name in Category 2 column? sample puts it differently — empty row then category marker)
246
+ lines.push(csvRow(['', group, '', '', '', '', '', '', '', '', '', '', '', '', '', '']));
247
+ for (const row of groupRows) {
248
+ lines.push(csvRow([
249
+ row.tcId,
250
+ row.category1,
251
+ '',
252
+ '',
253
+ '',
254
+ row.precondition,
255
+ row.testData,
256
+ row.steps,
257
+ row.expectedResults,
258
+ row.priority,
259
+ row.testcaseType,
260
+ row.testResult,
261
+ row.executedDate,
262
+ row.testExecutor,
263
+ row.testEnvironment,
264
+ row.note,
265
+ ]));
266
+ }
267
+ }
268
+ // Emit any groups not in the predefined order
269
+ for (const [group, groupRows] of grouped.entries()) {
270
+ if (emittedGroups.has(group))
271
+ continue;
272
+ lines.push(csvRow(['', group, '', '', '', '', '', '', '', '', '', '', '', '', '', '']));
273
+ for (const row of groupRows) {
274
+ lines.push(csvRow([
275
+ row.tcId,
276
+ row.category1,
277
+ '',
278
+ '',
279
+ '',
280
+ row.precondition,
281
+ row.testData,
282
+ row.steps,
283
+ row.expectedResults,
284
+ row.priority,
285
+ row.testcaseType,
286
+ row.testResult,
287
+ row.executedDate,
288
+ row.testExecutor,
289
+ row.testEnvironment,
290
+ row.note,
291
+ ]));
292
+ }
293
+ }
294
+ return BOM + lines.join('\n') + '\n';
295
+ }
296
+ /**
297
+ * Write the CSV to disk at qa/deliverables/<screen>-testcases.csv.
298
+ * Creates directory if needed.
299
+ */
300
+ function writeCsv(cwd, screen, csvContent) {
301
+ const outDir = path.join(cwd, 'qa', 'deliverables');
302
+ if (!fs.existsSync(outDir)) {
303
+ fs.mkdirSync(outDir, { recursive: true });
304
+ }
305
+ const outPath = path.join(outDir, `${screen}-testcases.csv`);
306
+ fs.writeFileSync(outPath, csvContent, 'utf-8');
307
+ return outPath;
308
+ }
309
+ // mark unused import to silence TS if needed
310
+ void step_formatter_1.cleanStepLine;
311
+ //# sourceMappingURL=csv-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv-exporter.js","sourceRoot":"","sources":["../../src/exporters/csv-exporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Parse .feature files to extract scenario metadata for CSV export.
3
+ * Reuses the existing GherkinParser.
4
+ */
5
+ import { FeatureMetadata, ScenarioMetadata } from './types';
6
+ /**
7
+ * Parse .feature file → structured metadata ready for CSV assembly.
8
+ */
9
+ export declare function parseFeatureMetadata(featureFilePath: string): FeatureMetadata;
10
+ /**
11
+ * Return true if this scenario is a @steps:<name> base scenario that should
12
+ * be excluded from the CSV (it's only used for @extend inheritance).
13
+ */
14
+ export declare function isStepsBaseScenario(sc: ScenarioMetadata): boolean;
15
+ /**
16
+ * Return true if this is the default scaffold sample scenario (not real).
17
+ */
18
+ export declare function isSampleScaffoldScenario(sc: ScenarioMetadata): boolean;
19
+ /**
20
+ * Extract priority from scenario tags.
21
+ */
22
+ export declare function extractPriority(tags: string[]): string;
23
+ /**
24
+ * Extract testcase type from scenario tags.
25
+ */
26
+ export declare function extractTestcaseType(tags: string[]): 'Auto' | 'Manual';
27
+ /**
28
+ * Extract auth role from tags. Returns 'no-auth' if @no-auth, else role name or null.
29
+ */
30
+ export declare function extractAuthRole(tags: string[]): string | null;
31
+ /**
32
+ * Extract VP ID and human-readable name from scenario name like
33
+ * "VP-UI-001 Modal displays all required fields" →
34
+ * { vpId: "VP-UI-001", category1: "Modal displays all required fields" }
35
+ */
36
+ export declare function splitVpAndName(scenarioName: string): {
37
+ vpId?: string;
38
+ category1: string;
39
+ };
40
+ /**
41
+ * Map VP prefix to Category 2.
42
+ */
43
+ export declare function mapVpToCategory2(vpId: string | undefined): string;
44
+ /**
45
+ * Generate TC ID: <SCREEN_UPPER>-<VP-part>-<NNN> OR <SCREEN_UPPER>-<NNN> if no VP.
46
+ */
47
+ export declare function generateTcId(screen: string, vpId: string | undefined, fallbackIndex: number): string;
48
+ //# sourceMappingURL=feature-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-parser.d.ts","sourceRoot":"","sources":["../../src/exporters/feature-parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAoD5D;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,GAAG,eAAe,CAyB7E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAEjE;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,gBAAgB,GAAG,OAAO,CAEtE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAMtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,QAAQ,CAErE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAK7D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAMzF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAOjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAQpG"}
@@ -0,0 +1,178 @@
1
+ "use strict";
2
+ /**
3
+ * Parse .feature files to extract scenario metadata for CSV export.
4
+ * Reuses the existing GherkinParser.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.parseFeatureMetadata = parseFeatureMetadata;
8
+ exports.isStepsBaseScenario = isStepsBaseScenario;
9
+ exports.isSampleScaffoldScenario = isSampleScaffoldScenario;
10
+ exports.extractPriority = extractPriority;
11
+ exports.extractTestcaseType = extractTestcaseType;
12
+ exports.extractAuthRole = extractAuthRole;
13
+ exports.splitVpAndName = splitVpAndName;
14
+ exports.mapVpToCategory2 = mapVpToCategory2;
15
+ exports.generateTcId = generateTcId;
16
+ const gherkin_parser_1 = require("../generators/gherkin-parser");
17
+ /**
18
+ * Variables referenced in a scenario: find all {{var_name}} in step text.
19
+ */
20
+ function extractReferencedVars(scenario) {
21
+ const vars = new Set();
22
+ for (const step of scenario.steps) {
23
+ const matches = step.text.matchAll(/\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g);
24
+ for (const match of matches) {
25
+ vars.add(match[1]);
26
+ }
27
+ // Also check inline DataTable cells
28
+ if (step.dataTable) {
29
+ for (const row of step.dataTable.rows) {
30
+ for (const cell of row.cells) {
31
+ const cellMatches = cell.matchAll(/\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g);
32
+ for (const match of cellMatches) {
33
+ vars.add(match[1]);
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ return Array.from(vars);
40
+ }
41
+ /**
42
+ * Classify each step into Given / When / Then bucket based on its preceding
43
+ * explicit keyword. "And" inherits from the previous explicit keyword.
44
+ */
45
+ function classifySteps(scenario) {
46
+ const given = [];
47
+ const when = [];
48
+ const then = [];
49
+ let currentBucket = 'given';
50
+ for (const step of scenario.steps) {
51
+ const keyword = step.keyword.trim();
52
+ if (keyword === 'Given')
53
+ currentBucket = 'given';
54
+ else if (keyword === 'When')
55
+ currentBucket = 'when';
56
+ else if (keyword === 'Then')
57
+ currentBucket = 'then';
58
+ // And / But → inherit currentBucket
59
+ if (currentBucket === 'given')
60
+ given.push(step.text);
61
+ else if (currentBucket === 'when')
62
+ when.push(step.text);
63
+ else
64
+ then.push(step.text);
65
+ }
66
+ return { given, when, then };
67
+ }
68
+ /**
69
+ * Parse .feature file → structured metadata ready for CSV assembly.
70
+ */
71
+ function parseFeatureMetadata(featureFilePath) {
72
+ const parser = new gherkin_parser_1.GherkinParser();
73
+ const parsed = parser.parseFeatureFile(featureFilePath);
74
+ const scenarios = parsed.scenarios.map((sc) => {
75
+ const { given, when, then } = classifySteps(sc);
76
+ return {
77
+ name: sc.name,
78
+ tags: [...parsed.tags, ...sc.tags],
79
+ stepsName: sc.stepsName,
80
+ extendsName: sc.extendsName,
81
+ referencedVars: extractReferencedVars(sc),
82
+ rawGivenSteps: given,
83
+ rawWhenSteps: when,
84
+ rawThenSteps: then,
85
+ };
86
+ });
87
+ return {
88
+ featureName: parsed.name,
89
+ featurePath: parsed.path,
90
+ featureTags: parsed.tags,
91
+ scenarios,
92
+ };
93
+ }
94
+ /**
95
+ * Return true if this scenario is a @steps:<name> base scenario that should
96
+ * be excluded from the CSV (it's only used for @extend inheritance).
97
+ */
98
+ function isStepsBaseScenario(sc) {
99
+ return !!sc.stepsName;
100
+ }
101
+ /**
102
+ * Return true if this is the default scaffold sample scenario (not real).
103
+ */
104
+ function isSampleScaffoldScenario(sc) {
105
+ return /^Sample scenario for /i.test(sc.name);
106
+ }
107
+ /**
108
+ * Extract priority from scenario tags.
109
+ */
110
+ function extractPriority(tags) {
111
+ if (tags.includes('@critical'))
112
+ return 'Critical';
113
+ if (tags.includes('@high'))
114
+ return 'High';
115
+ if (tags.includes('@normal'))
116
+ return 'Normal';
117
+ if (tags.includes('@low'))
118
+ return 'Low';
119
+ return 'Normal';
120
+ }
121
+ /**
122
+ * Extract testcase type from scenario tags.
123
+ */
124
+ function extractTestcaseType(tags) {
125
+ return tags.includes('@manual') ? 'Manual' : 'Auto';
126
+ }
127
+ /**
128
+ * Extract auth role from tags. Returns 'no-auth' if @no-auth, else role name or null.
129
+ */
130
+ function extractAuthRole(tags) {
131
+ if (tags.includes('@no-auth'))
132
+ return 'no-auth';
133
+ const authTag = tags.find((t) => t.startsWith('@auth:'));
134
+ if (authTag)
135
+ return authTag.replace('@auth:', '');
136
+ return null;
137
+ }
138
+ /**
139
+ * Extract VP ID and human-readable name from scenario name like
140
+ * "VP-UI-001 Modal displays all required fields" →
141
+ * { vpId: "VP-UI-001", category1: "Modal displays all required fields" }
142
+ */
143
+ function splitVpAndName(scenarioName) {
144
+ const match = scenarioName.match(/^(VP-[A-Z]+-\d+[a-zA-Z]?)\s+(.+)$/);
145
+ if (match) {
146
+ return { vpId: match[1], category1: match[2] };
147
+ }
148
+ return { category1: scenarioName };
149
+ }
150
+ /**
151
+ * Map VP prefix to Category 2.
152
+ */
153
+ function mapVpToCategory2(vpId) {
154
+ if (!vpId)
155
+ return 'Function';
156
+ if (vpId.startsWith('VP-SEC-'))
157
+ return 'Accessing';
158
+ if (vpId.startsWith('VP-UI-'))
159
+ return 'GUI';
160
+ if (vpId.startsWith('VP-VAL-'))
161
+ return 'Function';
162
+ if (vpId.startsWith('VP-LOGIC-'))
163
+ return 'Function';
164
+ return 'Function';
165
+ }
166
+ /**
167
+ * Generate TC ID: <SCREEN_UPPER>-<VP-part>-<NNN> OR <SCREEN_UPPER>-<NNN> if no VP.
168
+ */
169
+ function generateTcId(screen, vpId, fallbackIndex) {
170
+ const screenUpper = screen.toUpperCase().replace(/[^A-Z0-9]/g, '-');
171
+ if (vpId) {
172
+ // VP-UI-001 → UI-001
173
+ const vpPart = vpId.replace(/^VP-/, '');
174
+ return `${screenUpper}-${vpPart}`;
175
+ }
176
+ return `${screenUpper}-${String(fallbackIndex).padStart(3, '0')}`;
177
+ }
178
+ //# sourceMappingURL=feature-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-parser.js","sourceRoot":"","sources":["../../src/exporters/feature-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Read `version` from the sungen package.json at module-root so the delivery
3
+ * report always reflects the installed CLI version instead of a hardcoded
4
+ * string. The lookup walks up from __dirname (works under both src/ via ts-node
5
+ * and dist/ after compilation) until a package.json with a `name` starting
6
+ * with `@sun-asterisk/sungen` or `sungen` is found.
7
+ */
8
+ export declare function getPackageVersion(): string;
9
+ //# sourceMappingURL=package-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-info.d.ts","sourceRoot":"","sources":["../../src/exporters/package-info.ts"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAsB1C"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.getPackageVersion = getPackageVersion;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ let cached = null;
40
+ /**
41
+ * Read `version` from the sungen package.json at module-root so the delivery
42
+ * report always reflects the installed CLI version instead of a hardcoded
43
+ * string. The lookup walks up from __dirname (works under both src/ via ts-node
44
+ * and dist/ after compilation) until a package.json with a `name` starting
45
+ * with `@sun-asterisk/sungen` or `sungen` is found.
46
+ */
47
+ function getPackageVersion() {
48
+ if (cached)
49
+ return cached;
50
+ let dir = __dirname;
51
+ for (let i = 0; i < 6; i++) {
52
+ const pkgPath = path.join(dir, 'package.json');
53
+ if (fs.existsSync(pkgPath)) {
54
+ try {
55
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
56
+ if (pkg && typeof pkg.version === 'string') {
57
+ cached = pkg.version;
58
+ return cached;
59
+ }
60
+ }
61
+ catch {
62
+ // ignore and keep walking
63
+ }
64
+ }
65
+ const parent = path.dirname(dir);
66
+ if (parent === dir)
67
+ break;
68
+ dir = parent;
69
+ }
70
+ cached = 'unknown';
71
+ return cached;
72
+ }
73
+ //# sourceMappingURL=package-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-info.js","sourceRoot":"","sources":["../../src/exporters/package-info.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,8CAsBC;AAlCD,uCAAyB;AACzB,2CAA6B;AAE7B,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC;;;;;;GAMG;AACH,SAAgB,iBAAiB;IAC/B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC1D,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC3C,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;oBACrB,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,0BAA0B;YAC5B,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,MAAM,GAAG,SAAS,CAAC;IACnB,OAAO,MAAM,CAAC;AAChB,CAAC"}