@futdevpro/dynamo-e2e 1.18.7 → 1.18.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.
Files changed (211) hide show
  1. package/.dynamo/pipeline.cicd.config.json +3 -3
  2. package/CHANGELOG.md +23 -0
  3. package/README.md +1 -1
  4. package/build/_modules/contracts/_collections/utils/test-id.util.d.ts +2 -0
  5. package/build/_modules/contracts/_collections/utils/test-id.util.d.ts.map +1 -1
  6. package/build/_modules/contracts/_collections/utils/test-id.util.js +4 -0
  7. package/build/_modules/contracts/_collections/utils/test-id.util.js.map +1 -1
  8. package/build/_modules/generators/_collections/cli-runner.util.d.ts.map +1 -1
  9. package/build/_modules/generators/_collections/cli-runner.util.js +5 -11
  10. package/build/_modules/generators/_collections/cli-runner.util.js.map +1 -1
  11. package/build/_modules/generators/_collections/field-emission.util.d.ts +5 -0
  12. package/build/_modules/generators/_collections/field-emission.util.d.ts.map +1 -1
  13. package/build/_modules/generators/_collections/field-emission.util.js +27 -6
  14. package/build/_modules/generators/_collections/field-emission.util.js.map +1 -1
  15. package/build/_modules/generators/_models/form-settings-shape.interface.d.ts +15 -0
  16. package/build/_modules/generators/_models/form-settings-shape.interface.d.ts.map +1 -1
  17. package/build/_modules/generators/bootstrap.spec.js +4 -3
  18. package/build/_modules/generators/bootstrap.spec.js.map +1 -1
  19. package/build/_modules/generators/field-emission-edge.spec.js +49 -0
  20. package/build/_modules/generators/field-emission-edge.spec.js.map +1 -1
  21. package/build/_modules/presets/_collections/constants/playwright-viewport-presets.const.d.ts +22 -0
  22. package/build/_modules/presets/_collections/constants/playwright-viewport-presets.const.d.ts.map +1 -0
  23. package/build/_modules/presets/_collections/constants/playwright-viewport-presets.const.js +69 -0
  24. package/build/_modules/presets/_collections/constants/playwright-viewport-presets.const.js.map +1 -0
  25. package/build/_modules/presets/_collections/global-setup.factory.d.ts +14 -0
  26. package/build/_modules/presets/_collections/global-setup.factory.d.ts.map +1 -0
  27. package/build/_modules/presets/_collections/global-setup.factory.js +113 -0
  28. package/build/_modules/presets/_collections/global-setup.factory.js.map +1 -0
  29. package/build/_modules/presets/_collections/playwright-config.factory.d.ts +19 -0
  30. package/build/_modules/presets/_collections/playwright-config.factory.d.ts.map +1 -0
  31. package/build/_modules/presets/_collections/playwright-config.factory.js +107 -0
  32. package/build/_modules/presets/_collections/playwright-config.factory.js.map +1 -0
  33. package/build/_modules/presets/_collections/viewport-preset-resolver.util.d.ts +8 -0
  34. package/build/_modules/presets/_collections/viewport-preset-resolver.util.d.ts.map +1 -0
  35. package/build/_modules/presets/_collections/viewport-preset-resolver.util.js +25 -0
  36. package/build/_modules/presets/_collections/viewport-preset-resolver.util.js.map +1 -0
  37. package/build/_modules/presets/_models/interfaces/global-setup-options.interface.d.ts +28 -0
  38. package/build/_modules/presets/_models/interfaces/global-setup-options.interface.d.ts.map +1 -0
  39. package/build/_modules/presets/_models/interfaces/global-setup-options.interface.js +3 -0
  40. package/build/_modules/presets/_models/interfaces/global-setup-options.interface.js.map +1 -0
  41. package/build/_modules/presets/_models/interfaces/playwright-config-options.interface.d.ts +43 -0
  42. package/build/_modules/presets/_models/interfaces/playwright-config-options.interface.d.ts.map +1 -0
  43. package/build/_modules/presets/_models/interfaces/playwright-config-options.interface.js +3 -0
  44. package/build/_modules/presets/_models/interfaces/playwright-config-options.interface.js.map +1 -0
  45. package/build/_modules/presets/index.d.ts +6 -0
  46. package/build/_modules/presets/index.d.ts.map +1 -1
  47. package/build/_modules/presets/index.js +12 -1
  48. package/build/_modules/presets/index.js.map +1 -1
  49. package/build/_modules/presets/presets.spec.d.ts +2 -0
  50. package/build/_modules/presets/presets.spec.d.ts.map +1 -0
  51. package/build/_modules/presets/presets.spec.js +230 -0
  52. package/build/_modules/presets/presets.spec.js.map +1 -0
  53. package/build/_modules/vqa/generators/ai-agent-readme.template.d.ts +2 -1
  54. package/build/_modules/vqa/generators/ai-agent-readme.template.d.ts.map +1 -1
  55. package/build/_modules/vqa/generators/ai-agent-readme.template.js +22 -3
  56. package/build/_modules/vqa/generators/ai-agent-readme.template.js.map +1 -1
  57. package/coverage/contracts/_collections/index.html +1 -1
  58. package/coverage/contracts/_collections/index.ts.html +1 -1
  59. package/coverage/contracts/_collections/utils/index.html +1 -1
  60. package/coverage/contracts/_collections/utils/test-id.util.ts.html +10 -10
  61. package/coverage/contracts/_enums/cwv-metric-type.enum.ts.html +1 -1
  62. package/coverage/contracts/_enums/field-test-case-type.enum.ts.html +4 -34
  63. package/coverage/contracts/_enums/index.html +5 -5
  64. package/coverage/contracts/_enums/index.ts.html +1 -1
  65. package/coverage/contracts/_enums/standard-viewport.enum.ts.html +1 -1
  66. package/coverage/contracts/_enums/test-expectation-type.enum.ts.html +1 -1
  67. package/coverage/contracts/_enums/test-run-mode-type.enum.ts.html +1 -1
  68. package/coverage/contracts/index.html +1 -1
  69. package/coverage/contracts/index.ts.html +1 -1
  70. package/coverage/cwv/_collections/cwv-aggregator.util.ts.html +1 -1
  71. package/coverage/cwv/_collections/cwv-comparison.util.ts.html +4 -4
  72. package/coverage/cwv/_collections/cwv-diagnose.util.ts.html +1 -1
  73. package/coverage/cwv/_collections/cwv-emission.util.ts.html +1 -1
  74. package/coverage/cwv/_collections/cwv-summarize.util.ts.html +1 -1
  75. package/coverage/cwv/_collections/index.html +7 -7
  76. package/coverage/cwv/_collections/inp-interaction-script.const.ts.html +1 -1
  77. package/coverage/cwv/_collections/web-vitals-page-script.const.ts.html +1 -1
  78. package/coverage/cwv/cwv-suite.generator.ts.html +3 -3
  79. package/coverage/cwv/index.html +5 -5
  80. package/coverage/generators/_collections/cli-runner.util.ts.html +1 -1
  81. package/coverage/generators/_collections/config-validator.util.ts.html +1 -1
  82. package/coverage/generators/_collections/field-emission.util.ts.html +87 -126
  83. package/coverage/generators/_collections/form-level-emission.util.ts.html +33 -39
  84. package/coverage/generators/_collections/index.html +29 -29
  85. package/coverage/generators/_collections/json-schema.util.ts.html +1 -1
  86. package/coverage/generators/_collections/preset-configs.const.ts.html +1 -1
  87. package/coverage/generators/_collections/spec-emission.util.ts.html +35 -35
  88. package/coverage/generators/_collections/test-case-filter.util.ts.html +66 -258
  89. package/coverage/generators/_collections/viewport-emission.util.ts.html +1 -1
  90. package/coverage/generators/form-suite.generator.ts.html +79 -97
  91. package/coverage/generators/index.html +18 -18
  92. package/coverage/generators/viewport-suite.generator.ts.html +3 -3
  93. package/coverage/index.html +45 -90
  94. package/coverage/lcov-report/contracts/_collections/index.html +1 -1
  95. package/coverage/lcov-report/contracts/_collections/index.ts.html +1 -1
  96. package/coverage/lcov-report/contracts/_collections/utils/index.html +1 -1
  97. package/coverage/lcov-report/contracts/_collections/utils/test-id.util.ts.html +10 -10
  98. package/coverage/lcov-report/contracts/_enums/cwv-metric-type.enum.ts.html +1 -1
  99. package/coverage/lcov-report/contracts/_enums/field-test-case-type.enum.ts.html +4 -34
  100. package/coverage/lcov-report/contracts/_enums/index.html +5 -5
  101. package/coverage/lcov-report/contracts/_enums/index.ts.html +1 -1
  102. package/coverage/lcov-report/contracts/_enums/standard-viewport.enum.ts.html +1 -1
  103. package/coverage/lcov-report/contracts/_enums/test-expectation-type.enum.ts.html +1 -1
  104. package/coverage/lcov-report/contracts/_enums/test-run-mode-type.enum.ts.html +1 -1
  105. package/coverage/lcov-report/contracts/index.html +1 -1
  106. package/coverage/lcov-report/contracts/index.ts.html +1 -1
  107. package/coverage/lcov-report/cwv/_collections/cwv-aggregator.util.ts.html +1 -1
  108. package/coverage/lcov-report/cwv/_collections/cwv-comparison.util.ts.html +4 -4
  109. package/coverage/lcov-report/cwv/_collections/cwv-diagnose.util.ts.html +1 -1
  110. package/coverage/lcov-report/cwv/_collections/cwv-emission.util.ts.html +1 -1
  111. package/coverage/lcov-report/cwv/_collections/cwv-summarize.util.ts.html +1 -1
  112. package/coverage/lcov-report/cwv/_collections/index.html +7 -7
  113. package/coverage/lcov-report/cwv/_collections/inp-interaction-script.const.ts.html +1 -1
  114. package/coverage/lcov-report/cwv/_collections/web-vitals-page-script.const.ts.html +1 -1
  115. package/coverage/lcov-report/cwv/cwv-suite.generator.ts.html +3 -3
  116. package/coverage/lcov-report/cwv/index.html +5 -5
  117. package/coverage/lcov-report/generators/_collections/cli-runner.util.ts.html +1 -1
  118. package/coverage/lcov-report/generators/_collections/config-validator.util.ts.html +1 -1
  119. package/coverage/lcov-report/generators/_collections/field-emission.util.ts.html +87 -126
  120. package/coverage/lcov-report/generators/_collections/form-level-emission.util.ts.html +33 -39
  121. package/coverage/lcov-report/generators/_collections/index.html +29 -29
  122. package/coverage/lcov-report/generators/_collections/json-schema.util.ts.html +1 -1
  123. package/coverage/lcov-report/generators/_collections/preset-configs.const.ts.html +1 -1
  124. package/coverage/lcov-report/generators/_collections/spec-emission.util.ts.html +35 -35
  125. package/coverage/lcov-report/generators/_collections/test-case-filter.util.ts.html +66 -258
  126. package/coverage/lcov-report/generators/_collections/viewport-emission.util.ts.html +1 -1
  127. package/coverage/lcov-report/generators/form-suite.generator.ts.html +79 -97
  128. package/coverage/lcov-report/generators/index.html +18 -18
  129. package/coverage/lcov-report/generators/viewport-suite.generator.ts.html +3 -3
  130. package/coverage/lcov-report/index.html +45 -90
  131. package/coverage/lcov-report/runtime/_collections/assertion-helpers.util.ts.html +7 -16
  132. package/coverage/lcov-report/runtime/_collections/index.html +17 -17
  133. package/coverage/lcov-report/runtime/_collections/unique-generator.util.ts.html +3 -3
  134. package/coverage/lcov-report/runtime/_collections/wait-helpers.util.ts.html +5 -5
  135. package/coverage/lcov-report/runtime/_services/dialog-page-object.ts.html +2 -2
  136. package/coverage/lcov-report/runtime/_services/field-page-object.ts.html +2 -2
  137. package/coverage/lcov-report/runtime/_services/form-page-object.ts.html +2 -2
  138. package/coverage/lcov-report/runtime/_services/index.html +9 -9
  139. package/coverage/lcov-report/runtime/_services/loader-page-object.ts.html +2 -2
  140. package/coverage/lcov-report/runtime/_services/logger.service.ts.html +5 -5
  141. package/coverage/lcov-report/runtime/_services/login-flow-helper.base.ts.html +2 -2
  142. package/coverage/lcov-report/runtime/_services/nav-page-object.ts.html +2 -2
  143. package/coverage/lcov-report/runtime/_services/toast-page-object.ts.html +1 -1
  144. package/coverage/lcov-report/runtime/_services/wave-2b-page-objects.ts.html +6 -6
  145. package/coverage/lcov-report/runtime/index.html +1 -1
  146. package/coverage/lcov-report/runtime/index.ts.html +1 -1
  147. package/coverage/lcov.info +737 -3049
  148. package/coverage/runtime/_collections/assertion-helpers.util.ts.html +7 -16
  149. package/coverage/runtime/_collections/index.html +17 -17
  150. package/coverage/runtime/_collections/unique-generator.util.ts.html +3 -3
  151. package/coverage/runtime/_collections/wait-helpers.util.ts.html +5 -5
  152. package/coverage/runtime/_services/dialog-page-object.ts.html +2 -2
  153. package/coverage/runtime/_services/field-page-object.ts.html +2 -2
  154. package/coverage/runtime/_services/form-page-object.ts.html +2 -2
  155. package/coverage/runtime/_services/index.html +9 -9
  156. package/coverage/runtime/_services/loader-page-object.ts.html +2 -2
  157. package/coverage/runtime/_services/logger.service.ts.html +5 -5
  158. package/coverage/runtime/_services/login-flow-helper.base.ts.html +2 -2
  159. package/coverage/runtime/_services/nav-page-object.ts.html +2 -2
  160. package/coverage/runtime/_services/toast-page-object.ts.html +1 -1
  161. package/coverage/runtime/_services/wave-2b-page-objects.ts.html +6 -6
  162. package/coverage/runtime/index.html +1 -1
  163. package/coverage/runtime/index.ts.html +1 -1
  164. package/coverage/tmp/coverage-228636-1781075225757-0.json +1 -0
  165. package/coverage/tmp/coverage-228704-1781075227108-0.json +1 -0
  166. package/dogfood/generated/date-range-field-new.spec.ts +54 -0
  167. package/dogfood/generated/password-field-new.spec.ts +97 -0
  168. package/dogfood/generated/radio-select-field-new.spec.ts +69 -0
  169. package/dogfood/generated/slider-field-new.spec.ts +47 -0
  170. package/dogfood/generated/text-field-new.spec.ts +0 -0
  171. package/logs/cicd-job.json +3 -0
  172. package/logs/cicd-report.json +3 -0
  173. package/logs/cicd-status.json +3 -0
  174. package/package.json +4 -1
  175. package/.dynamo/logs/cicd-pipeline/status.json +0 -74
  176. package/coverage/lcov-report/vqa/_collections/utils/deterministic-finding.util.ts.html +0 -481
  177. package/coverage/lcov-report/vqa/_collections/utils/finding-id.util.ts.html +0 -214
  178. package/coverage/lcov-report/vqa/_collections/utils/finding-validator.util.ts.html +0 -463
  179. package/coverage/lcov-report/vqa/_collections/utils/index.html +0 -176
  180. package/coverage/lcov-report/vqa/_collections/utils/manifest-validator.util.ts.html +0 -652
  181. package/coverage/lcov-report/vqa/_collections/utils/risk-score.util.ts.html +0 -424
  182. package/coverage/lcov-report/vqa/_enums/dom-evidence-detector.enum.ts.html +0 -214
  183. package/coverage/lcov-report/vqa/_enums/finding-severity.enum.ts.html +0 -133
  184. package/coverage/lcov-report/vqa/_enums/finding-status.enum.ts.html +0 -151
  185. package/coverage/lcov-report/vqa/_enums/index.html +0 -161
  186. package/coverage/lcov-report/vqa/_enums/visual-state-type.enum.ts.html +0 -235
  187. package/coverage/lcov-report/vqa/generators/ai-agent-readme.template.ts.html +0 -643
  188. package/coverage/lcov-report/vqa/generators/bundle-summary.template.ts.html +0 -316
  189. package/coverage/lcov-report/vqa/generators/capture-spec.generator.ts.html +0 -835
  190. package/coverage/lcov-report/vqa/generators/comparison-bundle.generator.ts.html +0 -898
  191. package/coverage/lcov-report/vqa/generators/index.html +0 -176
  192. package/coverage/lcov-report/vqa/generators/review-bundle.generator.ts.html +0 -559
  193. package/coverage/tmp/coverage-19436-1783427587751-0.json +0 -1
  194. package/coverage/tmp/coverage-19441-1783427586112-0.json +0 -1
  195. package/coverage/vqa/_collections/utils/deterministic-finding.util.ts.html +0 -481
  196. package/coverage/vqa/_collections/utils/finding-id.util.ts.html +0 -214
  197. package/coverage/vqa/_collections/utils/finding-validator.util.ts.html +0 -463
  198. package/coverage/vqa/_collections/utils/index.html +0 -176
  199. package/coverage/vqa/_collections/utils/manifest-validator.util.ts.html +0 -652
  200. package/coverage/vqa/_collections/utils/risk-score.util.ts.html +0 -424
  201. package/coverage/vqa/_enums/dom-evidence-detector.enum.ts.html +0 -214
  202. package/coverage/vqa/_enums/finding-severity.enum.ts.html +0 -133
  203. package/coverage/vqa/_enums/finding-status.enum.ts.html +0 -151
  204. package/coverage/vqa/_enums/index.html +0 -161
  205. package/coverage/vqa/_enums/visual-state-type.enum.ts.html +0 -235
  206. package/coverage/vqa/generators/ai-agent-readme.template.ts.html +0 -643
  207. package/coverage/vqa/generators/bundle-summary.template.ts.html +0 -316
  208. package/coverage/vqa/generators/capture-spec.generator.ts.html +0 -835
  209. package/coverage/vqa/generators/comparison-bundle.generator.ts.html +0 -898
  210. package/coverage/vqa/generators/index.html +0 -176
  211. package/coverage/vqa/generators/review-bundle.generator.ts.html +0 -559
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Auto-generated by @futdevpro/dynamo-e2e — FormSuite Generator
3
+ * Form key: sandbox-date-range-default
4
+ * Route: /c/date-range-field-new
5
+ * Built at: WAVE-1-STAMP
6
+ *
7
+ * DO NOT EDIT BY HAND. Re-emit via `dc e2e generate-form-suite` or
8
+ * `DyE2E_FormSuite_Generator.emit({...})` consumer-script.
9
+ */
10
+
11
+ import { test, expect, Locator } from '@playwright/test';
12
+
13
+ test.describe('Sandbox: DyNX_DateRangeFieldNew (Default variant)', (): void => {
14
+
15
+ test.describe('Field: vacationRange (dateRange)', (): void => {
16
+ test.beforeEach(async ({ page }): Promise<void> => {
17
+ const response = await page.goto('/c/date-range-field-new');
18
+ expect(response?.ok()).toBeTruthy();
19
+ await page.locator('dynamo-date-range-field-new').first().waitFor({ state: 'visible' });
20
+ });
21
+
22
+ test('field[vacationRange] dateRange:valid → valid — normál tartomány', async ({ page }): Promise<void> => {
23
+ const startInput: Locator = page.getByTestId('sandbox-date-range-default-start');
24
+ const endInput: Locator = page.getByTestId('sandbox-date-range-default-end');
25
+ await startInput.fill('2026-06-01');
26
+ await endInput.fill('2026-06-30');
27
+ await endInput.blur();
28
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-date-range-default"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
29
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
30
+ });
31
+
32
+ test('field[vacationRange] dateRange:equal → valid — start === end (allowSameDay)', async ({ page }): Promise<void> => {
33
+ const startInput: Locator = page.getByTestId('sandbox-date-range-default-start');
34
+ const endInput: Locator = page.getByTestId('sandbox-date-range-default-end');
35
+ await startInput.fill('2026-06-15');
36
+ await endInput.fill('2026-06-15');
37
+ await endInput.blur();
38
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-date-range-default"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
39
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
40
+ });
41
+
42
+ test('field[vacationRange] dateRange:start-after-end → invalid:dateRange — start > end → cross-field error', async ({ page }): Promise<void> => {
43
+ const startInput: Locator = page.getByTestId('sandbox-date-range-default-start');
44
+ const endInput: Locator = page.getByTestId('sandbox-date-range-default-end');
45
+ await startInput.fill('2026-06-30');
46
+ await endInput.fill('2026-06-01');
47
+ await endInput.blur();
48
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-date-range-default"]').locator('xpath=ancestor-or-self::*[starts-with(local-name(),"dynamo-")]').first();
49
+ await expect(fieldRoot.locator('.text-red-400.mt-1').first()).toBeVisible();
50
+ // expectedErrorKey: dateRange
51
+ });
52
+ });
53
+
54
+ });
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Auto-generated by @futdevpro/dynamo-e2e — FormSuite Generator
3
+ * Form key: sandbox-pwd-required
4
+ * Route: /c/password-field-new
5
+ * Built at: WAVE-1-STAMP
6
+ *
7
+ * DO NOT EDIT BY HAND. Re-emit via `dc e2e generate-form-suite` or
8
+ * `DyE2E_FormSuite_Generator.emit({...})` consumer-script.
9
+ */
10
+
11
+ import { test, expect, Locator } from '@playwright/test';
12
+
13
+ test.describe('Sandbox: DyNX_PasswordFieldNew (Required variant)', (): void => {
14
+
15
+ test.describe('Field: password (password)', (): void => {
16
+ test.beforeEach(async ({ page }): Promise<void> => {
17
+ const response = await page.goto('/c/password-field-new');
18
+ expect(response?.ok()).toBeTruthy();
19
+ await page.locator('dynamo-password-field-new').first().waitFor({ state: 'visible' });
20
+ });
21
+
22
+ test('field[password] pw:empty → valid — üres jelszó', async ({ page }): Promise<void> => {
23
+ const input: Locator = page.getByTestId('sandbox-pwd-required');
24
+ await input.fill('');
25
+ await input.blur();
26
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-pwd-required"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
27
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
28
+ });
29
+
30
+ test('field[password] pw:ascii → valid — tipikus ASCII jelszó', async ({ page }): Promise<void> => {
31
+ const input: Locator = page.getByTestId('sandbox-pwd-required');
32
+ await input.fill('SecurePw123!');
33
+ await input.blur();
34
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-pwd-required"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
35
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
36
+ });
37
+
38
+ test('field[password] pw:unicode-basic → valid — unicode jelszó', async ({ page }): Promise<void> => {
39
+ const input: Locator = page.getByTestId('sandbox-pwd-required');
40
+ await input.fill('JelszóBiztos123');
41
+ await input.blur();
42
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-pwd-required"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
43
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
44
+ });
45
+
46
+ test('field[password] pw:unicode-emoji → valid — emoji jelszóban', async ({ page }): Promise<void> => {
47
+ const input: Locator = page.getByTestId('sandbox-pwd-required');
48
+ await input.fill('Pw🔐Strong');
49
+ await input.blur();
50
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-pwd-required"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
51
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
52
+ });
53
+
54
+ test('field[password] pw:short → invalid:minLength — < 8 char (default minLength)', async ({ page }): Promise<void> => {
55
+ const input: Locator = page.getByTestId('sandbox-pwd-required');
56
+ await input.fill('aaaaaaa');
57
+ await input.blur();
58
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-pwd-required"]').locator('xpath=ancestor-or-self::*[starts-with(local-name(),"dynamo-")]').first();
59
+ await expect(fieldRoot.locator('.text-red-400.mt-1').first()).toBeVisible();
60
+ // expectedErrorKey: minLength
61
+ });
62
+
63
+ test('field[password] pw:single-whitespace → valid — space-only password (some sites reject)', async ({ page }): Promise<void> => {
64
+ const input: Locator = page.getByTestId('sandbox-pwd-required');
65
+ await input.fill(' ');
66
+ await input.blur();
67
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-pwd-required"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
68
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
69
+ });
70
+
71
+ test('field[password] pw:xss-tag → valid — XSS-tag jelszóban', async ({ page }): Promise<void> => {
72
+ const input: Locator = page.getByTestId('sandbox-pwd-required');
73
+ await input.fill('<script>alert(1)</script>');
74
+ await input.blur();
75
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-pwd-required"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
76
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
77
+ });
78
+
79
+ test('field[password] pw:sql-injection-shape → valid — SQL-injection-szerű jelszó', async ({ page }): Promise<void> => {
80
+ const input: Locator = page.getByTestId('sandbox-pwd-required');
81
+ await input.fill('\' OR \'1\'=\'1\' --');
82
+ await input.blur();
83
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-pwd-required"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
84
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
85
+ });
86
+
87
+ test('field[password] pw:oversize → invalid:maxLength — 256+ char jelszó', async ({ page }): Promise<void> => {
88
+ const input: Locator = page.getByTestId('sandbox-pwd-required');
89
+ await input.fill('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
90
+ await input.blur();
91
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-pwd-required"]').locator('xpath=ancestor-or-self::*[starts-with(local-name(),"dynamo-")]').first();
92
+ await expect(fieldRoot.locator('.text-red-400.mt-1').first()).toBeVisible();
93
+ // expectedErrorKey: maxLength
94
+ });
95
+ });
96
+
97
+ });
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Auto-generated by @futdevpro/dynamo-e2e — FormSuite Generator
3
+ * Form key: sandbox-radio-vertical
4
+ * Route: /c/radio-select-field-new
5
+ * Built at: WAVE-1-STAMP
6
+ *
7
+ * DO NOT EDIT BY HAND. Re-emit via `dc e2e generate-form-suite` or
8
+ * `DyE2E_FormSuite_Generator.emit({...})` consumer-script.
9
+ */
10
+
11
+ import { test, expect, Locator } from '@playwright/test';
12
+
13
+ test.describe('Sandbox: DyNX_RadioSelectFieldNew (Vertical variant)', (): void => {
14
+
15
+ test.describe('Field: priority (radioSelect)', (): void => {
16
+ test.beforeEach(async ({ page }): Promise<void> => {
17
+ const response = await page.goto('/c/radio-select-field-new');
18
+ expect(response?.ok()).toBeTruthy();
19
+ await page.locator('dynamo-radio-select-field-new').first().waitFor({ state: 'visible' });
20
+ });
21
+
22
+ test('field[priority] select:none-selected → valid — semmi nincs választva', async ({ page }): Promise<void> => {
23
+ // options index → testId-suffix selection
24
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-radio-vertical"], dynamo-radio-select-field-new').first();
25
+ // sentinel -1 — generator-runtime should clamp to options.length
26
+ // Wave-1: explicit selector-pattern is per-consumer; szándékosan minimalista.
27
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-radio-vertical"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
28
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
29
+ });
30
+
31
+ test('field[priority] select:first-option → valid — első opció kiválasztva', async ({ page }): Promise<void> => {
32
+ // options index → testId-suffix selection
33
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-radio-vertical"], dynamo-radio-select-field-new').first();
34
+ // option index 0 (case-input[0])
35
+ // Wave-1: explicit selector-pattern is per-consumer; szándékosan minimalista.
36
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-radio-vertical"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
37
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
38
+ });
39
+
40
+ test('field[priority] select:last-option → valid — utolsó opció kiválasztva', async ({ page }): Promise<void> => {
41
+ // options index → testId-suffix selection
42
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-radio-vertical"], dynamo-radio-select-field-new').first();
43
+ // option index 3 (case-input[0])
44
+ // Wave-1: explicit selector-pattern is per-consumer; szándékosan minimalista.
45
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-radio-vertical"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
46
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
47
+ });
48
+
49
+ test('field[priority] select:required-empty → invalid:required — required + semmi → invalid', async ({ page }): Promise<void> => {
50
+ // options index → testId-suffix selection
51
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-radio-vertical"], dynamo-radio-select-field-new').first();
52
+ // sentinel -1 — generator-runtime should clamp to options.length
53
+ // Wave-1: explicit selector-pattern is per-consumer; szándékosan minimalista.
54
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-radio-vertical"]').locator('xpath=ancestor-or-self::*[starts-with(local-name(),"dynamo-")]').first();
55
+ await expect(fieldRoot.locator('.text-red-400.mt-1').first()).toBeVisible();
56
+ // expectedErrorKey: required
57
+ });
58
+
59
+ test('field[priority] select:disabled-option → valid — disabled opció nem klikkelheto', async ({ page }): Promise<void> => {
60
+ // options index → testId-suffix selection
61
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-radio-vertical"], dynamo-radio-select-field-new').first();
62
+ // sentinel -1 — generator-runtime should clamp to options.length
63
+ // Wave-1: explicit selector-pattern is per-consumer; szándékosan minimalista.
64
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-radio-vertical"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
65
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
66
+ });
67
+ });
68
+
69
+ });
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Auto-generated by @futdevpro/dynamo-e2e — FormSuite Generator
3
+ * Form key: sandbox-slider-default
4
+ * Route: /c/slider-field-new
5
+ * Built at: WAVE-1-STAMP
6
+ *
7
+ * DO NOT EDIT BY HAND. Re-emit via `dc e2e generate-form-suite` or
8
+ * `DyE2E_FormSuite_Generator.emit({...})` consumer-script.
9
+ */
10
+
11
+ import { test, expect, Locator } from '@playwright/test';
12
+
13
+ test.describe('Sandbox: DyNX_SliderFieldNew (Default 0-100)', (): void => {
14
+
15
+ test.describe('Field: volume (slider)', (): void => {
16
+ test.beforeEach(async ({ page }): Promise<void> => {
17
+ const response = await page.goto('/c/slider-field-new');
18
+ expect(response?.ok()).toBeTruthy();
19
+ await page.locator('dynamo-slider-field-new').first().waitFor({ state: 'visible' });
20
+ });
21
+
22
+ test('field[volume] slider:min → valid — min-érték', async ({ page }): Promise<void> => {
23
+ const input: Locator = page.getByTestId('sandbox-slider-default');
24
+ await input.fill(String(0 ?? ''));
25
+ await input.blur();
26
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-slider-default"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
27
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
28
+ });
29
+
30
+ test('field[volume] slider:max → valid — max-érték', async ({ page }): Promise<void> => {
31
+ const input: Locator = page.getByTestId('sandbox-slider-default');
32
+ await input.fill(String(100 ?? ''));
33
+ await input.blur();
34
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-slider-default"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
35
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
36
+ });
37
+
38
+ test('field[volume] slider:mid → valid — közepes érték', async ({ page }): Promise<void> => {
39
+ const input: Locator = page.getByTestId('sandbox-slider-default');
40
+ await input.fill(String(50 ?? ''));
41
+ await input.blur();
42
+ const fieldRoot: Locator = page.locator('[data-testid="sandbox-slider-default"]').locator('xpath=ancestor-or-self::*[contains(@class,"field") or starts-with(local-name(),"dynamo-")]').first();
43
+ await expect(fieldRoot.locator('.text-red-400.mt-1')).toHaveCount(0);
44
+ });
45
+ });
46
+
47
+ });
@@ -0,0 +1,3 @@
1
+ {
2
+ "error": "no job found"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "error": "no cdp report found"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "error": "no build report found"
3
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futdevpro/dynamo-e2e",
3
- "version": "01.18.7",
3
+ "version": "01.18.9",
4
4
  "description": "End-to-end testing engine for the Dynamo + FDP ecosystem — auto-generated form-coverage tests, viewport audit matrix, CWV diagnostics. Settings-POJO-first.",
5
5
  "DyBu_settings": {
6
6
  "packageType": "core-package",
@@ -96,6 +96,9 @@
96
96
  "typings": "./build/_modules/vqa/index.d.ts"
97
97
  }
98
98
  },
99
+ "dependencies": {
100
+ "dotenv": "^16.4.5"
101
+ },
99
102
  "devDependencies": {
100
103
  "@playwright/test": "1.48.2",
101
104
  "@types/jasmine": "5.1.4",
@@ -1,74 +0,0 @@
1
- {
2
- "pid": 19197,
3
- "startedAt": "2026-07-07T12:32:25.542Z",
4
- "startedAtMs": 1783427545542,
5
- "phase": "npm-publish",
6
- "pipelineComplete": false,
7
- "serverRunning": false,
8
- "totalDurationSec": null,
9
- "restartPending": false,
10
- "steps": {
11
- "validate-secrets": {
12
- "status": "ok",
13
- "startedAt": "2026-07-07T12:32:25.582Z",
14
- "logLineStart": 2,
15
- "logLineEnd": 7,
16
- "durationSec": 0.3
17
- },
18
- "discord-start": {
19
- "status": "ok",
20
- "startedAt": "2026-07-07T12:32:26.855Z",
21
- "logLineStart": 8,
22
- "logLineEnd": 13,
23
- "durationSec": 4
24
- },
25
- "pre-flight": {
26
- "status": "ok",
27
- "startedAt": "2026-07-07T12:32:31.871Z",
28
- "logLineStart": 14,
29
- "logLineEnd": 16,
30
- "durationSec": 0.2
31
- },
32
- "install": {
33
- "status": "ok",
34
- "startedAt": "2026-07-07T12:32:33.074Z",
35
- "logLineStart": 17,
36
- "logLineEnd": 39,
37
- "durationSec": 6.4
38
- },
39
- "build": {
40
- "status": "ok",
41
- "startedAt": "2026-07-07T12:32:40.455Z",
42
- "logLineStart": 40,
43
- "logLineEnd": 41,
44
- "durationSec": 9.9
45
- },
46
- "test": {
47
- "status": "ok",
48
- "startedAt": "2026-07-07T12:32:51.344Z",
49
- "logLineStart": 42,
50
- "logLineEnd": 52,
51
- "durationSec": 2.6,
52
- "testSummary": {
53
- "totalSpecs": 341,
54
- "failures": 0,
55
- "passed": 341,
56
- "testDurationSec": 0.465
57
- }
58
- },
59
- "coverage": {
60
- "status": "ok",
61
- "startedAt": "2026-07-07T12:32:54.903Z",
62
- "logLineStart": 53,
63
- "logLineEnd": 78,
64
- "durationSec": 13.6
65
- },
66
- "npm-publish": {
67
- "status": "running",
68
- "startedAt": "2026-07-07T12:33:09.532Z",
69
- "logLineStart": 79,
70
- "logLineEnd": null,
71
- "durationSec": null
72
- }
73
- }
74
- }