@luomus/laji-form 15.1.0 → 15.1.1

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 (297) hide show
  1. package/CHANGELOG.md +0 -4
  2. package/dist/laji-form.js +1 -1
  3. package/dist/styles.css +81 -90
  4. package/jsonconfig.json +26 -0
  5. package/migrate.sh +0 -1
  6. package/package.json +8 -8
  7. package/test-export/array-spec.js +204 -0
  8. package/test-export/bird-point-count-spec.d.ts +1 -0
  9. package/test-export/bird-point-count-spec.js +62 -0
  10. package/test-export/collection-contest-form-spec.d.ts +1 -0
  11. package/test-export/collection-contest-form-spec.js +38 -0
  12. package/test-export/dataset-form-spec.d.ts +1 -0
  13. package/test-export/dataset-form-spec.js +50 -0
  14. package/test-export/date-time-widget-spec.d.ts +1 -0
  15. package/test-export/date-time-widget-spec.js +188 -0
  16. package/test-export/geocoder-spec.d.ts +1 -0
  17. package/test-export/geocoder-spec.js +135 -0
  18. package/test-export/image-array-spec.d.ts +1 -0
  19. package/test-export/image-array-spec.js +94 -0
  20. package/test-export/inject-field-spec.d.ts +1 -0
  21. package/test-export/inject-field-spec.js +148 -0
  22. package/test-export/internal-uuids-spec.d.ts +1 -0
  23. package/test-export/internal-uuids-spec.js +157 -0
  24. package/test-export/invasive-species-eradication-np-spec.d.ts +1 -0
  25. package/test-export/invasive-species-eradication-np-spec.js +18 -0
  26. package/test-export/invasive-species-eradication-spec.d.ts +1 -0
  27. package/test-export/invasive-species-eradication-spec.js +25 -0
  28. package/test-export/line-transect-spec.d.ts +1 -0
  29. package/test-export/line-transect-spec.js +121 -0
  30. package/test-export/mobile-form-spec.d.ts +1 -0
  31. package/test-export/mobile-form-spec.js +84 -0
  32. package/test-export/nafi-spec.d.ts +1 -0
  33. package/test-export/nafi-spec.js +85 -0
  34. package/test-export/select-widget-spec.d.ts +1 -0
  35. package/test-export/select-widget-spec.js +68 -0
  36. package/test-export/single-item-array-field-spec.d.ts +1 -0
  37. package/test-export/single-item-array-field-spec.js +92 -0
  38. package/test-export/syke-butterfly-spec.d.ts +1 -0
  39. package/test-export/syke-butterfly-spec.js +163 -0
  40. package/test-export/test-utils.d.ts +150 -177
  41. package/test-export/test-utils.js +218 -214
  42. package/test-export/transaction-form-spec.d.ts +1 -0
  43. package/test-export/transaction-form-spec.js +63 -0
  44. package/test-export/trip-report-autosuggest-spec.d.ts +1 -0
  45. package/test-export/trip-report-autosuggest-spec.js +272 -0
  46. package/test-export/trip-report-spec.d.ts +1 -0
  47. package/test-export/trip-report-spec.js +456 -0
  48. package/test-export/unit-list-shorthand-array-field-spec.d.ts +1 -0
  49. package/test-export/unit-list-shorthand-array-field-spec.js +71 -0
  50. package/test-export/validation-spec.d.ts +1 -0
  51. package/test-export/validation-spec.js +336 -0
  52. package/test-export/water-bird-spec.d.ts +1 -0
  53. package/test-export/water-bird-spec.js +30 -0
  54. package/test-export/wbc-spec.d.ts +1 -0
  55. package/test-export/wbc-spec.js +82 -0
  56. package/tsconfig.test.json +1 -1
  57. package/xsel -b +9 -0
  58. package/cypress/fixtures/example.json +0 -5
  59. package/cypress/screenshots/nafi.cy.ts/NAFI (MHL.6) -- selecting species name with keyboard navigation -- and closes suggestion list (failed).png +0 -0
  60. package/cypress/screenshots/nafi.cy.ts/NAFI (MHL.6) -- selecting species name with keyboard navigation -- and is marked as suggested (failed).png +0 -0
  61. package/lib/ApiClient.d.ts +0 -46
  62. package/lib/ApiClient.js +0 -93
  63. package/lib/Context.d.ts +0 -8
  64. package/lib/Context.js +0 -18
  65. package/lib/ReactContext.d.ts +0 -7
  66. package/lib/ReactContext.js +0 -5
  67. package/lib/components/BaseComponent.d.ts +0 -9
  68. package/lib/components/BaseComponent.js +0 -29
  69. package/lib/components/LajiForm.d.ts +0 -221
  70. package/lib/components/LajiForm.js +0 -615
  71. package/lib/components/VirtualSchemaField.d.ts +0 -42
  72. package/lib/components/VirtualSchemaField.js +0 -74
  73. package/lib/components/components.d.ts +0 -119
  74. package/lib/components/components.js +0 -606
  75. package/lib/components/fields/AnnotationField.d.ts +0 -34
  76. package/lib/components/fields/AnnotationField.js +0 -242
  77. package/lib/components/fields/AnyToBooleanField.d.ts +0 -18
  78. package/lib/components/fields/AnyToBooleanField.js +0 -20
  79. package/lib/components/fields/ArrayBulkField.d.ts +0 -23
  80. package/lib/components/fields/ArrayBulkField.js +0 -82
  81. package/lib/components/fields/ArrayCombinerField.d.ts +0 -36
  82. package/lib/components/fields/ArrayCombinerField.js +0 -138
  83. package/lib/components/fields/ArrayField.d.ts +0 -39
  84. package/lib/components/fields/ArrayField.js +0 -148
  85. package/lib/components/fields/AudioArrayField.d.ts +0 -22
  86. package/lib/components/fields/AudioArrayField.js +0 -100
  87. package/lib/components/fields/AutoArrayField.d.ts +0 -24
  88. package/lib/components/fields/AutoArrayField.js +0 -56
  89. package/lib/components/fields/AutosuggestField.d.ts +0 -69
  90. package/lib/components/fields/AutosuggestField.js +0 -299
  91. package/lib/components/fields/CombinedValueDisplayField.d.ts +0 -41
  92. package/lib/components/fields/CombinedValueDisplayField.js +0 -100
  93. package/lib/components/fields/ConditionalOnChangeField.d.ts +0 -42
  94. package/lib/components/fields/ConditionalOnChangeField.js +0 -107
  95. package/lib/components/fields/ConditionalUiSchemaField.d.ts +0 -123
  96. package/lib/components/fields/ConditionalUiSchemaField.js +0 -143
  97. package/lib/components/fields/ContextInjectionField.d.ts +0 -24
  98. package/lib/components/fields/ContextInjectionField.js +0 -68
  99. package/lib/components/fields/DataLeakerField.d.ts +0 -40
  100. package/lib/components/fields/DataLeakerField.js +0 -68
  101. package/lib/components/fields/DefaultValueArrayField.d.ts +0 -34
  102. package/lib/components/fields/DefaultValueArrayField.js +0 -59
  103. package/lib/components/fields/DependentBooleanField.d.ts +0 -38
  104. package/lib/components/fields/DependentBooleanField.js +0 -87
  105. package/lib/components/fields/DependentDisableField.d.ts +0 -35
  106. package/lib/components/fields/DependentDisableField.js +0 -71
  107. package/lib/components/fields/EnumRangeArrayField.d.ts +0 -27
  108. package/lib/components/fields/EnumRangeArrayField.js +0 -115
  109. package/lib/components/fields/ExtraLabelRowField.d.ts +0 -38
  110. package/lib/components/fields/ExtraLabelRowField.js +0 -100
  111. package/lib/components/fields/FakePropertyField.d.ts +0 -18
  112. package/lib/components/fields/FakePropertyField.js +0 -48
  113. package/lib/components/fields/FilterArrayField.d.ts +0 -73
  114. package/lib/components/fields/FilterArrayField.js +0 -121
  115. package/lib/components/fields/FlatField.d.ts +0 -29
  116. package/lib/components/fields/FlatField.js +0 -171
  117. package/lib/components/fields/GeocoderField.d.ts +0 -47
  118. package/lib/components/fields/GeocoderField.js +0 -372
  119. package/lib/components/fields/GridLayoutField.d.ts +0 -18
  120. package/lib/components/fields/GridLayoutField.js +0 -32
  121. package/lib/components/fields/HiddenField.d.ts +0 -10
  122. package/lib/components/fields/HiddenField.js +0 -11
  123. package/lib/components/fields/ImageArrayField.d.ts +0 -172
  124. package/lib/components/fields/ImageArrayField.js +0 -697
  125. package/lib/components/fields/ImageDisplayField.d.ts +0 -18
  126. package/lib/components/fields/ImageDisplayField.js +0 -44
  127. package/lib/components/fields/InitiallyHiddenField.d.ts +0 -21
  128. package/lib/components/fields/InitiallyHiddenField.js +0 -58
  129. package/lib/components/fields/InjectDefaultValueField.d.ts +0 -37
  130. package/lib/components/fields/InjectDefaultValueField.js +0 -68
  131. package/lib/components/fields/InjectField.d.ts +0 -46
  132. package/lib/components/fields/InjectField.js +0 -88
  133. package/lib/components/fields/InputWithDefaultValueButtonField.d.ts +0 -25
  134. package/lib/components/fields/InputWithDefaultValueButtonField.js +0 -61
  135. package/lib/components/fields/LocalityField.d.ts +0 -22
  136. package/lib/components/fields/LocalityField.js +0 -94
  137. package/lib/components/fields/LocationChooserField.d.ts +0 -27
  138. package/lib/components/fields/LocationChooserField.js +0 -440
  139. package/lib/components/fields/MapArrayField.d.ts +0 -78
  140. package/lib/components/fields/MapArrayField.js +0 -1783
  141. package/lib/components/fields/MapField.d.ts +0 -48
  142. package/lib/components/fields/MapField.js +0 -434
  143. package/lib/components/fields/MultiAnyToBooleanField.d.ts +0 -25
  144. package/lib/components/fields/MultiAnyToBooleanField.js +0 -100
  145. package/lib/components/fields/MultiArrayField.d.ts +0 -53
  146. package/lib/components/fields/MultiArrayField.js +0 -224
  147. package/lib/components/fields/MultiLanguageField.d.ts +0 -13
  148. package/lib/components/fields/MultiLanguageField.js +0 -52
  149. package/lib/components/fields/MultiTagArrayField.d.ts +0 -36
  150. package/lib/components/fields/MultiTagArrayField.js +0 -142
  151. package/lib/components/fields/NamedPlaceChooserField.d.ts +0 -29
  152. package/lib/components/fields/NamedPlaceChooserField.js +0 -380
  153. package/lib/components/fields/NamedPlaceSaverField.d.ts +0 -29
  154. package/lib/components/fields/NamedPlaceSaverField.js +0 -237
  155. package/lib/components/fields/NestField.d.ts +0 -148
  156. package/lib/components/fields/NestField.js +0 -289
  157. package/lib/components/fields/ObjectField.d.ts +0 -2
  158. package/lib/components/fields/ObjectField.js +0 -119
  159. package/lib/components/fields/PdfArrayField.d.ts +0 -21
  160. package/lib/components/fields/PdfArrayField.js +0 -40
  161. package/lib/components/fields/PrefillingArrayField.d.ts +0 -22
  162. package/lib/components/fields/PrefillingArrayField.js +0 -65
  163. package/lib/components/fields/SchemaField.d.ts +0 -7
  164. package/lib/components/fields/SchemaField.js +0 -109
  165. package/lib/components/fields/ScopeField.d.ts +0 -85
  166. package/lib/components/fields/ScopeField.js +0 -521
  167. package/lib/components/fields/SectionArrayField.d.ts +0 -38
  168. package/lib/components/fields/SectionArrayField.js +0 -618
  169. package/lib/components/fields/SelectTreeField.d.ts +0 -39
  170. package/lib/components/fields/SelectTreeField.js +0 -143
  171. package/lib/components/fields/SingleActiveArrayField.d.ts +0 -49
  172. package/lib/components/fields/SingleActiveArrayField.js +0 -974
  173. package/lib/components/fields/SingleItemArrayField.d.ts +0 -15
  174. package/lib/components/fields/SingleItemArrayField.js +0 -60
  175. package/lib/components/fields/SortArrayField.d.ts +0 -73
  176. package/lib/components/fields/SortArrayField.js +0 -351
  177. package/lib/components/fields/SplitField.d.ts +0 -28
  178. package/lib/components/fields/SplitField.js +0 -65
  179. package/lib/components/fields/StringToArrayField.d.ts +0 -24
  180. package/lib/components/fields/StringToArrayField.js +0 -48
  181. package/lib/components/fields/SumField.d.ts +0 -35
  182. package/lib/components/fields/SumField.js +0 -83
  183. package/lib/components/fields/TableField.d.ts +0 -18
  184. package/lib/components/fields/TableField.js +0 -136
  185. package/lib/components/fields/TagArrayField.d.ts +0 -38
  186. package/lib/components/fields/TagArrayField.js +0 -128
  187. package/lib/components/fields/ToggleAdditionalArrayFieldsField.d.ts +0 -26
  188. package/lib/components/fields/ToggleAdditionalArrayFieldsField.js +0 -81
  189. package/lib/components/fields/UiFieldApplierField.d.ts +0 -30
  190. package/lib/components/fields/UiFieldApplierField.js +0 -106
  191. package/lib/components/fields/UiFieldMapperArrayField.d.ts +0 -42
  192. package/lib/components/fields/UiFieldMapperArrayField.js +0 -121
  193. package/lib/components/fields/UnitCountShorthandField.d.ts +0 -22
  194. package/lib/components/fields/UnitCountShorthandField.js +0 -149
  195. package/lib/components/fields/UnitListShorthandArrayField.d.ts +0 -26
  196. package/lib/components/fields/UnitListShorthandArrayField.js +0 -108
  197. package/lib/components/fields/UnitShorthandField.d.ts +0 -32
  198. package/lib/components/fields/UnitShorthandField.js +0 -220
  199. package/lib/components/templates/ArrayFieldTemplate.d.ts +0 -85
  200. package/lib/components/templates/ArrayFieldTemplate.js +0 -417
  201. package/lib/components/templates/BaseInputTemplate.d.ts +0 -11
  202. package/lib/components/templates/BaseInputTemplate.js +0 -80
  203. package/lib/components/templates/DescriptionField.d.ts +0 -1
  204. package/lib/components/templates/DescriptionField.js +0 -37
  205. package/lib/components/templates/ErrorListTemplate.d.ts +0 -9
  206. package/lib/components/templates/ErrorListTemplate.js +0 -95
  207. package/lib/components/templates/FieldTemplate.d.ts +0 -6
  208. package/lib/components/templates/FieldTemplate.js +0 -112
  209. package/lib/components/templates/ObjectFieldTemplate.d.ts +0 -7
  210. package/lib/components/templates/ObjectFieldTemplate.js +0 -66
  211. package/lib/components/templates/TitleField.d.ts +0 -9
  212. package/lib/components/templates/TitleField.js +0 -51
  213. package/lib/components/widgets/AnyToBooleanWidget.d.ts +0 -20
  214. package/lib/components/widgets/AnyToBooleanWidget.js +0 -49
  215. package/lib/components/widgets/AutosuggestWidget.d.ts +0 -66
  216. package/lib/components/widgets/AutosuggestWidget.js +0 -1127
  217. package/lib/components/widgets/CheckboxWidget.d.ts +0 -37
  218. package/lib/components/widgets/CheckboxWidget.js +0 -139
  219. package/lib/components/widgets/DateTimeWidget.d.ts +0 -62
  220. package/lib/components/widgets/DateTimeWidget.js +0 -251
  221. package/lib/components/widgets/DateWidget.d.ts +0 -23
  222. package/lib/components/widgets/DateWidget.js +0 -41
  223. package/lib/components/widgets/HiddenWidget.d.ts +0 -15
  224. package/lib/components/widgets/HiddenWidget.js +0 -19
  225. package/lib/components/widgets/ImageSelectWidget.d.ts +0 -14
  226. package/lib/components/widgets/ImageSelectWidget.js +0 -57
  227. package/lib/components/widgets/InformalTaxonGroupChooserWidget.d.ts +0 -43
  228. package/lib/components/widgets/InformalTaxonGroupChooserWidget.js +0 -237
  229. package/lib/components/widgets/InputGroupWidget.d.ts +0 -21
  230. package/lib/components/widgets/InputGroupWidget.js +0 -36
  231. package/lib/components/widgets/InputWithDefaultValueButtonWidget.d.ts +0 -21
  232. package/lib/components/widgets/InputWithDefaultValueButtonWidget.js +0 -47
  233. package/lib/components/widgets/NumberWidget.d.ts +0 -13
  234. package/lib/components/widgets/NumberWidget.js +0 -21
  235. package/lib/components/widgets/PlainTextWidget.d.ts +0 -12
  236. package/lib/components/widgets/PlainTextWidget.js +0 -24
  237. package/lib/components/widgets/SelectWidget.d.ts +0 -52
  238. package/lib/components/widgets/SelectWidget.js +0 -158
  239. package/lib/components/widgets/SeparatedDateTimeWidget.d.ts +0 -19
  240. package/lib/components/widgets/SeparatedDateTimeWidget.js +0 -59
  241. package/lib/components/widgets/TaxonImageWidget.d.ts +0 -13
  242. package/lib/components/widgets/TaxonImageWidget.js +0 -30
  243. package/lib/components/widgets/TextSelectWidget.d.ts +0 -25
  244. package/lib/components/widgets/TextSelectWidget.js +0 -94
  245. package/lib/components/widgets/TextareaWidget.d.ts +0 -32
  246. package/lib/components/widgets/TextareaWidget.js +0 -87
  247. package/lib/components/widgets/TimeWidget.d.ts +0 -11
  248. package/lib/components/widgets/TimeWidget.js +0 -19
  249. package/lib/components/widgets/URLWidget.d.ts +0 -14
  250. package/lib/components/widgets/URLWidget.js +0 -12
  251. package/lib/components/widgets/UpperCaseWidget.d.ts +0 -13
  252. package/lib/components/widgets/UpperCaseWidget.js +0 -21
  253. package/lib/index.d.ts +0 -20
  254. package/lib/index.js +0 -50
  255. package/lib/services/blocker-service.d.ts +0 -11
  256. package/lib/services/blocker-service.js +0 -55
  257. package/lib/services/custom-event-service.d.ts +0 -17
  258. package/lib/services/custom-event-service.js +0 -35
  259. package/lib/services/dom-id-service.d.ts +0 -8
  260. package/lib/services/dom-id-service.js +0 -30
  261. package/lib/services/focus-service.d.ts +0 -13
  262. package/lib/services/focus-service.js +0 -60
  263. package/lib/services/id-service.d.ts +0 -22
  264. package/lib/services/id-service.js +0 -130
  265. package/lib/services/key-handler-service.d.ts +0 -56
  266. package/lib/services/key-handler-service.js +0 -184
  267. package/lib/services/root-instance-service.d.ts +0 -25
  268. package/lib/services/root-instance-service.js +0 -49
  269. package/lib/services/settings-service.d.ts +0 -34
  270. package/lib/services/settings-service.js +0 -154
  271. package/lib/services/singleton-map-service.d.ts +0 -23
  272. package/lib/services/singleton-map-service.js +0 -44
  273. package/lib/services/submit-hook-service.d.ts +0 -24
  274. package/lib/services/submit-hook-service.js +0 -73
  275. package/lib/styles.js +0 -4
  276. package/lib/themes/bs3.d.ts +0 -3
  277. package/lib/themes/bs3.js +0 -133
  278. package/lib/themes/bs5.d.ts +0 -3
  279. package/lib/themes/bs5.js +0 -111
  280. package/lib/themes/glyphicon-fa-mapping.d.ts +0 -3
  281. package/lib/themes/glyphicon-fa-mapping.js +0 -271
  282. package/lib/themes/stub.d.ts +0 -3
  283. package/lib/themes/stub.js +0 -82
  284. package/lib/themes/theme.d.ts +0 -233
  285. package/lib/themes/theme.js +0 -2
  286. package/lib/translations.json +0 -847
  287. package/lib/utils.d.ts +0 -171
  288. package/lib/utils.js +0 -1191
  289. package/lib/validation.d.ts +0 -7
  290. package/lib/validation.js +0 -141
  291. package/llol +0 -10
  292. package/llol.pdf +0 -10
  293. package/playwright-report/index.html +0 -62
  294. package/q +0 -196
  295. package/rename.sh +0 -24
  296. package/trip-report.spec.ts +0 -594
  297. /package/{lib/styles.d.ts → test-export/array-spec.d.ts} +0 -0
