@elliemae/loan-field-renderers 26.2.2

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 (225) hide show
  1. package/dist/cjs/ARCHITECTURE.md +434 -0
  2. package/dist/cjs/OVERVIEW.md +229 -0
  3. package/dist/cjs/bll/constants.js +86 -0
  4. package/dist/cjs/bll/formatters/booleanFormatter.js +51 -0
  5. package/dist/cjs/bll/formatters/dateFormatter.js +78 -0
  6. package/dist/cjs/bll/formatters/dropdownFormatter.js +34 -0
  7. package/dist/cjs/bll/formatters/factory/index.js +115 -0
  8. package/dist/cjs/bll/formatters/index.js +24 -0
  9. package/dist/cjs/bll/formatters/numberFormatter.js +70 -0
  10. package/dist/cjs/bll/formatters/phoneFormatter.js +57 -0
  11. package/dist/cjs/bll/formatters/regexFormatter.js +52 -0
  12. package/dist/cjs/bll/formatters/ssnFormatter.js +50 -0
  13. package/dist/cjs/bll/formatters/textFormatter.js +43 -0
  14. package/dist/cjs/bll/formatters/zipFormatter.js +48 -0
  15. package/dist/cjs/bll/index.js +62 -0
  16. package/dist/cjs/bll/ssf/index.js +48 -0
  17. package/dist/cjs/bll/ssf/loan.js +81 -0
  18. package/dist/cjs/bll/ssf/loconnect.js +70 -0
  19. package/dist/cjs/bll/ssf/ssfBase.js +97 -0
  20. package/dist/cjs/bll/ssf/types.js +16 -0
  21. package/dist/cjs/bll/types.js +16 -0
  22. package/dist/cjs/bll/validators/dateValidator.js +60 -0
  23. package/dist/cjs/bll/validators/emailValidator.js +47 -0
  24. package/dist/cjs/bll/validators/factory/index.js +81 -0
  25. package/dist/cjs/bll/validators/index.js +24 -0
  26. package/dist/cjs/bll/validators/maxCharValidator.js +49 -0
  27. package/dist/cjs/bll/validators/requiredValidator.js +44 -0
  28. package/dist/cjs/bll/validators/zipValidator.js +53 -0
  29. package/dist/cjs/core/index.js +52 -0
  30. package/dist/cjs/demo/config.js +391 -0
  31. package/dist/cjs/demo/index.js +31 -0
  32. package/dist/cjs/package.json +7 -0
  33. package/dist/cjs/renderer/FieldRenderer.js +45 -0
  34. package/dist/cjs/renderer/base/hooks/fieldDescription.js +39 -0
  35. package/dist/cjs/renderer/base/hooks/fieldDisabled.js +53 -0
  36. package/dist/cjs/renderer/base/hooks/fieldGoTo.js +50 -0
  37. package/dist/cjs/renderer/base/hooks/fieldLocked.js +42 -0
  38. package/dist/cjs/renderer/base/hooks/fieldMeta.js +150 -0
  39. package/dist/cjs/renderer/base/hooks/fieldSubscribers.js +66 -0
  40. package/dist/cjs/renderer/base/hooks/fieldValidation.js +45 -0
  41. package/dist/cjs/renderer/base/hooks/fieldValue.js +215 -0
  42. package/dist/cjs/renderer/base/hooks/hookBase.js +29 -0
  43. package/dist/cjs/renderer/base/hooks/index.js +139 -0
  44. package/dist/cjs/renderer/base/renderer.js +198 -0
  45. package/dist/cjs/renderer/base/rendererValidator.js +97 -0
  46. package/dist/cjs/renderer/factory/index.js +58 -0
  47. package/dist/cjs/renderer/field-renderers/AddonRenderer.js +75 -0
  48. package/dist/cjs/renderer/field-renderers/CheckboxRenderer.js +123 -0
  49. package/dist/cjs/renderer/field-renderers/DateRenderer.js +206 -0
  50. package/dist/cjs/renderer/field-renderers/DropdownRenderer/hook.js +99 -0
  51. package/dist/cjs/renderer/field-renderers/DropdownRenderer/index.js +216 -0
  52. package/dist/cjs/renderer/field-renderers/LargeTextRenderer.js +209 -0
  53. package/dist/cjs/renderer/field-renderers/NumberRenderer.js +216 -0
  54. package/dist/cjs/renderer/field-renderers/RadioGroupRenderer.js +128 -0
  55. package/dist/cjs/renderer/field-renderers/RadioRenderer.js +121 -0
  56. package/dist/cjs/renderer/field-renderers/TextRenderer.js +223 -0
  57. package/dist/cjs/renderer/field-renderers/ToggleRenderer.js +121 -0
  58. package/dist/cjs/renderer/field-renderers/ZipCodeRenderer/helper.js +132 -0
  59. package/dist/cjs/renderer/field-renderers/ZipCodeRenderer/hook.js +128 -0
  60. package/dist/cjs/renderer/field-renderers/ZipCodeRenderer/index.js +273 -0
  61. package/dist/cjs/renderer/index.js +24 -0
  62. package/dist/cjs/renderer/styles.js +51 -0
  63. package/dist/cjs/renderer/types.js +16 -0
  64. package/dist/cjs/tests/base/flowBase.js +125 -0
  65. package/dist/cjs/tests/base/index.js +52 -0
  66. package/dist/cjs/tests/flows/checkboxRendererFlows.js +85 -0
  67. package/dist/cjs/tests/flows/dateRendererFlows.js +870 -0
  68. package/dist/cjs/tests/flows/dropdownRendererFlows.js +591 -0
  69. package/dist/cjs/tests/flows/largeTextRendererFlows.js +99 -0
  70. package/dist/cjs/tests/flows/numberRendererFlows.js +175 -0
  71. package/dist/cjs/tests/flows/radioRendererFlows.js +115 -0
  72. package/dist/cjs/tests/flows/textRendererFlows.js +349 -0
  73. package/dist/cjs/tests/flows/toggleRendererFlows.js +106 -0
  74. package/dist/cjs/tests/flows/zipCodeRendererFlows.js +1163 -0
  75. package/dist/cjs/utils/dateHelper.js +65 -0
  76. package/dist/esm/ARCHITECTURE.md +434 -0
  77. package/dist/esm/OVERVIEW.md +229 -0
  78. package/dist/esm/bll/constants.js +66 -0
  79. package/dist/esm/bll/formatters/booleanFormatter.js +33 -0
  80. package/dist/esm/bll/formatters/dateFormatter.js +48 -0
  81. package/dist/esm/bll/formatters/dropdownFormatter.js +14 -0
  82. package/dist/esm/bll/formatters/factory/index.js +97 -0
  83. package/dist/esm/bll/formatters/index.js +4 -0
  84. package/dist/esm/bll/formatters/numberFormatter.js +54 -0
  85. package/dist/esm/bll/formatters/phoneFormatter.js +41 -0
  86. package/dist/esm/bll/formatters/regexFormatter.js +34 -0
  87. package/dist/esm/bll/formatters/ssnFormatter.js +32 -0
  88. package/dist/esm/bll/formatters/textFormatter.js +25 -0
  89. package/dist/esm/bll/formatters/zipFormatter.js +30 -0
  90. package/dist/esm/bll/index.js +44 -0
  91. package/dist/esm/bll/ssf/index.js +30 -0
  92. package/dist/esm/bll/ssf/loan.js +63 -0
  93. package/dist/esm/bll/ssf/loconnect.js +52 -0
  94. package/dist/esm/bll/ssf/ssfBase.js +67 -0
  95. package/dist/esm/bll/ssf/types.js +0 -0
  96. package/dist/esm/bll/types.js +0 -0
  97. package/dist/esm/bll/validators/dateValidator.js +30 -0
  98. package/dist/esm/bll/validators/emailValidator.js +29 -0
  99. package/dist/esm/bll/validators/factory/index.js +63 -0
  100. package/dist/esm/bll/validators/index.js +4 -0
  101. package/dist/esm/bll/validators/maxCharValidator.js +31 -0
  102. package/dist/esm/bll/validators/requiredValidator.js +26 -0
  103. package/dist/esm/bll/validators/zipValidator.js +35 -0
  104. package/dist/esm/core/index.js +34 -0
  105. package/dist/esm/demo/config.js +371 -0
  106. package/dist/esm/demo/index.js +11 -0
  107. package/dist/esm/package.json +7 -0
  108. package/dist/esm/renderer/FieldRenderer.js +15 -0
  109. package/dist/esm/renderer/base/hooks/fieldDescription.js +19 -0
  110. package/dist/esm/renderer/base/hooks/fieldDisabled.js +33 -0
  111. package/dist/esm/renderer/base/hooks/fieldGoTo.js +30 -0
  112. package/dist/esm/renderer/base/hooks/fieldLocked.js +22 -0
  113. package/dist/esm/renderer/base/hooks/fieldMeta.js +132 -0
  114. package/dist/esm/renderer/base/hooks/fieldSubscribers.js +36 -0
  115. package/dist/esm/renderer/base/hooks/fieldValidation.js +25 -0
  116. package/dist/esm/renderer/base/hooks/fieldValue.js +195 -0
  117. package/dist/esm/renderer/base/hooks/hookBase.js +9 -0
  118. package/dist/esm/renderer/base/hooks/index.js +121 -0
  119. package/dist/esm/renderer/base/renderer.js +178 -0
  120. package/dist/esm/renderer/base/rendererValidator.js +77 -0
  121. package/dist/esm/renderer/factory/index.js +38 -0
  122. package/dist/esm/renderer/field-renderers/AddonRenderer.js +55 -0
  123. package/dist/esm/renderer/field-renderers/CheckboxRenderer.js +93 -0
  124. package/dist/esm/renderer/field-renderers/DateRenderer.js +176 -0
  125. package/dist/esm/renderer/field-renderers/DropdownRenderer/hook.js +79 -0
  126. package/dist/esm/renderer/field-renderers/DropdownRenderer/index.js +186 -0
  127. package/dist/esm/renderer/field-renderers/LargeTextRenderer.js +179 -0
  128. package/dist/esm/renderer/field-renderers/NumberRenderer.js +188 -0
  129. package/dist/esm/renderer/field-renderers/RadioGroupRenderer.js +108 -0
  130. package/dist/esm/renderer/field-renderers/RadioRenderer.js +91 -0
  131. package/dist/esm/renderer/field-renderers/TextRenderer.js +197 -0
  132. package/dist/esm/renderer/field-renderers/ToggleRenderer.js +91 -0
  133. package/dist/esm/renderer/field-renderers/ZipCodeRenderer/helper.js +112 -0
  134. package/dist/esm/renderer/field-renderers/ZipCodeRenderer/hook.js +108 -0
  135. package/dist/esm/renderer/field-renderers/ZipCodeRenderer/index.js +247 -0
  136. package/dist/esm/renderer/index.js +4 -0
  137. package/dist/esm/renderer/styles.js +21 -0
  138. package/dist/esm/renderer/types.js +0 -0
  139. package/dist/esm/tests/base/flowBase.js +105 -0
  140. package/dist/esm/tests/base/index.js +22 -0
  141. package/dist/esm/tests/flows/checkboxRendererFlows.js +65 -0
  142. package/dist/esm/tests/flows/dateRendererFlows.js +850 -0
  143. package/dist/esm/tests/flows/dropdownRendererFlows.js +571 -0
  144. package/dist/esm/tests/flows/largeTextRendererFlows.js +79 -0
  145. package/dist/esm/tests/flows/numberRendererFlows.js +155 -0
  146. package/dist/esm/tests/flows/radioRendererFlows.js +95 -0
  147. package/dist/esm/tests/flows/textRendererFlows.js +329 -0
  148. package/dist/esm/tests/flows/toggleRendererFlows.js +86 -0
  149. package/dist/esm/tests/flows/zipCodeRendererFlows.js +1143 -0
  150. package/dist/esm/utils/dateHelper.js +35 -0
  151. package/dist/types/lib/bll/constants.d.ts +9 -0
  152. package/dist/types/lib/bll/formatters/booleanFormatter.d.ts +5 -0
  153. package/dist/types/lib/bll/formatters/dateFormatter.d.ts +28 -0
  154. package/dist/types/lib/bll/formatters/dropdownFormatter.d.ts +6 -0
  155. package/dist/types/lib/bll/formatters/factory/index.d.ts +71 -0
  156. package/dist/types/lib/bll/formatters/index.d.ts +2 -0
  157. package/dist/types/lib/bll/formatters/numberFormatter.d.ts +6 -0
  158. package/dist/types/lib/bll/formatters/phoneFormatter.d.ts +7 -0
  159. package/dist/types/lib/bll/formatters/regexFormatter.d.ts +5 -0
  160. package/dist/types/lib/bll/formatters/ssnFormatter.d.ts +5 -0
  161. package/dist/types/lib/bll/formatters/textFormatter.d.ts +6 -0
  162. package/dist/types/lib/bll/formatters/zipFormatter.d.ts +5 -0
  163. package/dist/types/lib/bll/index.d.ts +20 -0
  164. package/dist/types/lib/bll/ssf/index.d.ts +25 -0
  165. package/dist/types/lib/bll/ssf/loan.d.ts +16 -0
  166. package/dist/types/lib/bll/ssf/loconnect.d.ts +15 -0
  167. package/dist/types/lib/bll/ssf/ssfBase.d.ts +23 -0
  168. package/dist/types/lib/bll/ssf/types.d.ts +99 -0
  169. package/dist/types/lib/bll/types.d.ts +47 -0
  170. package/dist/types/lib/bll/validators/dateValidator.d.ts +16 -0
  171. package/dist/types/lib/bll/validators/emailValidator.d.ts +4 -0
  172. package/dist/types/lib/bll/validators/factory/index.d.ts +15 -0
  173. package/dist/types/lib/bll/validators/index.d.ts +2 -0
  174. package/dist/types/lib/bll/validators/maxCharValidator.d.ts +4 -0
  175. package/dist/types/lib/bll/validators/requiredValidator.d.ts +4 -0
  176. package/dist/types/lib/bll/validators/zipValidator.d.ts +5 -0
  177. package/dist/types/lib/core/index.d.ts +29 -0
  178. package/dist/types/lib/demo/config.d.ts +11 -0
  179. package/dist/types/lib/demo/index.d.ts +1 -0
  180. package/dist/types/lib/renderer/FieldRenderer.d.ts +5 -0
  181. package/dist/types/lib/renderer/base/hooks/fieldDescription.d.ts +5 -0
  182. package/dist/types/lib/renderer/base/hooks/fieldDisabled.d.ts +10 -0
  183. package/dist/types/lib/renderer/base/hooks/fieldGoTo.d.ts +4 -0
  184. package/dist/types/lib/renderer/base/hooks/fieldLocked.d.ts +4 -0
  185. package/dist/types/lib/renderer/base/hooks/fieldMeta.d.ts +10 -0
  186. package/dist/types/lib/renderer/base/hooks/fieldSubscribers.d.ts +6 -0
  187. package/dist/types/lib/renderer/base/hooks/fieldValidation.d.ts +9 -0
  188. package/dist/types/lib/renderer/base/hooks/fieldValue.d.ts +31 -0
  189. package/dist/types/lib/renderer/base/hooks/hookBase.d.ts +9 -0
  190. package/dist/types/lib/renderer/base/hooks/index.d.ts +19 -0
  191. package/dist/types/lib/renderer/base/renderer.d.ts +43 -0
  192. package/dist/types/lib/renderer/base/rendererValidator.d.ts +15 -0
  193. package/dist/types/lib/renderer/factory/index.d.ts +5 -0
  194. package/dist/types/lib/renderer/field-renderers/AddonRenderer.d.ts +12 -0
  195. package/dist/types/lib/renderer/field-renderers/CheckboxRenderer.d.ts +7 -0
  196. package/dist/types/lib/renderer/field-renderers/DateRenderer.d.ts +13 -0
  197. package/dist/types/lib/renderer/field-renderers/DropdownRenderer/hook.d.ts +23 -0
  198. package/dist/types/lib/renderer/field-renderers/DropdownRenderer/index.d.ts +12 -0
  199. package/dist/types/lib/renderer/field-renderers/LargeTextRenderer.d.ts +17 -0
  200. package/dist/types/lib/renderer/field-renderers/NumberRenderer.d.ts +12 -0
  201. package/dist/types/lib/renderer/field-renderers/RadioGroupRenderer.d.ts +8 -0
  202. package/dist/types/lib/renderer/field-renderers/RadioRenderer.d.ts +8 -0
  203. package/dist/types/lib/renderer/field-renderers/TextRenderer.d.ts +8 -0
  204. package/dist/types/lib/renderer/field-renderers/ToggleRenderer.d.ts +24 -0
  205. package/dist/types/lib/renderer/field-renderers/ZipCodeRenderer/helper.d.ts +48 -0
  206. package/dist/types/lib/renderer/field-renderers/ZipCodeRenderer/hook.d.ts +17 -0
  207. package/dist/types/lib/renderer/field-renderers/ZipCodeRenderer/index.d.ts +9 -0
  208. package/dist/types/lib/renderer/index.d.ts +2 -0
  209. package/dist/types/lib/renderer/styles.d.ts +7 -0
  210. package/dist/types/lib/renderer/types.d.ts +325 -0
  211. package/dist/types/lib/tests/base/flowBase.d.ts +13 -0
  212. package/dist/types/lib/tests/base/index.d.ts +6 -0
  213. package/dist/types/lib/tests/flows/checkboxRendererFlows.d.ts +9 -0
  214. package/dist/types/lib/tests/flows/dateRendererFlows.d.ts +120 -0
  215. package/dist/types/lib/tests/flows/dropdownRendererFlows.d.ts +92 -0
  216. package/dist/types/lib/tests/flows/largeTextRendererFlows.d.ts +9 -0
  217. package/dist/types/lib/tests/flows/numberRendererFlows.d.ts +11 -0
  218. package/dist/types/lib/tests/flows/radioRendererFlows.d.ts +10 -0
  219. package/dist/types/lib/tests/flows/textRendererFlows.d.ts +16 -0
  220. package/dist/types/lib/tests/flows/toggleRendererFlows.d.ts +10 -0
  221. package/dist/types/lib/tests/flows/zipCodeRendererFlows.d.ts +169 -0
  222. package/dist/types/lib/tests/loan-field-renderer-flows.test.d.ts +1 -0
  223. package/dist/types/lib/utils/dateHelper.d.ts +8 -0
  224. package/dist/types/tsconfig.tsbuildinfo +1 -0
  225. package/package.json +103 -0
