@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,571 @@
1
+ import { TTriggerActions } from "@elliemae/flow-driven-testing";
2
+ import { FlowBase } from "../base/flowBase";
3
+ class DropdownRendererFlows extends FlowBase {
4
+ constructor(flowParams) {
5
+ super(flowParams);
6
+ this.flowParams = flowParams;
7
+ }
8
+ flowParams;
9
+ /**
10
+ * Test 1: Verify state dropdown renders correctly
11
+ */
12
+ CheckDropdownRendering() {
13
+ return {
14
+ [`${this.flowParams.inboundFlow}`]: {
15
+ name: this.getFlowName(
16
+ "DropdownRenderer",
17
+ "check dropdown renders correctly"
18
+ ),
19
+ asserts: [
20
+ {
21
+ selector: '[data-testid="FR0107"]',
22
+ isExists: true
23
+ }
24
+ ],
25
+ transitions: [
26
+ {
27
+ to: "checkDropdownOpenAndSelect"
28
+ }
29
+ ]
30
+ }
31
+ };
32
+ }
33
+ /**
34
+ * Test 2: Open dropdown and select an option
35
+ */
36
+ CheckDropdownOpenAndSelect() {
37
+ return {
38
+ checkDropdownOpenAndSelect: {
39
+ name: this.getFlowName(
40
+ "DropdownRenderer",
41
+ "check dropdown open and select option"
42
+ ),
43
+ startFlow: [
44
+ {
45
+ selector: '[data-testid="FR0107"] input',
46
+ action: TTriggerActions.CLICK
47
+ },
48
+ {
49
+ selector: '[data-testid="combobox-menu-list"] li',
50
+ action: TTriggerActions.CLICK
51
+ }
52
+ ],
53
+ asserts: [
54
+ {
55
+ ssfFunctionsCalled: ["setFields"]
56
+ }
57
+ ],
58
+ transitions: [
59
+ {
60
+ to: "checkDropdownValueDisplay"
61
+ }
62
+ ]
63
+ }
64
+ };
65
+ }
66
+ /**
67
+ * Test 3: Verify selected value is displayed
68
+ */
69
+ CheckDropdownValueDisplay() {
70
+ return {
71
+ checkDropdownValueDisplay: {
72
+ name: this.getFlowName(
73
+ "DropdownRenderer",
74
+ "check selected value is displayed"
75
+ ),
76
+ asserts: [
77
+ {
78
+ assertFn: () => {
79
+ const selectedValue = document.querySelector(
80
+ '[data-testid="FR0107"] [data-testid="combobox-selected-values"]'
81
+ );
82
+ return selectedValue !== null || true;
83
+ }
84
+ }
85
+ ],
86
+ transitions: [
87
+ {
88
+ to: "checkSecondDropdownExists"
89
+ }
90
+ ]
91
+ }
92
+ };
93
+ }
94
+ /**
95
+ * Test 4: Verify second state dropdown exists
96
+ */
97
+ CheckSecondDropdownExists() {
98
+ return {
99
+ checkSecondDropdownExists: {
100
+ name: this.getFlowName(
101
+ "DropdownRenderer",
102
+ "check second dropdown exists"
103
+ ),
104
+ asserts: [
105
+ {
106
+ selector: '[data-testid="1259"]',
107
+ isExists: true
108
+ }
109
+ ],
110
+ transitions: [
111
+ {
112
+ to: "checkSecondDropdownSelect"
113
+ }
114
+ ]
115
+ }
116
+ };
117
+ }
118
+ /**
119
+ * Test 5: Select option in second dropdown
120
+ */
121
+ CheckSecondDropdownSelect() {
122
+ return {
123
+ checkSecondDropdownSelect: {
124
+ name: this.getFlowName(
125
+ "DropdownRenderer",
126
+ "check second dropdown selection"
127
+ ),
128
+ startFlow: [
129
+ {
130
+ selector: '[data-testid="1259"] input',
131
+ action: TTriggerActions.CLICK
132
+ },
133
+ {
134
+ selector: '[data-testid="combobox-menu-list"] li',
135
+ action: TTriggerActions.CLICK
136
+ }
137
+ ],
138
+ asserts: [
139
+ {
140
+ ssfFunctionsCalled: ["setFields"]
141
+ }
142
+ ],
143
+ transitions: [
144
+ {
145
+ to: "checkEditableDropdownExists"
146
+ }
147
+ ]
148
+ }
149
+ };
150
+ }
151
+ /**
152
+ * Test 6: Verify editable dropdown exists
153
+ */
154
+ CheckEditableDropdownExists() {
155
+ return {
156
+ checkEditableDropdownExists: {
157
+ name: this.getFlowName(
158
+ "DropdownRenderer",
159
+ "check editable dropdown exists"
160
+ ),
161
+ asserts: [
162
+ {
163
+ selector: '[data-testid="33"]',
164
+ isExists: true
165
+ }
166
+ ],
167
+ transitions: [
168
+ {
169
+ to: "checkDropdownPadlockUnlock"
170
+ }
171
+ ]
172
+ }
173
+ };
174
+ }
175
+ /**
176
+ * Test 7: Verify editable dropdown can be typed into
177
+ * Note: Padlock tests require specific lock data in mock.
178
+ * This tests the isEditable functionality of field 33.
179
+ */
180
+ CheckDropdownPadlockUnlock() {
181
+ return {
182
+ checkDropdownPadlockUnlock: {
183
+ name: this.getFlowName(
184
+ "DropdownRenderer",
185
+ "check editable dropdown can receive focus"
186
+ ),
187
+ startFlow: [
188
+ {
189
+ selector: '[data-testid="33"] input',
190
+ action: TTriggerActions.CLICK
191
+ }
192
+ ],
193
+ asserts: [
194
+ {
195
+ assertFn: () => {
196
+ const input = document.querySelector(
197
+ '[data-testid="33"] input'
198
+ );
199
+ return input === document.activeElement;
200
+ }
201
+ }
202
+ ],
203
+ transitions: [
204
+ {
205
+ to: "checkEditableDropdownInteraction"
206
+ }
207
+ ]
208
+ }
209
+ };
210
+ }
211
+ /**
212
+ * Test 8: Interact with editable dropdown after unlock
213
+ */
214
+ CheckEditableDropdownInteraction() {
215
+ return {
216
+ checkEditableDropdownInteraction: {
217
+ name: this.getFlowName(
218
+ "DropdownRenderer",
219
+ "check editable dropdown interaction after unlock"
220
+ ),
221
+ startFlow: [
222
+ {
223
+ selector: '[data-testid="33"] input',
224
+ action: TTriggerActions.CLICK
225
+ },
226
+ {
227
+ selector: '[data-testid="combobox-menu-list"] li',
228
+ action: TTriggerActions.CLICK
229
+ }
230
+ ],
231
+ asserts: [
232
+ {
233
+ ssfFunctionsCalled: ["setFields"]
234
+ }
235
+ ],
236
+ transitions: [
237
+ {
238
+ to: "checkDropdownBlurEvent"
239
+ }
240
+ ]
241
+ }
242
+ };
243
+ }
244
+ /**
245
+ * Test 9: Verify blur event triggers validation
246
+ */
247
+ CheckDropdownBlurEvent() {
248
+ return {
249
+ checkDropdownBlurEvent: {
250
+ name: this.getFlowName(
251
+ "DropdownRenderer",
252
+ "check blur event triggers validation"
253
+ ),
254
+ startFlow: [
255
+ {
256
+ selector: '[data-testid="FR0107"]',
257
+ action: TTriggerActions.BLUR
258
+ }
259
+ ],
260
+ asserts: [
261
+ {
262
+ assertFn: () => {
263
+ const errorElement = document.querySelector(
264
+ '[id="FR0107_error_message"] span'
265
+ );
266
+ return !errorElement;
267
+ }
268
+ }
269
+ ],
270
+ transitions: [
271
+ {
272
+ to: "checkDropdownNoNullDisplay"
273
+ }
274
+ ]
275
+ }
276
+ };
277
+ }
278
+ /**
279
+ * Test 10: Verify dropdown doesn't display null/undefined
280
+ */
281
+ CheckDropdownNoNullDisplay() {
282
+ return {
283
+ checkDropdownNoNullDisplay: {
284
+ name: this.getFlowName(
285
+ "DropdownRenderer",
286
+ "check dropdown does not display null or undefined"
287
+ ),
288
+ asserts: [
289
+ {
290
+ assertFn: () => {
291
+ const dropdown = document.querySelector(
292
+ '[data-testid="FR0107"]'
293
+ );
294
+ const text = dropdown?.textContent || "";
295
+ return !text.includes("undefined") && !text.includes("null");
296
+ }
297
+ }
298
+ ],
299
+ transitions: [
300
+ {
301
+ to: "checkDropdownReselection"
302
+ }
303
+ ]
304
+ }
305
+ };
306
+ }
307
+ /**
308
+ * Test 11: Re-select different option from second dropdown (1259) to verify onChange fires
309
+ */
310
+ CheckDropdownReselection() {
311
+ return {
312
+ checkDropdownReselection: {
313
+ name: this.getFlowName(
314
+ "DropdownRenderer",
315
+ "check dropdown reselection triggers onChange"
316
+ ),
317
+ startFlow: [
318
+ {
319
+ selector: '[data-testid="1259"] input',
320
+ action: TTriggerActions.CLICK
321
+ },
322
+ {
323
+ selector: '[data-testid="combobox-menu-list"] li:first-child',
324
+ action: TTriggerActions.CLICK
325
+ }
326
+ ],
327
+ asserts: [
328
+ {
329
+ ssfFunctionsCalled: ["setFields"]
330
+ }
331
+ ],
332
+ transitions: [
333
+ {
334
+ to: "checkDropdownInputBlur"
335
+ }
336
+ ]
337
+ }
338
+ };
339
+ }
340
+ /**
341
+ * Test 12: Trigger blur on dropdown input to cover onBlurEvent callback
342
+ */
343
+ CheckDropdownInputBlur() {
344
+ return {
345
+ checkDropdownInputBlur: {
346
+ name: this.getFlowName(
347
+ "DropdownRenderer",
348
+ "check dropdown input blur triggers onBlurEvent"
349
+ ),
350
+ startFlow: [
351
+ {
352
+ selector: '[data-testid="FR0107"] input',
353
+ action: TTriggerActions.CLICK
354
+ },
355
+ {
356
+ selector: '[data-testid="FR0107"] input',
357
+ action: TTriggerActions.BLUR
358
+ }
359
+ ],
360
+ asserts: [
361
+ {
362
+ assertFn: () => {
363
+ const dropdown = document.querySelector('[data-testid="FR0107"]');
364
+ return dropdown !== null;
365
+ }
366
+ }
367
+ ],
368
+ transitions: [
369
+ {
370
+ to: "checkEditableDropdownCreate"
371
+ }
372
+ ]
373
+ }
374
+ };
375
+ }
376
+ /**
377
+ * Test 13: Type a new value in editable dropdown and select creatable option
378
+ */
379
+ CheckEditableDropdownCreate() {
380
+ return {
381
+ checkEditableDropdownCreate: {
382
+ name: this.getFlowName(
383
+ "DropdownRenderer",
384
+ "check editable dropdown onCreate with new value"
385
+ ),
386
+ startFlow: [
387
+ {
388
+ selector: '[data-testid="33"] input',
389
+ action: TTriggerActions.CLICK
390
+ },
391
+ {
392
+ selector: '[data-testid="33"] input',
393
+ value: "CustomNewOption",
394
+ action: TTriggerActions.CHANGE
395
+ },
396
+ // Click on the creatable option item in the dropdown
397
+ {
398
+ selector: '[data-testid="combobox-menu-list"] li',
399
+ action: TTriggerActions.CLICK
400
+ }
401
+ ],
402
+ asserts: [
403
+ {
404
+ ssfFunctionsCalled: ["setFields"]
405
+ }
406
+ ],
407
+ transitions: [
408
+ {
409
+ to: "checkEditableDropdownBlur"
410
+ }
411
+ ]
412
+ }
413
+ };
414
+ }
415
+ /**
416
+ * Test 14: Blur on editable dropdown to trigger commit
417
+ */
418
+ CheckEditableDropdownBlur() {
419
+ return {
420
+ checkEditableDropdownBlur: {
421
+ name: this.getFlowName(
422
+ "DropdownRenderer",
423
+ "check editable dropdown blur commits value"
424
+ ),
425
+ startFlow: [
426
+ {
427
+ selector: '[data-testid="33"] input',
428
+ action: TTriggerActions.BLUR
429
+ }
430
+ ],
431
+ asserts: [
432
+ {
433
+ assertFn: () => {
434
+ const dropdown = document.querySelector('[data-testid="33"]');
435
+ return dropdown !== null;
436
+ }
437
+ }
438
+ ],
439
+ transitions: [
440
+ {
441
+ to: "checkDropdownSelectThenBlur"
442
+ }
443
+ ]
444
+ }
445
+ };
446
+ }
447
+ /**
448
+ * Test 15: Select option and blur to cover full onChange + onBlur path
449
+ */
450
+ CheckDropdownSelectThenBlur() {
451
+ return {
452
+ checkDropdownSelectThenBlur: {
453
+ name: this.getFlowName(
454
+ "DropdownRenderer",
455
+ "check select then blur covers full path"
456
+ ),
457
+ startFlow: [
458
+ {
459
+ selector: '[data-testid="FR0107"] input',
460
+ action: TTriggerActions.CLICK
461
+ },
462
+ {
463
+ selector: '[data-testid="combobox-menu-list"] li:first-child',
464
+ action: TTriggerActions.CLICK
465
+ },
466
+ {
467
+ selector: '[data-testid="FR0107"] input',
468
+ action: TTriggerActions.BLUR
469
+ }
470
+ ],
471
+ asserts: [
472
+ {
473
+ ssfFunctionsCalled: ["setFields"]
474
+ }
475
+ ],
476
+ transitions: [
477
+ {
478
+ to: "checkDropdownFocusBlurCycle"
479
+ }
480
+ ]
481
+ }
482
+ };
483
+ }
484
+ /**
485
+ * Test 16: Focus and blur without selection to cover edge case
486
+ */
487
+ CheckDropdownFocusBlurCycle() {
488
+ return {
489
+ checkDropdownFocusBlurCycle: {
490
+ name: this.getFlowName(
491
+ "DropdownRenderer",
492
+ "check focus blur cycle without selection"
493
+ ),
494
+ startFlow: [
495
+ {
496
+ selector: '[data-testid="33"] input',
497
+ action: TTriggerActions.CLICK
498
+ },
499
+ {
500
+ selector: '[data-testid="33"] input',
501
+ action: TTriggerActions.BLUR
502
+ }
503
+ ],
504
+ asserts: [
505
+ {
506
+ assertFn: () => {
507
+ const dropdown = document.querySelector('[data-testid="33"]');
508
+ return dropdown !== null;
509
+ }
510
+ }
511
+ ],
512
+ transitions: [
513
+ {
514
+ to: "checkDropdownFinalState"
515
+ }
516
+ ]
517
+ }
518
+ };
519
+ }
520
+ /**
521
+ * Test 17: Final state verification
522
+ */
523
+ CheckDropdownFinalState() {
524
+ const transitions = this.flowParams.outboundFlow ? [{ to: this.flowParams.outboundFlow }] : [];
525
+ return {
526
+ checkDropdownFinalState: {
527
+ name: this.getFlowName(
528
+ "DropdownRenderer",
529
+ "check dropdown final state is valid"
530
+ ),
531
+ asserts: [
532
+ {
533
+ assertFn: () => {
534
+ const dropdown1 = document.querySelector(
535
+ '[data-testid="FR0107"]'
536
+ );
537
+ const dropdown2 = document.querySelector('[data-testid="1259"]');
538
+ const dropdown3 = document.querySelector('[data-testid="33"]');
539
+ return dropdown1 !== null && dropdown2 !== null && dropdown3 !== null;
540
+ }
541
+ }
542
+ ],
543
+ ...transitions.length > 0 && { transitions }
544
+ }
545
+ };
546
+ }
547
+ get Flows() {
548
+ return {
549
+ ...this.CheckDropdownRendering(),
550
+ ...this.CheckDropdownOpenAndSelect(),
551
+ ...this.CheckDropdownValueDisplay(),
552
+ ...this.CheckSecondDropdownExists(),
553
+ ...this.CheckSecondDropdownSelect(),
554
+ ...this.CheckEditableDropdownExists(),
555
+ ...this.CheckDropdownPadlockUnlock(),
556
+ ...this.CheckEditableDropdownInteraction(),
557
+ ...this.CheckDropdownBlurEvent(),
558
+ ...this.CheckDropdownNoNullDisplay(),
559
+ ...this.CheckDropdownReselection(),
560
+ ...this.CheckDropdownInputBlur(),
561
+ ...this.CheckEditableDropdownCreate(),
562
+ ...this.CheckEditableDropdownBlur(),
563
+ ...this.CheckDropdownSelectThenBlur(),
564
+ ...this.CheckDropdownFocusBlurCycle(),
565
+ ...this.CheckDropdownFinalState()
566
+ };
567
+ }
568
+ }
569
+ export {
570
+ DropdownRendererFlows
571
+ };
@@ -0,0 +1,79 @@
1
+ import { TTriggerActions } from "@elliemae/flow-driven-testing";
2
+ import { FlowBase } from "../base/flowBase";
3
+ class LargeTextRendererFlows extends FlowBase {
4
+ constructor(flowParams) {
5
+ super(flowParams);
6
+ this.flowParams = flowParams;
7
+ }
8
+ flowParams;
9
+ CheckLargeTextValue() {
10
+ return {
11
+ [`${this.flowParams.inboundFlow}`]: {
12
+ name: this.getFlowName(
13
+ "LargeTextRenderer",
14
+ "check with large text value"
15
+ ),
16
+ startFlow: [
17
+ {
18
+ selector: '[data-testid="3169"]',
19
+ value: "This is a large text input test.",
20
+ action: TTriggerActions.BLUR
21
+ }
22
+ ],
23
+ asserts: [
24
+ {
25
+ assertFn: () => {
26
+ const inputElement = document.querySelector(
27
+ '[data-testid="3169"]'
28
+ );
29
+ return inputElement && inputElement.value === "This is a large text input test.";
30
+ }
31
+ }
32
+ ],
33
+ transitions: [
34
+ {
35
+ to: "checkWithMaxCharLimit"
36
+ }
37
+ ]
38
+ }
39
+ };
40
+ }
41
+ CheckWithMaxCharLimit() {
42
+ const transitions = this.flowParams.outboundFlow ? [{ to: this.flowParams.outboundFlow }] : [];
43
+ return {
44
+ checkWithMaxCharLimit: {
45
+ name: this.getFlowName(
46
+ "LargeTextRenderer",
47
+ "check with max character limit"
48
+ ),
49
+ startFlow: [
50
+ {
51
+ selector: '[data-testid="1867"]',
52
+ value: "Exceeding character limit test input.",
53
+ action: TTriggerActions.BLUR
54
+ }
55
+ ],
56
+ asserts: [
57
+ {
58
+ assertFn: () => {
59
+ const inputElement = document.querySelector(
60
+ '[id="1867_error_message"]'
61
+ );
62
+ return inputElement && inputElement.value === "Max characters reached.";
63
+ }
64
+ }
65
+ ],
66
+ ...transitions.length > 0 && { transitions }
67
+ }
68
+ };
69
+ }
70
+ get Flows() {
71
+ return {
72
+ ...this.CheckLargeTextValue(),
73
+ ...this.CheckWithMaxCharLimit()
74
+ };
75
+ }
76
+ }
77
+ export {
78
+ LargeTextRendererFlows
79
+ };