@@ -20,245 +20,128 @@ var __rest = (this && this.__rest) || function (s, e) {
20
20
  return t;
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.getRemoveUnit = exports.maybeJSONPointerToLocator = exports.filterUUIDs = exports.createForm = exports.DemoPageForm = exports.Form = exports.getFocusedElement = exports.lajiFormLocator = exports.navigateToForm = exports.emptyForm = void 0;
23
+ exports.maybeJSONPointerToLocator = exports.filterUUIDs = exports.mockImageMetadata = exports.updateValue = exports.removeUnit = exports.putForeignMarkerToMap = exports.waitUntilBlockingLoaderHides = exports.createForm = exports.NamedPlaceChooserPO = exports.isDisplayed = exports.Form = exports.getFocusedId = exports.getFocusedElement = exports.lajiFormLocate = exports.lajiFormLocator = exports.navigateToForm = exports.emptyForm = exports.getLocatorForContextId = exports.EC = void 0;
24
+ const protractor_1 = require("protractor");
24
25
  const path = require("path");
25
- const test_utils_1 = require("@luomus/laji-map/test-export/test-utils");
26
- const emptyForm = (page, params = "") => __awaiter(void 0, void 0, void 0, function* () { return page.goto(`/?test=true&settings=false&mockApi=true&${params}`); });
26
+ const { HOST, PORT } = process.env;
27
+ exports.EC = protractor_1.protractor.ExpectedConditions;
28
+ const getLocatorForContextId = (contextId) => (path) => `#_laji-form_${contextId}_root${typeof path === "string" && path.length ? `_${path.replace(/\./g, "_")}` : ""}`;
29
+ exports.getLocatorForContextId = getLocatorForContextId;
30
+ const emptyForm = (params = "") => __awaiter(void 0, void 0, void 0, function* () { return protractor_1.browser.get(`http://${HOST}:${PORT}?test=true&settings=false&mockApi=true&${params}`); });
27
31
  exports.emptyForm = emptyForm;
28
- const navigateToForm = (page, formID, params = "") => __awaiter(void 0, void 0, void 0, function* () { return page.goto(`/?id=${formID}&local=true&settings=false&mockApi=true${params}`); });
32
+ const navigateToForm = (formID, params = "") => __awaiter(void 0, void 0, void 0, function* () { return protractor_1.browser.get(`http://${HOST}:${PORT}?id=${formID}&local=true&settings=false&mockApi=true${params}`); });
29
33
  exports.navigateToForm = navigateToForm;
30
- const lajiFormLocator = (path) => `#_laji-form_root${typeof path === "string" && path.length ? `_${path.replace(/\./g, "_")}` : ""}`;
31
- exports.lajiFormLocator = lajiFormLocator;
32
- const getFocusedElement = (page) => page.locator("*:focus");
34
+ exports.lajiFormLocator = exports.getLocatorForContextId(0);
35
+ const lajiFormLocate = (str) => protractor_1.$(exports.lajiFormLocator(str));
36
+ exports.lajiFormLocate = lajiFormLocate;
37
+ const getFocusedElement = () => protractor_1.browser.driver.switchTo().activeElement();
33
38
  exports.getFocusedElement = getFocusedElement;
39
+ const getFocusedId = () => exports.getFocusedElement().getAttribute("id");
40
+ exports.getFocusedId = getFocusedId;
34
41
  function getEnumWidgetForContainer($container) {
35
42
  return {
36
43
  $container,
37
44
  openEnums: () => __awaiter(this, void 0, void 0, function* () {
38
45
  yield $container.click();
46
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.visibilityOf($container.$$(".rw-list-option").first()), 300, "select list timeout");
39
47
  }),
40
- $enumContainer: $container.locator(".rw-popup-container"),
41
- $enums: $container.locator(".rw-list-option"),
42
- $input: $container.locator("input")
48
+ $enumContainer: $container.$(".rw-popup-container"),
49
+ $$enums: $container.$$(".rw-list-option"),
50
+ $input: $container.$("input")
43
51
  };
44
52
  }