@@ -0,0 +1,1163 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var zipCodeRendererFlows_exports = {};
20
+ __export(zipCodeRendererFlows_exports, {
21
+ ZipCodeRendererFlows: () => ZipCodeRendererFlows
22
+ });
23
+ module.exports = __toCommonJS(zipCodeRendererFlows_exports);
24
+ var import_flow_driven_testing = require("@elliemae/flow-driven-testing");
25
+ var import_react = require("@testing-library/react");
26
+ var import_flowBase = require("../base/flowBase");
27
+ const triggerZipLookupWithWait = async (selector, value) => {
28
+ const input = document.querySelector(selector);
29
+ if (input) {
30
+ import_react.fireEvent.change(input, { target: { value } });
31
+ await new Promise((resolve) => {
32
+ setTimeout(resolve, 300);
33
+ });
34
+ }
35
+ };
36
+ const triggerBlurWithWait = async (selector, value) => {
37
+ const input = document.querySelector(selector);
38
+ if (input) {
39
+ if (value !== void 0) {
40
+ import_react.fireEvent.change(input, { target: { value } });
41
+ }
42
+ import_react.fireEvent.focusOut(input);
43
+ await new Promise((resolve) => {
44
+ setTimeout(resolve, 200);
45
+ });
46
+ }
47
+ };
48
+ class ZipCodeRendererFlows extends import_flowBase.FlowBase {
49
+ constructor(flowParams) {
50
+ super(flowParams);
51
+ this.flowParams = flowParams;
52
+ }
53
+ flowParams;
54
+ /**
55
+ * Test 1: Verify zip code field renders correctly
56
+ */
57
+ CheckZipCodeRendering() {
58
+ return {
59
+ [`${this.flowParams.inboundFlow}`]: {
60
+ name: this.getFlowName(
61
+ "ZipCodeRenderer",
62
+ "check zip code field renders correctly"
63
+ ),
64
+ asserts: [
65
+ {
66
+ selector: '[data-testid="FR0108"]',
67
+ isExists: true
68
+ }
69
+ ],
70
+ transitions: [
71
+ {
72
+ to: "checkZipCodeInputValue"
73
+ }
74
+ ]
75
+ }
76
+ };
77
+ }
78
+ /**
79
+ * Test 2: Enter a valid 5-digit zip code and verify it triggers lookup
80
+ * Using 90210 which returns single result (auto-fill)
81
+ */
82
+ CheckZipCodeInputValue() {
83
+ return {
84
+ checkZipCodeInputValue: {
85
+ name: this.getFlowName(
86
+ "ZipCodeRenderer",
87
+ "check zip code input triggers lookup"
88
+ ),
89
+ waitForTimeout: 5e3,
90
+ startFlow: [
91
+ {
92
+ method: async () => {
93
+ await triggerZipLookupWithWait('[data-testid="FR0108"]', "90210");
94
+ }
95
+ }
96
+ ],
97
+ asserts: [
98
+ {
99
+ assertFn: () => {
100
+ const inputElement = document.querySelector(
101
+ '[data-testid="FR0108"]'
102
+ );
103
+ return inputElement && inputElement.value === "90210";
104
+ }
105
+ }
106
+ ],
107
+ transitions: [
108
+ {
109
+ to: "checkZipCodeBlurEvent"
110
+ }
111
+ ]
112
+ }
113
+ };
114
+ }
115
+ /**
116
+ * Test 3: Verify blur event triggers SSF setFields
117
+ */
118
+ CheckZipCodeBlurEvent() {
119
+ return {
120
+ checkZipCodeBlurEvent: {
121
+ name: this.getFlowName(
122
+ "ZipCodeRenderer",
123
+ "check blur event triggers SSF setFields"
124
+ ),
125
+ waitForTimeout: 5e3,
126
+ startFlow: [
127
+ {
128
+ method: async () => {
129
+ await triggerBlurWithWait('[data-testid="FR0108"]', "90210");
130
+ }
131
+ }
132
+ ],
133
+ asserts: [
134
+ {
135
+ ssfFunctionsCalled: ["setFields"]
136
+ },
137
+ {
138
+ assertFn: () => {
139
+ const inputElement = document.querySelector(
140
+ '[data-testid="FR0108"]'
141
+ );
142
+ return inputElement && inputElement.value === "90210";
143
+ }
144
+ }
145
+ ],
146
+ transitions: [
147
+ {
148
+ to: "checkGeoFieldsAutoFill"
149
+ }
150
+ ]
151
+ }
152
+ };
153
+ }
154
+ /**
155
+ * Test 4: Verify geo fields are auto-filled after single result lookup
156
+ * FR0108 has geoFields: city=FR0106, state=FR0107, county=FR0109
157
+ */
158
+ CheckGeoFieldsAutoFill() {
159
+ return {
160
+ checkGeoFieldsAutoFill: {
161
+ name: this.getFlowName(
162
+ "ZipCodeRenderer",
163
+ "check geo fields auto-fill after lookup"
164
+ ),
165
+ asserts: [
166
+ {
167
+ assertFn: () => {
168
+ const cityField = document.querySelector(
169
+ '[data-testid="FR0106"]'
170
+ );
171
+ return cityField !== null;
172
+ }
173
+ },
174
+ {
175
+ assertFn: () => {
176
+ const stateField = document.querySelector(
177
+ '[data-testid="FR0107"]'
178
+ );
179
+ return stateField !== null;
180
+ }
181
+ }
182
+ ],
183
+ transitions: [
184
+ {
185
+ to: "checkSecondZipCodeExists"
186
+ }
187
+ ]
188
+ }
189
+ };
190
+ }
191
+ /**
192
+ * Test 5: Verify second zip code field exists
193
+ */
194
+ CheckSecondZipCodeExists() {
195
+ return {
196
+ checkSecondZipCodeExists: {
197
+ name: this.getFlowName(
198
+ "ZipCodeRenderer",
199
+ "check second zip code field exists"
200
+ ),
201
+ asserts: [
202
+ {
203
+ selector: '[data-testid="15"]',
204
+ isExists: true
205
+ }
206
+ ],
207
+ transitions: [
208
+ {
209
+ to: "checkMultipleResultsDropdown"
210
+ }
211
+ ]
212
+ }
213
+ };
214
+ }
215
+ /**
216
+ * Test 6: Enter zip with multiple results to trigger autocomplete dropdown
217
+ * Using 10001 which returns multiple results
218
+ */
219
+ CheckMultipleResultsDropdown() {
220
+ return {
221
+ checkMultipleResultsDropdown: {
222
+ name: this.getFlowName(
223
+ "ZipCodeRenderer",
224
+ "check autocomplete dropdown appears for multiple results"
225
+ ),
226
+ waitForTimeout: 5e3,
227
+ startFlow: [
228
+ {
229
+ method: async () => {
230
+ await triggerZipLookupWithWait('[data-testid="15"]', "10001");
231
+ }
232
+ }
233
+ ],
234
+ asserts: [
235
+ {
236
+ assertFn: () => {
237
+ const inputElement = document.querySelector(
238
+ '[data-testid="15"]'
239
+ );
240
+ return inputElement && inputElement.value === "10001";
241
+ }
242
+ }
243
+ ],
244
+ transitions: [
245
+ {
246
+ to: "checkAutocompleteOptionSelect"
247
+ }
248
+ ]
249
+ }
250
+ };
251
+ }
252
+ /**
253
+ * Test 7: Verify autocomplete behavior works with blur (fallback path)
254
+ */
255
+ CheckAutocompleteOptionSelect() {
256
+ return {
257
+ checkAutocompleteOptionSelect: {
258
+ name: this.getFlowName(
259
+ "ZipCodeRenderer",
260
+ "check selecting option from autocomplete"
261
+ ),
262
+ waitForTimeout: 5e3,
263
+ startFlow: [
264
+ {
265
+ method: async () => {
266
+ await triggerBlurWithWait('[data-testid="15"]', "10001");
267
+ }
268
+ }
269
+ ],
270
+ asserts: [
271
+ {
272
+ ssfFunctionsCalled: ["setFields"]
273
+ },
274
+ {
275
+ assertFn: () => {
276
+ const inputElement = document.querySelector(
277
+ '[data-testid="15"]'
278
+ );
279
+ return inputElement && inputElement.value === "10001";
280
+ }
281
+ }
282
+ ],
283
+ transitions: [
284
+ {
285
+ to: "checkZipCodeClearValue"
286
+ }
287
+ ]
288
+ }
289
+ };
290
+ }
291
+ /**
292
+ * Test 8: Verify zip code field can be cleared
293
+ */
294
+ CheckZipCodeClearValue() {
295
+ return {
296
+ checkZipCodeClearValue: {
297
+ name: this.getFlowName(
298
+ "ZipCodeRenderer",
299
+ "check zip code can be cleared"
300
+ ),
301
+ waitForTimeout: 5e3,
302
+ startFlow: [
303
+ {
304
+ method: async () => {
305
+ const input = document.querySelector(
306
+ '[data-testid="15"]'
307
+ );
308
+ if (input) {
309
+ import_react.fireEvent.change(input, { target: { value: "" } });
310
+ await new Promise((resolve) => {
311
+ setTimeout(resolve, 100);
312
+ });
313
+ }
314
+ }
315
+ }
316
+ ],
317
+ asserts: [
318
+ {
319
+ assertFn: () => {
320
+ const inputElement = document.querySelector(
321
+ '[data-testid="15"]'
322
+ );
323
+ return inputElement && inputElement.value === "";
324
+ }
325
+ }
326
+ ],
327
+ transitions: [
328
+ {
329
+ to: "checkNonDigitInput"
330
+ }
331
+ ]
332
+ }
333
+ };
334
+ }
335
+ /**
336
+ * Test 9a: Test non-digit input handling (should be rejected)
337
+ * This covers the early return in handleUSZipChange for non-digit values
338
+ */
339
+ CheckNonDigitInput() {
340
+ return {
341
+ checkNonDigitInput: {
342
+ name: this.getFlowName(
343
+ "ZipCodeRenderer",
344
+ "check non-digit input is rejected"
345
+ ),
346
+ waitForTimeout: 5e3,
347
+ startFlow: [
348
+ {
349
+ method: async () => {
350
+ const input = document.querySelector(
351
+ '[data-testid="15"]'
352
+ );
353
+ if (input) {
354
+ import_react.fireEvent.change(input, { target: { value: "abc" } });
355
+ await new Promise((resolve) => {
356
+ setTimeout(resolve, 100);
357
+ });
358
+ }
359
+ }
360
+ }
361
+ ],
362
+ asserts: [
363
+ {
364
+ assertFn: () => {
365
+ const inputElement = document.querySelector(
366
+ '[data-testid="15"]'
367
+ );
368
+ return inputElement !== null;
369
+ }
370
+ }
371
+ ],
372
+ transitions: [
373
+ {
374
+ to: "checkThirdZipCodeExists"
375
+ }
376
+ ]
377
+ }
378
+ };
379
+ }
380
+ /**
381
+ * Test 9: Verify third zip code field exists (1260)
382
+ */
383
+ CheckThirdZipCodeExists() {
384
+ return {
385
+ checkThirdZipCodeExists: {
386
+ name: this.getFlowName(
387
+ "ZipCodeRenderer",
388
+ "check third zip code field exists"
389
+ ),
390
+ asserts: [
391
+ {
392
+ selector: '[data-testid="1260"]',
393
+ isExists: true
394
+ }
395
+ ],
396
+ transitions: [
397
+ {
398
+ to: "checkThirdZipCodeInput"
399
+ }
400
+ ]
401
+ }
402
+ };
403
+ }
404
+ /**
405
+ * Test 10: Enter value in third zip code field with auto-fill
406
+ */
407
+ CheckThirdZipCodeInput() {
408
+ return {
409
+ checkThirdZipCodeInput: {
410
+ name: this.getFlowName(
411
+ "ZipCodeRenderer",
412
+ "check third zip code input with auto-fill"
413
+ ),
414
+ waitForTimeout: 5e3,
415
+ startFlow: [
416
+ {
417
+ method: async () => {
418
+ await triggerZipLookupWithWait('[data-testid="1260"]', "94105");
419
+ await triggerBlurWithWait('[data-testid="1260"]');
420
+ }
421
+ }
422
+ ],
423
+ asserts: [
424
+ {
425
+ ssfFunctionsCalled: ["setFields"]
426
+ },
427
+ {
428
+ assertFn: () => {
429
+ const inputElement = document.querySelector(
430
+ '[data-testid="1260"]'
431
+ );
432
+ return inputElement && inputElement.value === "94105";
433
+ }
434
+ }
435
+ ],
436
+ transitions: [
437
+ {
438
+ to: "checkPartialZipCode"
439
+ }
440
+ ]
441
+ }
442
+ };
443
+ }
444
+ /**
445
+ * Test 11: Verify partial zip code doesn't trigger lookup
446
+ * Less than 5 digits should not trigger lookup
447
+ */
448
+ CheckPartialZipCode() {
449
+ return {
450
+ checkPartialZipCode: {
451
+ name: this.getFlowName(
452
+ "ZipCodeRenderer",
453
+ "check partial zip code does not trigger lookup"
454
+ ),
455
+ startFlow: [
456
+ {
457
+ selector: '[data-testid="FR0108"]',
458
+ value: "902",
459
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
460
+ }
461
+ ],
462
+ asserts: [
463
+ {
464
+ assertFn: () => {
465
+ const inputElement = document.querySelector(
466
+ '[data-testid="FR0108"]'
467
+ );
468
+ return inputElement && inputElement.value === "902";
469
+ }
470
+ }
471
+ ],
472
+ transitions: [
473
+ {
474
+ to: "checkZipCodeValueChange"
475
+ }
476
+ ]
477
+ }
478
+ };
479
+ }
480
+ /**
481
+ * Test 12: Verify zip code value changes are tracked
482
+ */
483
+ CheckZipCodeValueChange() {
484
+ return {
485
+ checkZipCodeValueChange: {
486
+ name: this.getFlowName(
487
+ "ZipCodeRenderer",
488
+ "check zip code value changes are tracked"
489
+ ),
490
+ waitForTimeout: 5e3,
491
+ startFlow: [
492
+ {
493
+ method: async () => {
494
+ await triggerZipLookupWithWait('[data-testid="FR0108"]', "75001");
495
+ await triggerBlurWithWait('[data-testid="FR0108"]');
496
+ }
497
+ }
498
+ ],
499
+ asserts: [
500
+ {
501
+ ssfFunctionsCalled: ["setFields"]
502
+ },
503
+ {
504
+ assertFn: () => {
505
+ const inputElement = document.querySelector(
506
+ '[data-testid="FR0108"]'
507
+ );
508
+ return inputElement && inputElement.value === "75001";
509
+ }
510
+ }
511
+ ],
512
+ transitions: [
513
+ {
514
+ to: "checkZipCodeValidation"
515
+ }
516
+ ]
517
+ }
518
+ };
519
+ }
520
+ /**
521
+ * Test 13: Verify validation is executed on blur
522
+ */
523
+ CheckZipCodeValidation() {
524
+ return {
525
+ checkZipCodeValidation: {
526
+ name: this.getFlowName(
527
+ "ZipCodeRenderer",
528
+ "check validation executes on blur"
529
+ ),
530
+ startFlow: [
531
+ {
532
+ selector: '[data-testid="FR0108"]',
533
+ action: import_flow_driven_testing.TTriggerActions.BLUR
534
+ }
535
+ ],
536
+ asserts: [
537
+ {
538
+ assertFn: () => {
539
+ const errorElement = document.querySelector(
540
+ '[id="FR0108_error_message"] span'
541
+ );
542
+ return !errorElement;
543
+ }
544
+ }
545
+ ],
546
+ transitions: [
547
+ {
548
+ to: "checkZipCodeWithDifferentGeoFields"
549
+ }
550
+ ]
551
+ }
552
+ };
553
+ }
554
+ /**
555
+ * Test 14: Test zip code with different geo field configuration
556
+ * Field 1419 has country field in geoFields and isForeignAddress=true
557
+ */
558
+ CheckZipCodeWithDifferentGeoFields() {
559
+ return {
560
+ checkZipCodeWithDifferentGeoFields: {
561
+ name: this.getFlowName(
562
+ "ZipCodeRenderer",
563
+ "check zip code with country geo field"
564
+ ),
565
+ asserts: [
566
+ {
567
+ selector: '[data-testid="1419"]',
568
+ isExists: true
569
+ }
570
+ ],
571
+ transitions: [
572
+ {
573
+ to: "checkFourthZipCodeInput"
574
+ }
575
+ ]
576
+ }
577
+ };
578
+ }
579
+ /**
580
+ * Test 15: Enter value in fourth zip code field (foreign address)
581
+ */
582
+ CheckFourthZipCodeInput() {
583
+ return {
584
+ checkFourthZipCodeInput: {
585
+ name: this.getFlowName(
586
+ "ZipCodeRenderer",
587
+ "check fourth zip code field input"
588
+ ),
589
+ startFlow: [
590
+ {
591
+ selector: '[data-testid="1419"]',
592
+ value: "SW1A 1AA",
593
+ action: import_flow_driven_testing.TTriggerActions.BLUR
594
+ }
595
+ ],
596
+ asserts: [
597
+ {
598
+ ssfFunctionsCalled: ["setFields"]
599
+ },
600
+ {
601
+ assertFn: () => {
602
+ const inputElement = document.querySelector(
603
+ '[data-testid="1419"]'
604
+ );
605
+ return inputElement && inputElement.value === "SW1A 1AA";
606
+ }
607
+ }
608
+ ],
609
+ transitions: [
610
+ {
611
+ to: "checkZipCodeSequentialChanges"
612
+ }
613
+ ]
614
+ }
615
+ };
616
+ }
617
+ /**
618
+ * Test 16: Test zip code with sequential value changes to cover onChange path
619
+ */
620
+ CheckZipCodeSequentialChanges() {
621
+ return {
622
+ checkZipCodeSequentialChanges: {
623
+ name: this.getFlowName(
624
+ "ZipCodeRenderer",
625
+ "check sequential value changes"
626
+ ),
627
+ startFlow: [
628
+ {
629
+ selector: '[data-testid="FR0108"]',
630
+ value: "9",
631
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
632
+ },
633
+ {
634
+ selector: '[data-testid="FR0108"]',
635
+ value: "90",
636
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
637
+ },
638
+ {
639
+ selector: '[data-testid="FR0108"]',
640
+ value: "902",
641
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
642
+ },
643
+ {
644
+ selector: '[data-testid="FR0108"]',
645
+ value: "9021",
646
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
647
+ },
648
+ {
649
+ selector: '[data-testid="FR0108"]',
650
+ value: "90210",
651
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
652
+ }
653
+ ],
654
+ asserts: [
655
+ {
656
+ assertFn: () => {
657
+ const inputElement = document.querySelector(
658
+ '[data-testid="FR0108"]'
659
+ );
660
+ return inputElement && inputElement.value === "90210";
661
+ }
662
+ }
663
+ ],
664
+ transitions: [
665
+ {
666
+ to: "checkZipCodeInputFocus"
667
+ }
668
+ ]
669
+ }
670
+ };
671
+ }
672
+ /**
673
+ * Test 17: Test input focus and blur cycle
674
+ */
675
+ CheckZipCodeInputFocus() {
676
+ return {
677
+ checkZipCodeInputFocus: {
678
+ name: this.getFlowName(
679
+ "ZipCodeRenderer",
680
+ "check input focus and blur cycle"
681
+ ),
682
+ startFlow: [
683
+ {
684
+ selector: '[data-testid="1260"]',
685
+ action: import_flow_driven_testing.TTriggerActions.CLICK
686
+ },
687
+ {
688
+ selector: '[data-testid="1260"]',
689
+ value: "75001",
690
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
691
+ },
692
+ {
693
+ selector: '[data-testid="1260"]',
694
+ action: import_flow_driven_testing.TTriggerActions.BLUR
695
+ }
696
+ ],
697
+ asserts: [
698
+ {
699
+ ssfFunctionsCalled: ["setFields"]
700
+ },
701
+ {
702
+ assertFn: () => {
703
+ const inputElement = document.querySelector(
704
+ '[data-testid="1260"]'
705
+ );
706
+ return inputElement && inputElement.value === "75001";
707
+ }
708
+ }
709
+ ],
710
+ transitions: [
711
+ {
712
+ to: "checkZipCodeWithEmptyBlur"
713
+ }
714
+ ]
715
+ }
716
+ };
717
+ }
718
+ /**
719
+ * Test 18: Test empty value on blur (covers clearOptions path)
720
+ */
721
+ CheckZipCodeWithEmptyBlur() {
722
+ return {
723
+ checkZipCodeWithEmptyBlur: {
724
+ name: this.getFlowName(
725
+ "ZipCodeRenderer",
726
+ "check empty value on blur clears properly"
727
+ ),
728
+ startFlow: [
729
+ {
730
+ selector: '[data-testid="1260"]',
731
+ value: "",
732
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
733
+ },
734
+ {
735
+ selector: '[data-testid="1260"]',
736
+ action: import_flow_driven_testing.TTriggerActions.BLUR
737
+ }
738
+ ],
739
+ asserts: [
740
+ {
741
+ assertFn: () => {
742
+ const inputElement = document.querySelector(
743
+ '[data-testid="1260"]'
744
+ );
745
+ return inputElement && inputElement.value === "";
746
+ }
747
+ }
748
+ ],
749
+ transitions: [
750
+ {
751
+ to: "checkZipCodeNoResultsLookup"
752
+ }
753
+ ]
754
+ }
755
+ };
756
+ }
757
+ /**
758
+ * Test 19: Test zip code that returns no results
759
+ * Using 00000 which should return empty results
760
+ */
761
+ CheckZipCodeNoResultsLookup() {
762
+ return {
763
+ checkZipCodeNoResultsLookup: {
764
+ name: this.getFlowName(
765
+ "ZipCodeRenderer",
766
+ "check no results lookup handling"
767
+ ),
768
+ waitForTimeout: 5e3,
769
+ startFlow: [
770
+ {
771
+ method: async () => {
772
+ await triggerZipLookupWithWait('[data-testid="15"]', "00000");
773
+ await triggerBlurWithWait('[data-testid="15"]');
774
+ }
775
+ }
776
+ ],
777
+ asserts: [
778
+ {
779
+ ssfFunctionsCalled: ["setFields"]
780
+ },
781
+ {
782
+ assertFn: () => {
783
+ const inputElement = document.querySelector(
784
+ '[data-testid="15"]'
785
+ );
786
+ return inputElement && inputElement.value === "00000";
787
+ }
788
+ }
789
+ ],
790
+ transitions: [
791
+ {
792
+ to: "checkZipCodeReEntryValue"
793
+ }
794
+ ]
795
+ }
796
+ };
797
+ }
798
+ /**
799
+ * Test 20: Test re-entering zip code value after clear
800
+ */
801
+ CheckZipCodeReEntryValue() {
802
+ return {
803
+ checkZipCodeReEntryValue: {
804
+ name: this.getFlowName(
805
+ "ZipCodeRenderer",
806
+ "check re-entry value after clear"
807
+ ),
808
+ waitForTimeout: 5e3,
809
+ startFlow: [
810
+ {
811
+ method: async () => {
812
+ await triggerZipLookupWithWait('[data-testid="15"]', "94105");
813
+ await triggerBlurWithWait('[data-testid="15"]');
814
+ }
815
+ }
816
+ ],
817
+ asserts: [
818
+ {
819
+ ssfFunctionsCalled: ["setFields"]
820
+ },
821
+ {
822
+ assertFn: () => {
823
+ const inputElement = document.querySelector(
824
+ '[data-testid="15"]'
825
+ );
826
+ return inputElement && inputElement.value === "94105";
827
+ }
828
+ }
829
+ ],
830
+ transitions: [
831
+ {
832
+ to: "checkZipCodeBlurWithValue"
833
+ }
834
+ ]
835
+ }
836
+ };
837
+ }
838
+ /**
839
+ * Test 21: Test blur event with existing value (validation path)
840
+ */
841
+ CheckZipCodeBlurWithValue() {
842
+ return {
843
+ checkZipCodeBlurWithValue: {
844
+ name: this.getFlowName(
845
+ "ZipCodeRenderer",
846
+ "check blur with existing value triggers validation"
847
+ ),
848
+ startFlow: [
849
+ {
850
+ selector: '[data-testid="FR0108"]',
851
+ action: import_flow_driven_testing.TTriggerActions.BLUR
852
+ }
853
+ ],
854
+ asserts: [
855
+ {
856
+ ssfFunctionsCalled: ["setFields"]
857
+ }
858
+ ],
859
+ transitions: [
860
+ {
861
+ to: "checkForeignAddressFieldRendering"
862
+ }
863
+ ]
864
+ }
865
+ };
866
+ }
867
+ /**
868
+ * Test 22: Verify foreign address field renders correctly
869
+ * Field 1419 has isForeignAddress=true
870
+ */
871
+ CheckForeignAddressFieldRendering() {
872
+ return {
873
+ checkForeignAddressFieldRendering: {
874
+ name: this.getFlowName(
875
+ "ZipCodeRenderer",
876
+ "check foreign address field renders correctly"
877
+ ),
878
+ asserts: [
879
+ {
880
+ selector: '[data-testid="1419"]',
881
+ isExists: true
882
+ },
883
+ {
884
+ assertFn: () => {
885
+ const inputElement = document.querySelector(
886
+ '[data-testid="1419"]'
887
+ );
888
+ return inputElement !== null;
889
+ }
890
+ }
891
+ ],
892
+ transitions: [
893
+ {
894
+ to: "checkForeignAddressInput"
895
+ }
896
+ ]
897
+ }
898
+ };
899
+ }
900
+ /**
901
+ * Test 23: Test foreign address input (covers handleForeignAddressChange)
902
+ */
903
+ CheckForeignAddressInput() {
904
+ return {
905
+ checkForeignAddressInput: {
906
+ name: this.getFlowName(
907
+ "ZipCodeRenderer",
908
+ "check foreign address input handling"
909
+ ),
910
+ startFlow: [
911
+ {
912
+ selector: '[data-testid="1419"]',
913
+ value: "EC1A 1BB",
914
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
915
+ }
916
+ ],
917
+ asserts: [
918
+ {
919
+ assertFn: () => {
920
+ const inputElement = document.querySelector(
921
+ '[data-testid="1419"]'
922
+ );
923
+ return inputElement && inputElement.value === "EC1A 1BB";
924
+ }
925
+ }
926
+ ],
927
+ transitions: [
928
+ {
929
+ to: "checkForeignAddressBlur"
930
+ }
931
+ ]
932
+ }
933
+ };
934
+ }
935
+ /**
936
+ * Test 24: Test foreign address blur event
937
+ */
938
+ CheckForeignAddressBlur() {
939
+ return {
940
+ checkForeignAddressBlur: {
941
+ name: this.getFlowName(
942
+ "ZipCodeRenderer",
943
+ "check foreign address blur triggers SSF"
944
+ ),
945
+ startFlow: [
946
+ {
947
+ selector: '[data-testid="1419"]',
948
+ action: import_flow_driven_testing.TTriggerActions.BLUR
949
+ }
950
+ ],
951
+ asserts: [
952
+ {
953
+ ssfFunctionsCalled: ["setFields"]
954
+ },
955
+ {
956
+ assertFn: () => {
957
+ const inputElement = document.querySelector(
958
+ '[data-testid="1419"]'
959
+ );
960
+ return inputElement && inputElement.value === "EC1A 1BB";
961
+ }
962
+ }
963
+ ],
964
+ transitions: [
965
+ {
966
+ to: "checkForeignAddressValueChange"
967
+ }
968
+ ]
969
+ }
970
+ };
971
+ }
972
+ /**
973
+ * Test 25: Test foreign address value change
974
+ */
975
+ CheckForeignAddressValueChange() {
976
+ return {
977
+ checkForeignAddressValueChange: {
978
+ name: this.getFlowName(
979
+ "ZipCodeRenderer",
980
+ "check foreign address value change"
981
+ ),
982
+ startFlow: [
983
+ {
984
+ selector: '[data-testid="1419"]',
985
+ value: "W1A 0AX",
986
+ action: import_flow_driven_testing.TTriggerActions.CHANGE
987
+ },
988
+ {
989
+ selector: '[data-testid="1419"]',
990
+ action: import_flow_driven_testing.TTriggerActions.BLUR
991
+ }
992
+ ],
993
+ asserts: [
994
+ {
995
+ ssfFunctionsCalled: ["setFields"]
996
+ },
997
+ {
998
+ assertFn: () => {
999
+ const inputElement = document.querySelector(
1000
+ '[data-testid="1419"]'
1001
+ );
1002
+ return inputElement && inputElement.value === "W1A 0AX";
1003
+ }
1004
+ }
1005
+ ],
1006
+ transitions: [
1007
+ {
1008
+ to: "checkForeignAddressFinalState"
1009
+ }
1010
+ ]
1011
+ }
1012
+ };
1013
+ }
1014
+ /**
1015
+ * Test 26: Verify foreign address final state
1016
+ */
1017
+ CheckForeignAddressFinalState() {
1018
+ return {
1019
+ checkForeignAddressFinalState: {
1020
+ name: this.getFlowName(
1021
+ "ZipCodeRenderer",
1022
+ "check foreign address final state"
1023
+ ),
1024
+ asserts: [
1025
+ {
1026
+ assertFn: () => {
1027
+ const inputElement = document.querySelector(
1028
+ '[data-testid="1419"]'
1029
+ );
1030
+ return inputElement && inputElement.value.length > 0;
1031
+ }
1032
+ }
1033
+ ],
1034
+ transitions: [
1035
+ {
1036
+ to: "checkAutocompleteMenuSelection"
1037
+ }
1038
+ ]
1039
+ }
1040
+ };
1041
+ }
1042
+ /**
1043
+ * Test 27: Trigger lookup to show autocomplete menu and select an option
1044
+ * This covers handleOptionSelect path and autocomplete interactions
1045
+ */
1046
+ CheckAutocompleteMenuSelection() {
1047
+ return {
1048
+ checkAutocompleteMenuSelection: {
1049
+ name: this.getFlowName(
1050
+ "ZipCodeRenderer",
1051
+ "check autocomplete menu selection triggers geo fill"
1052
+ ),
1053
+ waitForTimeout: 5e3,
1054
+ startFlow: [
1055
+ {
1056
+ method: async () => {
1057
+ const input = document.querySelector(
1058
+ '[data-testid="FR0108"]'
1059
+ );
1060
+ if (input) {
1061
+ import_react.fireEvent.focus(input);
1062
+ import_react.fireEvent.change(input, { target: { value: "10001" } });
1063
+ await new Promise((resolve) => {
1064
+ setTimeout(resolve, 400);
1065
+ });
1066
+ const menuOptions = document.querySelectorAll(
1067
+ '[role="listbox"] [role="option"], [data-testid*="autocomplete"] li, .ds-autocomplete-menu li, ul[role="listbox"] li'
1068
+ );
1069
+ if (menuOptions.length > 0) {
1070
+ import_react.fireEvent.click(menuOptions[0]);
1071
+ await new Promise((resolve) => {
1072
+ setTimeout(resolve, 200);
1073
+ });
1074
+ }
1075
+ import_react.fireEvent.blur(input);
1076
+ await new Promise((resolve) => {
1077
+ setTimeout(resolve, 200);
1078
+ });
1079
+ }
1080
+ }
1081
+ }
1082
+ ],
1083
+ asserts: [
1084
+ {
1085
+ ssfFunctionsCalled: ["setFields"]
1086
+ },
1087
+ {
1088
+ assertFn: () => {
1089
+ const inputElement = document.querySelector(
1090
+ '[data-testid="FR0108"]'
1091
+ );
1092
+ return inputElement && inputElement.value.length > 0;
1093
+ }
1094
+ }
1095
+ ],
1096
+ transitions: [
1097
+ {
1098
+ to: "checkZipCodeFinalState"
1099
+ }
1100
+ ]
1101
+ }
1102
+ };
1103
+ }
1104
+ /**
1105
+ * Test 28: Final state verification - all zip code fields present and valid
1106
+ */
1107
+ CheckZipCodeFinalState() {
1108
+ const transitions = this.flowParams.outboundFlow ? [{ to: this.flowParams.outboundFlow }] : [];
1109
+ return {
1110
+ checkZipCodeFinalState: {
1111
+ name: this.getFlowName(
1112
+ "ZipCodeRenderer",
1113
+ "check all zip code fields final state is valid"
1114
+ ),
1115
+ asserts: [
1116
+ {
1117
+ assertFn: () => {
1118
+ const zip1 = document.querySelector('[data-testid="FR0108"]');
1119
+ const zip2 = document.querySelector('[data-testid="15"]');
1120
+ const zip3 = document.querySelector('[data-testid="1260"]');
1121
+ const zip4 = document.querySelector('[data-testid="1419"]');
1122
+ return zip1 !== null && zip2 !== null && zip3 !== null && zip4 !== null;
1123
+ }
1124
+ }
1125
+ ],
1126
+ ...transitions.length > 0 && { transitions }
1127
+ }
1128
+ };
1129
+ }
1130
+ get Flows() {
1131
+ return {
1132
+ ...this.CheckZipCodeRendering(),
1133
+ ...this.CheckZipCodeInputValue(),
1134
+ ...this.CheckZipCodeBlurEvent(),
1135
+ ...this.CheckGeoFieldsAutoFill(),
1136
+ ...this.CheckSecondZipCodeExists(),
1137
+ ...this.CheckMultipleResultsDropdown(),
1138
+ ...this.CheckAutocompleteOptionSelect(),
1139
+ ...this.CheckZipCodeClearValue(),
1140
+ ...this.CheckNonDigitInput(),
1141
+ ...this.CheckThirdZipCodeExists(),
1142
+ ...this.CheckThirdZipCodeInput(),
1143
+ ...this.CheckPartialZipCode(),
1144
+ ...this.CheckZipCodeValueChange(),
1145
+ ...this.CheckZipCodeValidation(),
1146
+ ...this.CheckZipCodeWithDifferentGeoFields(),
1147
+ ...this.CheckFourthZipCodeInput(),
1148
+ ...this.CheckZipCodeSequentialChanges(),
1149
+ ...this.CheckZipCodeInputFocus(),
1150
+ ...this.CheckZipCodeWithEmptyBlur(),
1151
+ ...this.CheckZipCodeNoResultsLookup(),
1152
+ ...this.CheckZipCodeReEntryValue(),
1153
+ ...this.CheckZipCodeBlurWithValue(),
1154
+ ...this.CheckForeignAddressFieldRendering(),
1155
+ ...this.CheckForeignAddressInput(),
1156
+ ...this.CheckForeignAddressBlur(),
1157
+ ...this.CheckForeignAddressValueChange(),
1158
+ ...this.CheckForeignAddressFinalState(),
1159
+ ...this.CheckAutocompleteMenuSelection(),
1160
+ ...this.CheckZipCodeFinalState()
1161
+ };
1162
+ }
1163
+ }