45
53
  class Form {
46
- constructor(page, $locator = page.locator(".laji-form")) {
47
- this.page = page;
48
- this.$locator = $locator;
49
- this.$form = this.$locator.locator(".rjsf");
54
+ constructor(params = {}) {
55
+ this.$form = protractor_1.$(".laji-form .rjsf");
56
+ this.getMockStr = (path, query) => `window.mockResponses[window.getMockQueryKey(${JSON.stringify(path)}, ${JSON.stringify(query)})]`;
50
57
  this.createValidatorPO = (type) => ({
51
- $all: this.$locator.locator(`.laji-form-error-list:not(.laji-form-failed-jobs-list) .${type}-panel .list-group button`),
52
- $panel: this.$locator.locator(`.laji-form-error-list:not(.laji-form-failed-jobs-list) .${type}-panel`)
58
+ $$all: protractor_1.$$(`.laji-form-error-list:not(.laji-form-failed-jobs-list) .${type}-panel .list-group button`),
59
+ $panel: protractor_1.$(`.laji-form-error-list:not(.laji-form-failed-jobs-list) .${type}-panel`)
53
60
  });
54
61
  this.errors = this.createValidatorPO("error");
55
62
  this.warnings = this.createValidatorPO("warning");
56
63
  this.failedJobs = {
57
- $container: this.$locator.locator(".laji-form-failed-jobs-list"),
58
- $errors: this.$locator.locator(".laji-form-failed-jobs-list").locator(".list-group-item")
59
- };
60
- this.$runningJobs = this.$locator.locator(".running-jobs");
61
- this.$acknowledgeWarnings = this.$locator.locator(".laji-form-warning-list .panel-footer button");
62
- this.$blocker = this.page.locator(".laji-form.blocking-loader");
63
- this.$mapFieldFullscreenMap = this.page.locator(".laji-form.fullscreen .laji-form-map");
64
- this.getImageArrayField = (lajiFormLocator) => {
65
- const $container = this.$locate(lajiFormLocator).locator(".laji-form-medias");
66
- const $imgContainers = this.$locate(lajiFormLocator).locator(".media-container");
67
- const $modal = this.page.locator(".laji-form.media-modal");
68
- const $addModal = this.page.locator(".laji-form.media-add-modal");
69
- return {
70
- $container,
71
- $imgContainers,
72
- $imgs: $imgContainers.locator("img"),
73
- $imgLoading: $imgContainers.locator(".react-spinner"),
74
- $imgRemoves: $imgContainers.locator(".button-corner"),
75
- $imgRemoveConfirmButton: (id) => this.$locateAddition(id, "delete-confirm-yes", true),
76
- $dropzone: this.$locate(lajiFormLocator).locator(".laji-form-drop-zone"),
77
- $modal,
78
- $addModal,
79
- $modalClose: $modal.locator(".modal-header .close"),
80
- $addModalCancel: $addModal.locator(".cancel")
81
- };
82
- };
83
- this.getTaxonAutosuggestWidget = (lajiFormLocator) => {
84
- return {
85
- $input: this.$locate(lajiFormLocator).locator("input"),
86
- $suggestionsContainer: this.$locate(lajiFormLocator).locator(".rw-list"),
87
- $suggestions: this.$locate(lajiFormLocator).locator(".rw-list-option"),
88
- $getGlyph: (glyph) => this.$locate(lajiFormLocator).locator(glyph),
89
- $suggestedGlyph: this.$locate(lajiFormLocator).locator(".glyphicon-ok"),
90
- $nonsuggestedGlyph: this.$locate(lajiFormLocator).locator(".glyphicon-warning-sign"),
91
- $powerUserButton: this.$locator.locator(".power-user-addon")
92
- };
93
- };
94
- this.getScopeField = (lajiFormLocator) => ({
95
- $button: this.$locateButton(lajiFormLocator, "additionals"),
96
- $listItems: this.$locate(lajiFormLocator).locator(".dropdown.open li a"),
97
- modal: {
98
- $container: this.page.locator(".scope-field-modal"),
99
- $close: this.page.locator(".scope-field-modal .close"),
100
- $loadingGroup: this.page.locator(".scope-field-modal .list-group .react-spinner"),
101
- $groupTitles: this.page.locator(".scope-field-modal .list-group .list-group-item strong"),
102
- $listItems: this.page.locator(".scope-field-modal .list-group-item"),
103
- }
104
- });
105
- this.getLocationChooser = (lajiFormLocator) => {
106
- const $peeker = this.$locateButton(lajiFormLocator, "location-peeker", true);
107
- return {
108
- $button: this.$locateButton(lajiFormLocator, "location"),
109
- modal: {
110
- $container: this.page.locator(".map-dialog"),
111
- map: new test_utils_1.MapPageObject(this.page, this.page.locator(".map-dialog .laji-map"))
112
- },
113
- peeker: {
114
- $popover: $peeker,
115
- $map: $peeker.locator(".laji-map"),
116
- $markers: $peeker.locator(".vector-marker path"),
117
- }
118
- };
119
- };
120
- this.getUnitListShorthandArrayField = (lajiFormLocator) => ({
121
- $button: this.$locateButton(lajiFormLocator, "addUnitList"),
122
- modal: {
123
- $input: this.page.locator(".unit-list-shorthand-modal input"),
124
- $addButton: this.page.locator(".unit-list-shorthand-modal button")
125
- }
126
- });
127
- this.$getShortHandWidget = (lajiFormLocator) => this.$locateAddition(lajiFormLocator, "shortHandText");
128
- this.getGeocoder = (lajiFormLocator = "") => ({
129
- $btn: this.$locate(lajiFormLocator).locator(".geocoder-btn"),
130
- $spinner: this.$locate(lajiFormLocator).locator(".geocoder-btn .react-spinner")
131
- });
132
- this.getNamedPlaceChooser = () => {
133
- const $namedPlaceChooserModal = this.page.locator(".named-place-chooser-modal");
134
- const $mapPopupContainer = this.page.locator(".named-place-popup");
135
- return {
136
- select: getEnumWidgetForContainer(this.page.locator("#named-place-chooser-select")),
137
- mapPopup: {
138
- $container: $mapPopupContainer,
139
- $useBtn: $mapPopupContainer.locator(".btn-default")
140
- },
141
- $alert: $namedPlaceChooserModal.locator(".alert"),
142
- $close: $namedPlaceChooserModal.locator(".close")
143
- };
64
+ $container: protractor_1.$(".laji-form-failed-jobs-list")
144
65
  };
145
- }
146
- /** Locates a field with a dot separated identifier, e.g. "gatherings.0.units.1" */
147
- $locate(path) {
148
- return this.$locator.locator(exports.lajiFormLocator(path));
149
- }
150
- /** Locates a button for a field with a dot separated identifier, e.g. "gatherings.0.units.1" */
151
- $locateButton(path, selector, locateFromBody = false) {
152
- return (locateFromBody ? this.page : this.$locator).locator(`#root${typeof path === "string" && path.length > 0 ? `_${path.replace(/\./g, "_")}` : ""}-${selector}`);
153
- }
154
- /** Locates some additional element for a field with a dot separated identifier, e.g. "gatherings.0.units.1" */
155
- $locateAddition(path, selector, locateFromBody = false) {
156
- return this.$locateButton(path, selector, locateFromBody);
157
- }
158
- getBooleanWidget(str) {
159
- const $container = this.$locate(str).locator(".btn-toolbar");
160
- return {
161
- $container,
162
- $true: $container.locator(".btn").nth(0),
163
- $false: $container.locator(".btn").nth(1),
164
- $undefined: this.$locate(str).locator(".btn").nth(2),
165
- $active: $container.locator(".btn.active"),
166
- $nonactive: $container.locator(".btn:not(.active)").first()
167
- };
168
- }
169
- $getInputWidget(str) {
170
- return this.$locate(str).locator("input");
171
- }
172
- $getTextareaWidget(str) {
173
- return this.$locate(str).locator("textarea");
174
- }
175
- $getEnumWidget(str) {
176
- const $container = this.$locate(str).locator(".rw-combobox");
177
- return getEnumWidgetForContainer($container);
178
- }
179
- getDateWidget(str) {
180
- const $widget = this.$locate(str).locator(".date-widget");
181
- return {
182
- $container: $widget,
183
- $input: $widget.locator("input"),
184
- buttons: {
185
- $today: $widget.locator(".today"),
186
- $yesterday: $widget.locator(".yesterday"),
187
- $same: $widget.locator(".same"),
188
- $date: $widget.locator(".rw-i-calendar"),
189
- $time: $widget.locator(".rw-i-clock-o")
190
- },
191
- calendar: {
192
- $today: $widget.locator(".rw-calendar-footer button"),
193
- },
194
- clock: {
195
- "$01:00": $widget.locator(".rw-list li").nth(2),
196
- }
197
- };
198
- }
199
- $getFieldErrors(str) {
200
- return this.$locate(str).locator(".laji-form-error-container li");
201
- }
202
- /** Draws a marker to the center of a laji-map rendered to the given locator. The locator defaults to "gatherings" */
203
- putMarkerToMap(lajiFormLocator = "gatherings") {
204
- return __awaiter(this, void 0, void 0, function* () {
205
- const $map = this.$locate(lajiFormLocator).locator(".laji-map");
206
- yield $map.scrollIntoViewIfNeeded();
207
- const map = new test_utils_1.MapPageObject(this.page, $map);
208
- yield map.drawMarker();
209
- });
210
- }
211
- updateValue($input, value, blur = true) {
212
- return __awaiter(this, void 0, void 0, function* () {
213
- yield $input.fill(value);
214
- if (blur) {
215
- yield $input.press("Tab");
216
- }
217
- });
218
- }
219
- }
220
- exports.Form = Form;
221
- class DemoPageForm extends Form {
222
- constructor(page, params = {}) {
223
- super(page);
224
- this.getMockStr = (path, query) => `window.mockResponses[window.getMockQueryKey(${JSON.stringify(path)}, ${JSON.stringify(query)})]`;
66
+ this.$acknowledgeWarnings = protractor_1.$(".laji-form-warning-list .panel-footer button");
67
+ this.isBlocked = () => protractor_1.$(".laji-form.blocking-loader").isDisplayed();
225
68
  this.mockImageUpload = (lajiFormLocator) => __awaiter(this, void 0, void 0, function* () {
226
- const filePath = path.resolve(__dirname, "./mocks/pixel.png");
69
+ const filePath = path.resolve(__dirname, "./pixel.png");
227
70
  const imageResponse = [{ name: "data", filename: "pixel.png", id: "mock", expires: 1575979685 }];
228
71
  const { resolve, remove } = yield this.setMockResponse("/images", false);
229
- const mdResponse = require("./mocks/image-metadata.json");
230
- const { resolve: metadataResolve, remove: metadataRemove } = yield this.setMockResponse("/images/mock", false);
231
- yield this.getImageArrayField(lajiFormLocator).$dropzone.locator("input").setInputFiles(filePath);
72
+ const mdResponse = exports.mockImageMetadata;
73
+ const { resolve: mdResolve, remove: mdRemove } = yield this.setMockResponse("/images/mock", false);
74
+ yield this.getImageArrayField(lajiFormLocator).$dropzone.$("input").sendKeys(filePath);
232
75
  return {
233
76
  resolve: () => __awaiter(this, void 0, void 0, function* () {
234
77
  yield resolve(imageResponse);
235
- yield metadataResolve(mdResponse);
78
+ yield protractor_1.browser.sleep(300);
79
+ yield mdResolve(mdResponse);
236
80
  }),
237
81
  remove: () => __awaiter(this, void 0, void 0, function* () {
238
82
  yield remove();
239
- yield metadataRemove();
83
+ yield mdRemove();
240
84
  })
241
85
  };
242
86
  });
243
- // this.page = page;
87
+ this._getImageArrayField = (form) => (lajiFormLocator) => new class ImageArrayFieldPO {
88
+ constructor() {
89
+ this.$container = form.$locate(lajiFormLocator).$(".laji-form-medias");
90
+ this.$$imgs = form.$locate(lajiFormLocator).$$(".media-container");
91
+ this.$$imgInteractives = this.$$imgs.$$(".media-container a");
92
+ this.$$imgRemoves = this.$$imgs.$$(".button-corner");
93
+ this.$imgRemoveConfirmButton = (id) => form.$locateAddition(id, "delete-confirm-yes");
94
+ this.$dropzone = form.$locate(lajiFormLocator).$(".laji-form-drop-zone");
95
+ this.$modal = protractor_1.$(".laji-form.media-modal");
96
+ this.$modalClose = this.$modal.$(".close");
97
+ }
98
+ };
99
+ this.getImageArrayField = this._getImageArrayField(this);
100
+ this._getTaxonAutosuggestWidget = (form) => (lajiFormLocator) => new class TaxonAutosuggestWidgetPO {
101
+ constructor() {
102
+ this.$input = form.$locate(lajiFormLocator).$("input");
103
+ this.$suggestionsContainer = form.$locate(lajiFormLocator).$(".rw-list");
104
+ this.$$suggestions = form.$locate(lajiFormLocator).$$(".rw-list-option");
105
+ this.waitForSuggestionsToLoad = () => protractor_1.browser.wait(exports.EC.visibilityOf(this.$suggestionsContainer), 5000, "Suggestion list timeout");
106
+ this.waitForGlyph = () => protractor_1.browser.wait(exports.EC.visibilityOf(form.$locate(lajiFormLocator).$(".glyphicon.form-control-feedback")), 5000, "Glyph didn't load");
107
+ this.isSuggested = () => exports.isDisplayed(form.$locate(lajiFormLocator).$(".glyphicon-ok"));
108
+ this.isNonsuggested = () => exports.isDisplayed(form.$locate(lajiFormLocator).$(".glyphicon-warning-sign"));
109
+ this.$powerUserButton = protractor_1.$(".power-user-addon");
110
+ this.powerUserButtonIsActive = () => __awaiter(this, void 0, void 0, function* () { return (yield this.$powerUserButton.getAttribute("class")).includes("active"); });
111
+ this.waitForPopoverToHide = () => protractor_1.browser.wait(exports.EC.invisibilityOf(form.$locate(lajiFormLocator).$(".popover-content")), 5000, "Popover didn't hide");
112
+ }
113
+ };
114
+ this.getTaxonAutosuggestWidget = this._getTaxonAutosuggestWidget(this);
115
+ this.getScopeField = (lajiFormLocator) => ({
116
+ $button: this.$locateButton(lajiFormLocator, "additionals"),
117
+ $$listItems: this.$locate(lajiFormLocator).$$(".dropdown.open li a")
118
+ });
119
+ this.getUnitListShorthandArrayField = (lajiFormLocator) => ({
120
+ $button: this.$locateButton(lajiFormLocator, "addUnitList"),
121
+ modal: {
122
+ $input: protractor_1.$(".unit-list-shorthand-modal input"),
123
+ $addButton: protractor_1.$(".unit-list-shorthand-modal button")
124
+ }
125
+ });
244
126
  this.props = params;
245
127
  }
246
- initialize(beforeInit) {
128
+ initialize(beforeInit, contextId) {
247
129
  return __awaiter(this, void 0, void 0, function* () {
248
130
  const query = (params) => Object.keys(params).reduce((q, key) => `${q}&${encodeURIComponent(key)}=${encodeURIComponent(params[key])}`, "");
249
131
  if (this.props.id) {
250
132
  const _a = this.props, { id } = _a, _props = __rest(_a, ["id"]);
251
- yield exports.navigateToForm(this.page, id, query(_props));
133
+ yield exports.navigateToForm(id, query(_props));
252
134
  }
253
135
  else {
254
- yield exports.emptyForm(this.page);
136
+ yield exports.emptyForm();
255
137
  }
256
138
  beforeInit && (yield beforeInit(this));
257
139
  yield this.setState(this.props);
140
+ this.contextId = contextId !== null && contextId !== void 0 ? contextId : yield this.e("lajiForm._id");
258
141
  });
259
142
  }
260
143
  e(path) {
261
- return this.page.evaluate(`window.lajiForm.${path}`);
144
+ return protractor_1.browser.executeScript(`return window.lajiForm.${path}`);
262
145
  }
263
146
  setState(state) {
264
147
  const onSubmit = "function(data) {window.submittedData = data.formData;}";
@@ -266,32 +149,51 @@ class DemoPageForm extends Form {
266
149
  return this.e(`setState({onSubmit: ${onSubmit}, onChange: ${onChange}, ...${JSON.stringify(state)}})`);
267
150
  }
268
151
  getState() {
269
- return this.page.evaluate(() => {
270
- const { formData } = window.lajiForm.lajiForm.state;
271
- return { formData };
152
+ return __awaiter(this, void 0, void 0, function* () {
153
+ return protractor_1.browser.executeScript("const {formData} = window.lajiForm.lajiForm.state; return {formData};");
272
154
  });
273
155
  }
274
156
  submit() {
157
+ return __awaiter(this, void 0, void 0, function* () {
158
+ yield this.e("submit()");
159
+ yield waitUntilBlockingLoaderHides();
160
+ });
161
+ }
162
+ startSubmit() {
275
163
  return __awaiter(this, void 0, void 0, function* () {
276
164
  yield this.e("submit()");
277
165
  });
278
166
  }
279
167
  submitOnlySchemaValidations() {
280
- return this.e("submitOnlySchemaValidations()");
168
+ return __awaiter(this, void 0, void 0, function* () {
169
+ yield this.e("submitOnlySchemaValidations()");
170
+ });
171
+ }
172
+ waitUntilBlockingLoaderHides(timeout) {
173
+ return waitUntilBlockingLoaderHides(timeout);
281
174
  }
282
175
  getSubmittedData() {
283
- return this.page.evaluate("window.submittedData");
176
+ return protractor_1.browser.executeScript("return window.submittedData");
284
177
  }
285
178
  getChangedData() {
286
- return this.page.evaluate("window.changedData");
179
+ return protractor_1.browser.executeScript("return window.changedData");
287
180
  }
288
181
  getPropsData() {
289
182
  return this.e("lajiForm.props.formData");
290
183
  }
184
+ $locate(path) {
185
+ return protractor_1.$(exports.getLocatorForContextId(this.contextId)(path));
186
+ }
187
+ $locateButton(path, selector) {
188
+ return protractor_1.$(`#root${typeof path === "string" && path.length > 0 ? `_${path.replace(/\./g, "_")}` : ""}-${selector}`);
189
+ }
190
+ $locateAddition(path, selector) {
191
+ return this.$locateButton(path, selector);
192
+ }
291
193
  setMockResponse(path, query) {
292
194
  return __awaiter(this, void 0, void 0, function* () {
293
- yield this.page.evaluate(`window.setMockResponse(${JSON.stringify(path)}, ${JSON.stringify(query)})`);
294
- const mock = (method, response, raw) => this.page.evaluate(`${this.getMockStr(path, query)}.${method}(${JSON.stringify(response)}, ${JSON.stringify(raw)})`);
195
+ yield protractor_1.browser.executeScript(`return window.setMockResponse(${JSON.stringify(path)}, ${JSON.stringify(query)})`);
196
+ const mock = (method, response, raw) => protractor_1.browser.executeScript(`return ${this.getMockStr(path, query)}.${method}(${JSON.stringify(response)}, ${JSON.stringify(raw)})`);
295
197
  return {
296
198
  resolve: (response, raw) => mock("resolve", response, raw),
297
199
  reject: (response, raw) => mock("reject", response, raw),
@@ -301,15 +203,15 @@ class DemoPageForm extends Form {
301
203
  }
302
204
  createMockResponseQueue(path, query) {
303
205
  return __awaiter(this, void 0, void 0, function* () {
304
- yield this.page.evaluate(`window.createMockResponseQueue(${JSON.stringify(path)}, ${JSON.stringify(query)})`);
206
+ yield protractor_1.browser.executeScript(`return window.createMockResponseQueue(${JSON.stringify(path)}, ${JSON.stringify(query)})`);
305
207
  const queueStr = `window.mockQueues[window.getMockQueryKey(${JSON.stringify(path)}, ${JSON.stringify(query)})]`;
306
208
  const mock = (method, response, raw, pointer) => {
307
- return this.page.evaluate(`${this.getMockStr(path, query)}[${pointer}].${method}(${JSON.stringify(response)}, ${JSON.stringify(raw)})`);
209
+ return protractor_1.browser.executeScript(`return ${this.getMockStr(path, query)}[${pointer}].${method}(${JSON.stringify(response)}, ${JSON.stringify(raw)})`);
308
210
  };
309
211
  let pointer = 0;
310
212
  return {
311
213
  create: () => __awaiter(this, void 0, void 0, function* () {
312
- yield this.page.evaluate(`${queueStr}.create()`);
214
+ yield protractor_1.browser.executeScript(`return ${queueStr}.create()`);
313
215
  const _pointer = pointer;
314
216
  pointer = pointer + 1;
315
217
  return {
@@ -317,20 +219,127 @@ class DemoPageForm extends Form {
317
219
  reject: (response, raw) => mock("reject", response, raw, _pointer),
318
220
  };
319
221
  }),
320
- remove: () => this.page.evaluate(`${queueStr}.remove()`)
222
+ remove: () => protractor_1.browser.executeScript(`return ${queueStr}.remove()`)
321
223
  };
322
224
  });
323
225
  }
226
+ getBooleanWidget(str) {
227
+ const $container = this.$locate(str).$(".btn-toolbar");
228
+ return {
229
+ $container,
230
+ $true: $container.$$(".btn").get(0),
231
+ $false: $container.$$(".btn").get(1),
232
+ $undefined: this.$locate(str).$$(".btn").get(2),
233
+ $active: $container.$(".btn.active"),
234
+ $nonactive: $container.$$(".btn").filter(($btn) => __awaiter(this, void 0, void 0, function* () { return !(yield $btn.getAttribute("class")).includes("active"); })).first()
235
+ };
236
+ }
237
+ $getInputWidget(str) {
238
+ return this.$locate(str).$("input");
239
+ }
240
+ $getTextareaWidget(str) {
241
+ return this.$locate(str).$("textarea");
242
+ }
243
+ $getEnumWidget(str) {
244
+ const $container = this.$locate(str).$(".rw-combobox");
245
+ return getEnumWidgetForContainer($container);
246
+ }
247
+ getDateWidget(str) {
248
+ const $widget = this.$locate(str).$(".date-widget");
249
+ return {
250
+ $container: $widget,
251
+ $input: $widget.$("input"),
252
+ buttons: {
253
+ $today: $widget.$(".today"),
254
+ $yesterday: $widget.$(".yesterday"),
255
+ $same: $widget.$(".same"),
256
+ $date: $widget.$(".rw-i-calendar"),
257
+ $time: $widget.$(".rw-i-clock-o")
258
+ },
259
+ calendar: {
260
+ $today: $widget.$(".rw-calendar-footer button"),
261
+ waitAnimation: () => protractor_1.browser.wait(exports.EC.visibilityOf($widget.$(".rw-calendar-footer button")), 1000, "Calendar didn't show")
262
+ },
263
+ clock: {
264
+ "$01:00": $widget.$$(".rw-list li").get(2),
265
+ waitAnimation: () => protractor_1.browser.wait(exports.EC.visibilityOf($widget.$(".rw-list")), 1000, "Clock didn't show")
266
+ }
267
+ };
268
+ }
269
+ $$getFieldErrors(str) {
270
+ return this.$locate(str).$$(".laji-form-error-container li");
271
+ }
324
272
  }
325
- exports.DemoPageForm = DemoPageForm;
326
- function createForm(page, props, beforeInit) {
273
+ exports.Form = Form;
274
+ const isDisplayed = ($elem) => __awaiter(void 0, void 0, void 0, function* () { return (yield $elem.isPresent()) && (yield $elem.isDisplayed()); });
275
+ exports.isDisplayed = isDisplayed;
276
+ const $mapPopupContainer = protractor_1.$(".named-place-popup");
277
+ const $namedPlaceChooserModal = protractor_1.$(".named-place-chooser-modal");
278
+ class NamedPlaceChooserPO {
279
+ constructor() {
280
+ this.select = getEnumWidgetForContainer(protractor_1.$("#named-place-chooser-select"));
281
+ this.mapPopup = {
282
+ $container: $mapPopupContainer,
283
+ $useBtn: $mapPopupContainer.$(".btn-default")
284
+ };
285
+ this.$alert = $namedPlaceChooserModal.$(".alert");
286
+ this.$close = $namedPlaceChooserModal.$(".close");
287
+ }
288
+ }
289
+ exports.NamedPlaceChooserPO = NamedPlaceChooserPO;
290
+ function createForm(props, beforeInit) {
327
291
  return __awaiter(this, void 0, void 0, function* () {
328
- const form = new DemoPageForm(page, props);
292
+ const form = new Form(props);
329
293
  yield form.initialize(beforeInit);
330
294
  return form;
331
295
  });
332
296
  }
333
297
  exports.createForm = createForm;
298
+ function waitUntilBlockingLoaderHides(timeout) {
299
+ return protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.invisibilityOf(protractor_1.$(".laji-form.blocking-loader")), timeout || 20000, "Blocking loader timeout");
300
+ }
301
+ exports.waitUntilBlockingLoaderHides = waitUntilBlockingLoaderHides;
302
+ function putForeignMarkerToMap() {
303
+ return __awaiter(this, void 0, void 0, function* () {
304
+ const $gatheringsMap = exports.lajiFormLocate("gatherings").$(".laji-map");
305
+ const $markerButton = protractor_1.$(".leaflet-draw-draw-marker");
306
+ yield $markerButton.click();
307
+ yield protractor_1.browser.actions().mouseMove($gatheringsMap.getWebElement(), { x: -100, y: -100 }).perform();
308
+ yield protractor_1.browser.actions().click().perform();
309
+ });
310
+ }
311
+ exports.putForeignMarkerToMap = putForeignMarkerToMap;
312
+ function removeUnit(gatheringIdx, unitIdx) {
313
+ return __awaiter(this, void 0, void 0, function* () {
314
+ yield protractor_1.$(`#root_gatherings_${gatheringIdx}_units_${unitIdx}-delete`).click();
315
+ return protractor_1.$(`#root_gatherings_${gatheringIdx}_units_${unitIdx}-delete-confirm-yes`).click();
316
+ });
317
+ }
318
+ exports.removeUnit = removeUnit;
319
+ const updateValue = ($input, value, blur = true) => __awaiter(void 0, void 0, void 0, function* () {
320
+ const current = (yield $input.getAttribute("value")) || "";
321
+ yield $input.click();
322
+ yield $input.sendKeys(...Array(current.length).fill(protractor_1.protractor.Key.BACK_SPACE), value);
323
+ if (blur) {
324
+ return $input.sendKeys(protractor_1.protractor.Key.TAB);
325
+ }
326
+ });
327
+ exports.updateValue = updateValue;
328
+ exports.mockImageMetadata = {
329
+ "id": "mock",
330
+ "capturerVerbatim": [
331
+ "mock"
332
+ ],
333
+ "intellectualOwner": "mock",
334
+ "intellectualRights": "MZ.intellectualRightsCC-BY-SA-4.0",
335
+ "fullURL": "https://imagetest.laji.fi/MM.97056/pixel_full.jpg",
336
+ "largeURL": "https://imagetest.laji.fi/MM.97056/pixel_large.jpg",
337
+ "squareThumbnailURL": "https://imagetest.laji.fi/MM.97056/pixel_square.jpg",
338
+ "thumbnailURL": "https://imagetest.laji.fi/MM.97056/pixel_thumb.jpg",
339
+ "originalURL": "https://imagetest.laji.fi/MM.97056/pixel.png",
340
+ "uploadedBy": "MA.308",
341
+ "@context": "http://schema.laji.fi/context/image-en.jsonld"
342
+ };
334
343
  const filterUUIDs = (any) => {
335
344
  if (typeof any === "object" && !Array.isArray(any) && any !== null) {
336
345
  return Object.keys(any).filter(key => key !== "_lajiFormId").reduce((_any, key) => (Object.assign(Object.assign({}, _any), { [key]: exports.filterUUIDs(any[key]) })), {});
@@ -343,8 +352,3 @@ const filterUUIDs = (any) => {
343
352
  exports.filterUUIDs = filterUUIDs;
344
353
  const maybeJSONPointerToLocator = (pointer) => pointer[0] === "/" ? pointer.slice(1).replace(/\//g, "_") : pointer;
345
354
  exports.maybeJSONPointerToLocator = maybeJSONPointerToLocator;
346
- const getRemoveUnit = (page) => (gatheringIdx, unitIdx) => __awaiter(void 0, void 0, void 0, function* () {
347
- yield page.locator(`#root_gatherings_${gatheringIdx}_units_${unitIdx}-delete`).click();
348
- return page.locator(`#root_gatherings_${gatheringIdx}_units_${unitIdx}-delete-confirm-yes`).click();
349
- });
350
- exports.getRemoveUnit = getRemoveUnit;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const test_utils_1 = require("./test-utils");
13
+ const protractor_1 = require("protractor");
14
+ describe("transaction form (MHL.930)", () => {
15
+ let form;
16
+ let typeEnum$;
17
+ const uiSchemaContext = {
18
+ userName: "Test, User",
19
+ userEmail: "user.test@email.com"
20
+ };
21
+ beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
22
+ form = yield test_utils_1.createForm({ id: "MHL.930" });
23
+ yield form.setState({ uiSchemaContext });
24
+ typeEnum$ = form.$getEnumWidget("type");
25
+ yield typeEnum$.openEnums();
26
+ yield typeEnum$.$$enums.first().click();
27
+ }));
28
+ it("sets correct name and email when clicking a me button", () => __awaiter(void 0, void 0, void 0, function* () {
29
+ yield form.$locate("localPerson").$("button").click();
30
+ const $input = form.$locate("localPerson").$("input");
31
+ expect(yield $input.getAttribute("value")).toBe("Test, User");
32
+ const $input2 = form.$locate("localPersonEmail").$("input");
33
+ expect(yield $input2.getAttribute("value")).toBe("user.test@email.com");
34
+ const formData = yield form.getChangedData();
35
+ expect(formData.localPerson).toBe("Test, User");
36
+ expect(formData.localPersonEmail).toBe("user.test@email.com");
37
+ }));
38
+ describe("specimen fields", () => {
39
+ it("adds the ids", () => __awaiter(void 0, void 0, void 0, function* () {
40
+ const $input = form.$getInputWidget("awayIDs");
41
+ yield $input.sendKeys("abc cde efg");
42
+ yield $input.sendKeys(protractor_1.protractor.Key.TAB);
43
+ let formData = yield form.getChangedData();
44
+ expect(formData.awayIDs).toEqual(["abc", "cde", "efg"]);
45
+ }));
46
+ it("marks all as returned", () => __awaiter(void 0, void 0, void 0, function* () {
47
+ const returnAllButton$ = protractor_1.$(".laji-form-multi-tag-array-field-buttons").all(protractor_1.by.tagName("button")).get(0);
48
+ yield returnAllButton$.click();
49
+ const formData = yield form.getChangedData();
50
+ expect(formData.awayIDs).toEqual([]);
51
+ expect(formData.returnedIDs).toEqual(["abc", "cde", "efg"]);
52
+ }));
53
+ it("marks selected ids as missing", () => __awaiter(void 0, void 0, void 0, function* () {
54
+ const markAsMissingButton$ = protractor_1.$(".laji-form-multi-tag-array-field-buttons").all(protractor_1.by.tagName("button")).get(3);
55
+ yield markAsMissingButton$.click();
56
+ const tags$ = form.$locate("returnedIDs").$$(".rw-multiselect-tag");
57
+ yield tags$.get(1).click();
58
+ const formData = yield form.getChangedData();
59
+ expect(formData.returnedIDs).toEqual(["abc", "efg"]);
60
+ expect(formData.missingIDs).toEqual(["cde"]);
61
+ }));
62
+ });
63
+ });
@@ -0,0 +1 @@
1
+ export {};