@luomus/laji-form 14.3.6

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 (302) hide show
  1. package/CHANGELOG.md +215 -0
  2. package/LICENSE +21 -0
  3. package/README.md +180 -0
  4. package/cypress/fixtures/example.json +5 -0
  5. closes suggestion list (failed).png +0 -0
  6. is marked as suggested (failed).png +0 -0
  7. package/dist/images/finnish-flag.png +0 -0
  8. package/dist/images/handled.png +0 -0
  9. package/dist/images/heard.png +0 -0
  10. package/dist/images/indirect.png +0 -0
  11. package/dist/images/media.png +0 -0
  12. package/dist/images/seen.png +0 -0
  13. package/dist/images/specimen.png +0 -0
  14. package/dist/laji-form.js +2 -0
  15. package/dist/laji-form.js.LICENSE.txt +92 -0
  16. package/dist/styles.css +3771 -0
  17. package/lib/ApiClient.d.ts +46 -0
  18. package/lib/ApiClient.js +93 -0
  19. package/lib/Context.d.ts +8 -0
  20. package/lib/Context.js +18 -0
  21. package/lib/ReactContext.d.ts +7 -0
  22. package/lib/ReactContext.js +5 -0
  23. package/lib/components/BaseComponent.d.ts +9 -0
  24. package/lib/components/BaseComponent.js +29 -0
  25. package/lib/components/LajiForm.d.ts +221 -0
  26. package/lib/components/LajiForm.js +614 -0
  27. package/lib/components/VirtualSchemaField.d.ts +42 -0
  28. package/lib/components/VirtualSchemaField.js +74 -0
  29. package/lib/components/components.d.ts +119 -0
  30. package/lib/components/components.js +606 -0
  31. package/lib/components/fields/AnnotationField.d.ts +34 -0
  32. package/lib/components/fields/AnnotationField.js +242 -0
  33. package/lib/components/fields/AnyToBooleanField.d.ts +18 -0
  34. package/lib/components/fields/AnyToBooleanField.js +20 -0
  35. package/lib/components/fields/ArrayBulkField.d.ts +23 -0
  36. package/lib/components/fields/ArrayBulkField.js +82 -0
  37. package/lib/components/fields/ArrayCombinerField.d.ts +36 -0
  38. package/lib/components/fields/ArrayCombinerField.js +138 -0
  39. package/lib/components/fields/ArrayField.d.ts +39 -0
  40. package/lib/components/fields/ArrayField.js +148 -0
  41. package/lib/components/fields/AudioArrayField.d.ts +22 -0
  42. package/lib/components/fields/AudioArrayField.js +100 -0
  43. package/lib/components/fields/AutoArrayField.d.ts +24 -0
  44. package/lib/components/fields/AutoArrayField.js +56 -0
  45. package/lib/components/fields/AutosuggestField.d.ts +69 -0
  46. package/lib/components/fields/AutosuggestField.js +299 -0
  47. package/lib/components/fields/CombinedValueDisplayField.d.ts +41 -0
  48. package/lib/components/fields/CombinedValueDisplayField.js +100 -0
  49. package/lib/components/fields/ConditionalOnChangeField.d.ts +42 -0
  50. package/lib/components/fields/ConditionalOnChangeField.js +107 -0
  51. package/lib/components/fields/ConditionalUiSchemaField.d.ts +123 -0
  52. package/lib/components/fields/ConditionalUiSchemaField.js +143 -0
  53. package/lib/components/fields/ContextInjectionField.d.ts +24 -0
  54. package/lib/components/fields/ContextInjectionField.js +68 -0
  55. package/lib/components/fields/DataLeakerField.d.ts +40 -0
  56. package/lib/components/fields/DataLeakerField.js +68 -0
  57. package/lib/components/fields/DefaultValueArrayField.d.ts +34 -0
  58. package/lib/components/fields/DefaultValueArrayField.js +59 -0
  59. package/lib/components/fields/DependentBooleanField.d.ts +38 -0
  60. package/lib/components/fields/DependentBooleanField.js +87 -0
  61. package/lib/components/fields/DependentDisableField.d.ts +35 -0
  62. package/lib/components/fields/DependentDisableField.js +71 -0
  63. package/lib/components/fields/EnumRangeArrayField.d.ts +27 -0
  64. package/lib/components/fields/EnumRangeArrayField.js +115 -0
  65. package/lib/components/fields/ExtraLabelRowField.d.ts +38 -0
  66. package/lib/components/fields/ExtraLabelRowField.js +100 -0
  67. package/lib/components/fields/FakePropertyField.d.ts +18 -0
  68. package/lib/components/fields/FakePropertyField.js +48 -0
  69. package/lib/components/fields/FilterArrayField.d.ts +73 -0
  70. package/lib/components/fields/FilterArrayField.js +121 -0
  71. package/lib/components/fields/FlatField.d.ts +29 -0
  72. package/lib/components/fields/FlatField.js +171 -0
  73. package/lib/components/fields/GeocoderField.d.ts +47 -0
  74. package/lib/components/fields/GeocoderField.js +372 -0
  75. package/lib/components/fields/GridLayoutField.d.ts +18 -0
  76. package/lib/components/fields/GridLayoutField.js +32 -0
  77. package/lib/components/fields/HiddenField.d.ts +10 -0
  78. package/lib/components/fields/HiddenField.js +11 -0
  79. package/lib/components/fields/ImageArrayField.d.ts +153 -0
  80. package/lib/components/fields/ImageArrayField.js +696 -0
  81. package/lib/components/fields/ImageDisplayField.d.ts +18 -0
  82. package/lib/components/fields/ImageDisplayField.js +44 -0
  83. package/lib/components/fields/InitiallyHiddenField.d.ts +21 -0
  84. package/lib/components/fields/InitiallyHiddenField.js +58 -0
  85. package/lib/components/fields/InjectDefaultValueField.d.ts +37 -0
  86. package/lib/components/fields/InjectDefaultValueField.js +68 -0
  87. package/lib/components/fields/InjectField.d.ts +46 -0
  88. package/lib/components/fields/InjectField.js +88 -0
  89. package/lib/components/fields/InputWithDefaultValueButtonField.d.ts +25 -0
  90. package/lib/components/fields/InputWithDefaultValueButtonField.js +61 -0
  91. package/lib/components/fields/LocalityField.d.ts +22 -0
  92. package/lib/components/fields/LocalityField.js +94 -0
  93. package/lib/components/fields/LocationChooserField.d.ts +27 -0
  94. package/lib/components/fields/LocationChooserField.js +440 -0
  95. package/lib/components/fields/MapArrayField.d.ts +78 -0
  96. package/lib/components/fields/MapArrayField.js +1783 -0
  97. package/lib/components/fields/MapField.d.ts +48 -0
  98. package/lib/components/fields/MapField.js +434 -0
  99. package/lib/components/fields/MultiAnyToBooleanField.d.ts +25 -0
  100. package/lib/components/fields/MultiAnyToBooleanField.js +100 -0
  101. package/lib/components/fields/MultiArrayField.d.ts +53 -0
  102. package/lib/components/fields/MultiArrayField.js +224 -0
  103. package/lib/components/fields/MultiLanguageField.d.ts +13 -0
  104. package/lib/components/fields/MultiLanguageField.js +52 -0
  105. package/lib/components/fields/MultiTagArrayField.d.ts +36 -0
  106. package/lib/components/fields/MultiTagArrayField.js +142 -0
  107. package/lib/components/fields/NamedPlaceChooserField.d.ts +29 -0
  108. package/lib/components/fields/NamedPlaceChooserField.js +380 -0
  109. package/lib/components/fields/NamedPlaceSaverField.d.ts +29 -0
  110. package/lib/components/fields/NamedPlaceSaverField.js +237 -0
  111. package/lib/components/fields/NestField.d.ts +148 -0
  112. package/lib/components/fields/NestField.js +289 -0
  113. package/lib/components/fields/ObjectField.d.ts +2 -0
  114. package/lib/components/fields/ObjectField.js +119 -0
  115. package/lib/components/fields/PrefillingArrayField.d.ts +22 -0
  116. package/lib/components/fields/PrefillingArrayField.js +65 -0
  117. package/lib/components/fields/SchemaField.d.ts +7 -0
  118. package/lib/components/fields/SchemaField.js +109 -0
  119. package/lib/components/fields/ScopeField.d.ts +85 -0
  120. package/lib/components/fields/ScopeField.js +521 -0
  121. package/lib/components/fields/SectionArrayField.d.ts +38 -0
  122. package/lib/components/fields/SectionArrayField.js +614 -0
  123. package/lib/components/fields/SelectTreeField.d.ts +39 -0
  124. package/lib/components/fields/SelectTreeField.js +143 -0
  125. package/lib/components/fields/SingleActiveArrayField.d.ts +49 -0
  126. package/lib/components/fields/SingleActiveArrayField.js +974 -0
  127. package/lib/components/fields/SingleItemArrayField.d.ts +15 -0
  128. package/lib/components/fields/SingleItemArrayField.js +60 -0
  129. package/lib/components/fields/SortArrayField.d.ts +73 -0
  130. package/lib/components/fields/SortArrayField.js +351 -0
  131. package/lib/components/fields/SplitField.d.ts +28 -0
  132. package/lib/components/fields/SplitField.js +65 -0
  133. package/lib/components/fields/StringToArrayField.d.ts +24 -0
  134. package/lib/components/fields/StringToArrayField.js +48 -0
  135. package/lib/components/fields/SumField.d.ts +35 -0
  136. package/lib/components/fields/SumField.js +83 -0
  137. package/lib/components/fields/TableField.d.ts +18 -0
  138. package/lib/components/fields/TableField.js +136 -0
  139. package/lib/components/fields/TagArrayField.d.ts +38 -0
  140. package/lib/components/fields/TagArrayField.js +128 -0
  141. package/lib/components/fields/ToggleAdditionalArrayFieldsField.d.ts +26 -0
  142. package/lib/components/fields/ToggleAdditionalArrayFieldsField.js +81 -0
  143. package/lib/components/fields/UiFieldApplierField.d.ts +30 -0
  144. package/lib/components/fields/UiFieldApplierField.js +106 -0
  145. package/lib/components/fields/UiFieldMapperArrayField.d.ts +42 -0
  146. package/lib/components/fields/UiFieldMapperArrayField.js +121 -0
  147. package/lib/components/fields/UnitCountShorthandField.d.ts +22 -0
  148. package/lib/components/fields/UnitCountShorthandField.js +149 -0
  149. package/lib/components/fields/UnitListShorthandArrayField.d.ts +26 -0
  150. package/lib/components/fields/UnitListShorthandArrayField.js +108 -0
  151. package/lib/components/fields/UnitShorthandField.d.ts +32 -0
  152. package/lib/components/fields/UnitShorthandField.js +220 -0
  153. package/lib/components/templates/ArrayFieldTemplate.d.ts +85 -0
  154. package/lib/components/templates/ArrayFieldTemplate.js +416 -0
  155. package/lib/components/templates/BaseInputTemplate.d.ts +11 -0
  156. package/lib/components/templates/BaseInputTemplate.js +80 -0
  157. package/lib/components/templates/DescriptionField.d.ts +1 -0
  158. package/lib/components/templates/DescriptionField.js +37 -0
  159. package/lib/components/templates/ErrorListTemplate.d.ts +9 -0
  160. package/lib/components/templates/ErrorListTemplate.js +95 -0
  161. package/lib/components/templates/FieldTemplate.d.ts +6 -0
  162. package/lib/components/templates/FieldTemplate.js +112 -0
  163. package/lib/components/templates/ObjectFieldTemplate.d.ts +7 -0
  164. package/lib/components/templates/ObjectFieldTemplate.js +66 -0
  165. package/lib/components/templates/TitleField.d.ts +9 -0
  166. package/lib/components/templates/TitleField.js +51 -0
  167. package/lib/components/widgets/AnyToBooleanWidget.d.ts +20 -0
  168. package/lib/components/widgets/AnyToBooleanWidget.js +49 -0
  169. package/lib/components/widgets/AutosuggestWidget.d.ts +66 -0
  170. package/lib/components/widgets/AutosuggestWidget.js +1127 -0
  171. package/lib/components/widgets/CheckboxWidget.d.ts +37 -0
  172. package/lib/components/widgets/CheckboxWidget.js +139 -0
  173. package/lib/components/widgets/DateTimeWidget.d.ts +62 -0
  174. package/lib/components/widgets/DateTimeWidget.js +251 -0
  175. package/lib/components/widgets/DateWidget.d.ts +23 -0
  176. package/lib/components/widgets/DateWidget.js +41 -0
  177. package/lib/components/widgets/HiddenWidget.d.ts +15 -0
  178. package/lib/components/widgets/HiddenWidget.js +19 -0
  179. package/lib/components/widgets/ImageSelectWidget.d.ts +14 -0
  180. package/lib/components/widgets/ImageSelectWidget.js +57 -0
  181. package/lib/components/widgets/InformalTaxonGroupChooserWidget.d.ts +43 -0
  182. package/lib/components/widgets/InformalTaxonGroupChooserWidget.js +237 -0
  183. package/lib/components/widgets/InputGroupWidget.d.ts +21 -0
  184. package/lib/components/widgets/InputGroupWidget.js +36 -0
  185. package/lib/components/widgets/InputWithDefaultValueButtonWidget.d.ts +21 -0
  186. package/lib/components/widgets/InputWithDefaultValueButtonWidget.js +47 -0
  187. package/lib/components/widgets/NumberWidget.d.ts +13 -0
  188. package/lib/components/widgets/NumberWidget.js +21 -0
  189. package/lib/components/widgets/PlainTextWidget.d.ts +12 -0
  190. package/lib/components/widgets/PlainTextWidget.js +24 -0
  191. package/lib/components/widgets/SelectWidget.d.ts +52 -0
  192. package/lib/components/widgets/SelectWidget.js +158 -0
  193. package/lib/components/widgets/SeparatedDateTimeWidget.d.ts +19 -0
  194. package/lib/components/widgets/SeparatedDateTimeWidget.js +59 -0
  195. package/lib/components/widgets/TaxonImageWidget.d.ts +13 -0
  196. package/lib/components/widgets/TaxonImageWidget.js +30 -0
  197. package/lib/components/widgets/TextSelectWidget.d.ts +25 -0
  198. package/lib/components/widgets/TextSelectWidget.js +94 -0
  199. package/lib/components/widgets/TextareaWidget.d.ts +32 -0
  200. package/lib/components/widgets/TextareaWidget.js +87 -0
  201. package/lib/components/widgets/TimeWidget.d.ts +11 -0
  202. package/lib/components/widgets/TimeWidget.js +19 -0
  203. package/lib/components/widgets/URLWidget.d.ts +14 -0
  204. package/lib/components/widgets/URLWidget.js +12 -0
  205. package/lib/components/widgets/UpperCaseWidget.d.ts +13 -0
  206. package/lib/components/widgets/UpperCaseWidget.js +21 -0
  207. package/lib/index.d.ts +20 -0
  208. package/lib/index.js +50 -0
  209. package/lib/services/blocker-service.d.ts +11 -0
  210. package/lib/services/blocker-service.js +55 -0
  211. package/lib/services/custom-event-service.d.ts +17 -0
  212. package/lib/services/custom-event-service.js +35 -0
  213. package/lib/services/dom-id-service.d.ts +8 -0
  214. package/lib/services/dom-id-service.js +30 -0
  215. package/lib/services/focus-service.d.ts +13 -0
  216. package/lib/services/focus-service.js +60 -0
  217. package/lib/services/id-service.d.ts +22 -0
  218. package/lib/services/id-service.js +130 -0
  219. package/lib/services/key-handler-service.d.ts +56 -0
  220. package/lib/services/key-handler-service.js +184 -0
  221. package/lib/services/root-instance-service.d.ts +25 -0
  222. package/lib/services/root-instance-service.js +49 -0
  223. package/lib/services/settings-service.d.ts +34 -0
  224. package/lib/services/settings-service.js +154 -0
  225. package/lib/services/singleton-map-service.d.ts +23 -0
  226. package/lib/services/singleton-map-service.js +44 -0
  227. package/lib/services/submit-hook-service.d.ts +24 -0
  228. package/lib/services/submit-hook-service.js +73 -0
  229. package/lib/styles.d.ts +1 -0
  230. package/lib/styles.js +4 -0
  231. package/lib/themes/bs3.d.ts +3 -0
  232. package/lib/themes/bs3.js +133 -0
  233. package/lib/themes/bs5.d.ts +3 -0
  234. package/lib/themes/bs5.js +111 -0
  235. package/lib/themes/glyphicon-fa-mapping.d.ts +3 -0
  236. package/lib/themes/glyphicon-fa-mapping.js +271 -0
  237. package/lib/themes/stub.d.ts +3 -0
  238. package/lib/themes/stub.js +82 -0
  239. package/lib/themes/theme.d.ts +233 -0
  240. package/lib/themes/theme.js +2 -0
  241. package/lib/translations.json +842 -0
  242. package/lib/utils.d.ts +167 -0
  243. package/lib/utils.js +1191 -0
  244. package/lib/validation.d.ts +7 -0
  245. package/lib/validation.js +141 -0
  246. package/llol +10 -0
  247. package/llol.pdf +10 -0
  248. package/package.json +99 -0
  249. package/q +196 -0
  250. package/test-export/array-spec.d.ts +1 -0
  251. package/test-export/array-spec.js +204 -0
  252. package/test-export/bird-point-count-spec.d.ts +1 -0
  253. package/test-export/bird-point-count-spec.js +62 -0
  254. package/test-export/collection-contest-form-spec.d.ts +1 -0
  255. package/test-export/collection-contest-form-spec.js +38 -0
  256. package/test-export/dataset-form-spec.d.ts +1 -0
  257. package/test-export/dataset-form-spec.js +50 -0
  258. package/test-export/date-time-widget-spec.d.ts +1 -0
  259. package/test-export/date-time-widget-spec.js +188 -0
  260. package/test-export/geocoder-spec.d.ts +1 -0
  261. package/test-export/geocoder-spec.js +135 -0
  262. package/test-export/image-array-spec.d.ts +1 -0
  263. package/test-export/image-array-spec.js +94 -0
  264. package/test-export/inject-field-spec.d.ts +1 -0
  265. package/test-export/inject-field-spec.js +148 -0
  266. package/test-export/internal-uuids-spec.d.ts +1 -0
  267. package/test-export/internal-uuids-spec.js +157 -0
  268. package/test-export/invasive-species-eradication-np-spec.d.ts +1 -0
  269. package/test-export/invasive-species-eradication-np-spec.js +18 -0
  270. package/test-export/invasive-species-eradication-spec.d.ts +1 -0
  271. package/test-export/invasive-species-eradication-spec.js +25 -0
  272. package/test-export/line-transect-spec.d.ts +1 -0
  273. package/test-export/line-transect-spec.js +121 -0
  274. package/test-export/mobile-form-spec.d.ts +1 -0
  275. package/test-export/mobile-form-spec.js +84 -0
  276. package/test-export/nafi-spec.d.ts +1 -0
  277. package/test-export/nafi-spec.js +85 -0
  278. package/test-export/select-widget-spec.d.ts +1 -0
  279. package/test-export/select-widget-spec.js +68 -0
  280. package/test-export/single-item-array-field-spec.d.ts +1 -0
  281. package/test-export/single-item-array-field-spec.js +92 -0
  282. package/test-export/syke-butterfly-spec.d.ts +1 -0
  283. package/test-export/syke-butterfly-spec.js +163 -0
  284. package/test-export/test-utils.d.ts +184 -0
  285. package/test-export/test-utils.js +354 -0
  286. package/test-export/transaction-form-spec.d.ts +1 -0
  287. package/test-export/transaction-form-spec.js +63 -0
  288. package/test-export/trip-report-autosuggest-spec.d.ts +1 -0
  289. package/test-export/trip-report-autosuggest-spec.js +272 -0
  290. package/test-export/trip-report-spec.d.ts +1 -0
  291. package/test-export/trip-report-spec.js +456 -0
  292. package/test-export/unit-list-shorthand-array-field-spec.d.ts +1 -0
  293. package/test-export/unit-list-shorthand-array-field-spec.js +71 -0
  294. package/test-export/validation-spec.d.ts +1 -0
  295. package/test-export/validation-spec.js +336 -0
  296. package/test-export/water-bird-spec.d.ts +1 -0
  297. package/test-export/water-bird-spec.js +30 -0
  298. package/test-export/wbc-spec.d.ts +1 -0
  299. package/test-export/wbc-spec.js +82 -0
  300. package/tsconfig.json +25 -0
  301. package/tsconfig.lib.json +11 -0
  302. package/tsconfig.test.json +10 -0
@@ -0,0 +1,456 @@
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
+ const { googleApiKey } = require("../properties.json");
15
+ const _testWidget = (form) => (path, type) => __awaiter(void 0, void 0, void 0, function* () {
16
+ const parsePointer = (container, path) => {
17
+ const [next, ...remaining] = path.split(".");
18
+ const nextObject = container[next];
19
+ if (remaining.length) {
20
+ return parsePointer(nextObject, remaining.join("."));
21
+ }
22
+ return nextObject;
23
+ };
24
+ expect(yield test_utils_1.lajiFormLocate(path).isDisplayed()).toBe(true);
25
+ const beforeChange = parsePointer((yield form.getChangedData()) || {}, path);
26
+ let widget;
27
+ let $secondOption, $otherOptionThanActive;
28
+ switch (type) {
29
+ case "checkbox":
30
+ widget = form.getBooleanWidget(path);
31
+ yield widget.$nonactive.click();
32
+ break;
33
+ case "enum":
34
+ widget = form.$getEnumWidget(path);
35
+ yield widget.$container.click();
36
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.visibilityOf(widget.$$enums.first()), 300, "enum list didn't appear on widget click");
37
+ $secondOption = widget.$$enums.get(1);
38
+ $otherOptionThanActive = (yield $secondOption.getAttribute("class")).includes("rw-state-selected")
39
+ ? widget.$$enums.first()
40
+ : $secondOption;
41
+ yield $otherOptionThanActive.click();
42
+ break;
43
+ case "date":
44
+ widget = form.getDateWidget(path).$input;
45
+ yield widget.click();
46
+ yield widget.sendKeys("1.1.2019");
47
+ yield widget.sendKeys(protractor_1.protractor.Key.TAB);
48
+ break;
49
+ default:
50
+ widget = form.$getInputWidget(path);
51
+ yield widget.sendKeys("1");
52
+ yield widget.sendKeys(protractor_1.protractor.Key.TAB);
53
+ break;
54
+ }
55
+ expect(beforeChange).not.toEqual(parsePointer(yield form.getChangedData(), path));
56
+ });
57
+ describe("Trip report (JX.519)", () => {
58
+ let form;
59
+ let testWidget;
60
+ let npMock;
61
+ beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
62
+ form = yield test_utils_1.createForm({ id: "JX.519" });
63
+ testWidget = _testWidget(form);
64
+ npMock = yield form.setMockResponse("/named-places");
65
+ }));
66
+ const $gatheringsMap = test_utils_1.lajiFormLocate("gatherings").$(".laji-map");
67
+ describe("gatheringEvent", () => {
68
+ const $gatheringEvent = test_utils_1.lajiFormLocate("gatheringEvent");
69
+ it("container is displayed", () => __awaiter(void 0, void 0, void 0, function* () {
70
+ expect(yield $gatheringEvent.isPresent()).toBe(true);
71
+ }));
72
+ describe("contains", () => {
73
+ it("secureLevel which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
74
+ expect(yield $gatheringEvent.element(test_utils_1.lajiFormLocate("secureLevel").locator()).isDisplayed()).toBe(true);
75
+ yield testWidget("secureLevel", "checkbox");
76
+ }));
77
+ it("gatheringEvent.legPublic which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
78
+ yield testWidget("gatheringEvent.legPublic", "checkbox");
79
+ }));
80
+ it("gatheringEvent.dateBegin which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
81
+ yield testWidget("gatheringEvent.dateBegin", "date");
82
+ }));
83
+ it("gatheringEvent.dateEnd which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
84
+ yield testWidget("gatheringEvent.dateEnd", "date");
85
+ }));
86
+ it("keywords which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
87
+ expect(yield $gatheringEvent.element(test_utils_1.lajiFormLocate("keywords").locator()).isDisplayed()).toBe(true);
88
+ yield testWidget("keywords");
89
+ }));
90
+ // TODO TableField messes up ids!
91
+ describe("observers", () => {
92
+ it("displayed", () => __awaiter(void 0, void 0, void 0, function* () {
93
+ expect(yield test_utils_1.isDisplayed(form.$locate("gatheringEvent.0.leg"))).toBe(true);
94
+ }));
95
+ it("can be added", () => __awaiter(void 0, void 0, void 0, function* () {
96
+ yield form.$locateButton("gatheringEvent", "add").click();
97
+ expect(yield test_utils_1.isDisplayed(form.$locate("gatheringEvent.1.leg"))).toBe(true);
98
+ }));
99
+ it("deleting first shows only the remaining empty", () => __awaiter(void 0, void 0, void 0, function* () {
100
+ // Should be 1st delete button (row 0 is labels)
101
+ yield protractor_1.$$(".table-field .row").get(1).$("button").click(); // eslint-disable-line protractor/use-first-last
102
+ expect(yield test_utils_1.isDisplayed(form.$locate("gatheringEvent.1.leg"))).toBe(false);
103
+ expect(yield form.$getInputWidget("gatheringEvent.0.leg").getAttribute("value")).toBe("");
104
+ }));
105
+ });
106
+ });
107
+ });
108
+ const $gatheringAdd = protractor_1.$("#root_gatherings-add");
109
+ describe("gatherings", () => {
110
+ it("is displayed", () => __awaiter(void 0, void 0, void 0, function* () {
111
+ expect(yield test_utils_1.lajiFormLocate("gatherings").isDisplayed()).toBe(true);
112
+ }));
113
+ it("is empty", () => __awaiter(void 0, void 0, void 0, function* () {
114
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0").isPresent()).toBe(false);
115
+ }));
116
+ it("map is present", () => __awaiter(void 0, void 0, void 0, function* () {
117
+ expect(yield $gatheringsMap.isDisplayed()).toBe(true);
118
+ }));
119
+ it("creating pointer on map creates gathering", () => __awaiter(void 0, void 0, void 0, function* () {
120
+ yield test_utils_1.putForeignMarkerToMap();
121
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0").isDisplayed()).toBe(true);
122
+ }));
123
+ describe("geocoding", () => {
124
+ it("starts and finishes after adding gathering", () => __awaiter(void 0, void 0, void 0, function* () {
125
+ if (yield test_utils_1.lajiFormLocate("gatherings.0.country").isPresent()) {
126
+ return;
127
+ }
128
+ const $loadingGeocoderButton = protractor_1.$(".geocoder-btn .react-spinner");
129
+ if (yield $loadingGeocoderButton.isPresent()) {
130
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.invisibilityOf($loadingGeocoderButton), 6000, "Geocoding timeout");
131
+ }
132
+ expect(yield $loadingGeocoderButton.isPresent()).toBe(false);
133
+ }));
134
+ if (!googleApiKey) {
135
+ pending("Google API key missing");
136
+ }
137
+ it("adds country which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
138
+ yield testWidget("gatherings.0.country");
139
+ }));
140
+ it("adds administrativeProvince which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
141
+ yield testWidget("gatherings.0.administrativeProvince");
142
+ }));
143
+ it("adds municipality which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
144
+ yield testWidget("gatherings.0.municipality");
145
+ }));
146
+ });
147
+ it("contains locality which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
148
+ yield testWidget("gatherings.0.locality");
149
+ }));
150
+ it("contains localityDescription which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
151
+ yield testWidget("gatherings.0.localityDescription");
152
+ }));
153
+ it("contains weather which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
154
+ yield testWidget("gatherings.0.weather");
155
+ }));
156
+ it("contains notes which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
157
+ yield testWidget("gatherings.0.notes");
158
+ }));
159
+ const $additionalsButton = protractor_1.$("#root_gatherings_0-additionals");
160
+ it("has additional fields button", () => __awaiter(void 0, void 0, void 0, function* () {
161
+ expect(yield $additionalsButton.isDisplayed()).toBe(true);
162
+ }));
163
+ describe("taxonCensus", () => {
164
+ it("can be added from additional fields", () => __awaiter(void 0, void 0, void 0, function* () {
165
+ yield $additionalsButton.click();
166
+ const $$additionalListItems = protractor_1.$$(".dropdown.open li a");
167
+ yield $$additionalListItems.last().click();
168
+ expect(yield form.$locate("gatherings.0.taxonCensus").isDisplayed()).toBe(true);
169
+ yield $additionalsButton.click();
170
+ expect(yield $$additionalListItems.isPresent()).toBe(false);
171
+ }));
172
+ it("can add items", () => __awaiter(void 0, void 0, void 0, function* () {
173
+ yield form.$locateButton("gatherings.0.taxonCensus", "add").click();
174
+ }));
175
+ it("added item is focused", () => __awaiter(void 0, void 0, void 0, function* () {
176
+ expect(yield form.$getInputWidget("gatherings.0.taxonCensus.0.censusTaxonID").getAttribute("id")).toBe(yield test_utils_1.getFocusedId());
177
+ }));
178
+ it("added item is displayed and can be edited", () => __awaiter(void 0, void 0, void 0, function* () {
179
+ yield testWidget("gatherings.0.taxonCensus.0.censusTaxonID");
180
+ yield testWidget("gatherings.0.taxonCensus.0.taxonCensusType", "enum");
181
+ }));
182
+ it("second added item is focused", () => __awaiter(void 0, void 0, void 0, function* () {
183
+ const $taxonCensusAdd = form.$locateButton("gatherings.0.taxonCensus", "add");
184
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.visibilityOf($taxonCensusAdd), 300, "taxon census add button is hidden");
185
+ yield $taxonCensusAdd.click();
186
+ expect(yield form.$getInputWidget("gatherings.0.taxonCensus.1.censusTaxonID").getAttribute("id")).toBe(yield test_utils_1.getFocusedId());
187
+ }));
188
+ });
189
+ it("add button works", () => __awaiter(void 0, void 0, void 0, function* () {
190
+ yield $gatheringAdd.click();
191
+ expect(yield test_utils_1.lajiFormLocate("gatherings.1").isDisplayed()).toBe(true);
192
+ yield test_utils_1.waitUntilBlockingLoaderHides();
193
+ }));
194
+ it("map is empty for new gathering", () => __awaiter(void 0, void 0, void 0, function* () {
195
+ expect(yield $gatheringsMap.$(".vector-marker.leaflet-interactive").isPresent()).toBe(false);
196
+ }));
197
+ it("items can be closed", () => __awaiter(void 0, void 0, void 0, function* () {
198
+ yield protractor_1.$("#root_gatherings_1-panel .laji-form-clickable-panel-header").click();
199
+ expect(yield test_utils_1.lajiFormLocate("gatherings.1.units").isPresent()).toBe(false);
200
+ }));
201
+ it("items can be opened", () => __awaiter(void 0, void 0, void 0, function* () {
202
+ yield protractor_1.$("#root_gatherings_1-panel .laji-form-clickable-panel-header").click();
203
+ expect(yield test_utils_1.lajiFormLocate("gatherings.1.units").isPresent()).toBe(true);
204
+ }));
205
+ it("items can be deleted", () => __awaiter(void 0, void 0, void 0, function* () {
206
+ yield protractor_1.$("#root_gatherings_1-delete").click();
207
+ yield protractor_1.$("#root_gatherings_1-delete-confirm-yes").click();
208
+ expect(yield test_utils_1.lajiFormLocate("gatherings.1").isPresent()).toBe(false);
209
+ expect(yield form.$locateAddition("gatherings.1", "header").isPresent()).toBe(false);
210
+ }));
211
+ describe("named place button", () => {
212
+ let $addNPButton;
213
+ const npChooser = new test_utils_1.NamedPlaceChooserPO();
214
+ const npList = npChooser.select;
215
+ let testingInsaneReason = "";
216
+ beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
217
+ $addNPButton = form.$locateButton("gatherings", "addNamedPlace");
218
+ if (!(yield test_utils_1.isDisplayed($addNPButton))) {
219
+ testingInsaneReason = "Using place failed. Maybe you don't have named places or your user token in properties.json is expired?";
220
+ }
221
+ }));
222
+ it("click displays list", () => __awaiter(void 0, void 0, void 0, function* () {
223
+ if (testingInsaneReason) {
224
+ return pending(testingInsaneReason);
225
+ }
226
+ yield $addNPButton.click();
227
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.visibilityOf(npList.$container), 500, "NP modal didn't show up");
228
+ expect(yield test_utils_1.isDisplayed(npList.$container)).toBe(true);
229
+ }));
230
+ it("selecting from list displays map popup", () => __awaiter(void 0, void 0, void 0, function* () {
231
+ if (testingInsaneReason) {
232
+ return pending(testingInsaneReason);
233
+ }
234
+ yield npList.openEnums();
235
+ yield npList.$$enums.first().click();
236
+ }));
237
+ it("map popup select btn click closes chooser modal", () => __awaiter(void 0, void 0, void 0, function* () {
238
+ if (testingInsaneReason) {
239
+ return pending(testingInsaneReason);
240
+ }
241
+ yield npChooser.mapPopup.$useBtn.click();
242
+ }));
243
+ it("np chooser modal closes after np selected or shows alert", () => __awaiter(void 0, void 0, void 0, function* () {
244
+ if (testingInsaneReason) {
245
+ return pending(testingInsaneReason);
246
+ }
247
+ if (yield test_utils_1.isDisplayed(npChooser.$alert)) {
248
+ testingInsaneReason = "Using place failed. Have you configured your user token to properties.json?";
249
+ }
250
+ if (testingInsaneReason) {
251
+ yield npChooser.$close.click();
252
+ return pending(testingInsaneReason);
253
+ }
254
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.invisibilityOf(npList.$container), 500, "NP modal didn't close");
255
+ expect(yield test_utils_1.isDisplayed(npList.$container)).toBe(false);
256
+ }));
257
+ it("new gathering is added", () => __awaiter(void 0, void 0, void 0, function* () {
258
+ if (testingInsaneReason) {
259
+ return pending(testingInsaneReason);
260
+ }
261
+ expect(yield test_utils_1.isDisplayed(form.$locate("gatherings.1"))).toBe(true);
262
+ yield form.$locateButton("gatherings.1", "delete").click();
263
+ yield form.$locateButton("gatherings.1", "delete-confirm-yes").click();
264
+ }));
265
+ });
266
+ });
267
+ describe("units", () => {
268
+ const $unitAdd = protractor_1.$("#root_gatherings_0_units-add");
269
+ it("is displayed", () => __awaiter(void 0, void 0, void 0, function* () {
270
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units").isDisplayed()).toBe(true);
271
+ }));
272
+ it("has one by default", () => __awaiter(void 0, void 0, void 0, function* () {
273
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units.0").isDisplayed()).toBe(true);
274
+ }));
275
+ it("can be added", () => __awaiter(void 0, void 0, void 0, function* () {
276
+ yield $unitAdd.click();
277
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units.1").isDisplayed()).toBe(true);
278
+ }));
279
+ it("added is focused", () => __awaiter(void 0, void 0, void 0, function* () {
280
+ expect(yield form.$getInputWidget("gatherings.0.units.1.identifications.0.taxon").getAttribute("id")).toBe(yield test_utils_1.getFocusedId());
281
+ }));
282
+ it("first is shown as table row after activating second", () => __awaiter(void 0, void 0, void 0, function* () {
283
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units.0").getTagName()).toBe("tr");
284
+ }));
285
+ it("activating works for both", () => __awaiter(void 0, void 0, void 0, function* () {
286
+ yield test_utils_1.lajiFormLocate("gatherings.0.units.0").click();
287
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units.0").getTagName()).toBe("div");
288
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units.1").getTagName()).toBe("tr");
289
+ yield test_utils_1.lajiFormLocate("gatherings.0.units.1").click();
290
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units.1").getTagName()).toBe("div");
291
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units.0").getTagName()).toBe("tr");
292
+ }));
293
+ it("can be deleted", () => __awaiter(void 0, void 0, void 0, function* () {
294
+ yield test_utils_1.removeUnit(0, 1);
295
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units.1").isPresent()).toBe(false);
296
+ }));
297
+ it("first is active after deleting second", () => __awaiter(void 0, void 0, void 0, function* () {
298
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units.0").getTagName()).toBe("div");
299
+ }));
300
+ it("contains identifications.0.taxon", () => __awaiter(void 0, void 0, void 0, function* () {
301
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units.0.identifications.0.taxon").isDisplayed()).toBe(true);
302
+ }));
303
+ it("contains count which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
304
+ yield testWidget("gatherings.0.units.0.count");
305
+ }));
306
+ it("contains notes which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
307
+ yield testWidget("gatherings.0.units.0.notes");
308
+ }));
309
+ it("contains taxonConfidence which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
310
+ yield testWidget("gatherings.0.units.0.taxonConfidence", "enum");
311
+ }));
312
+ it("contains recordBasis which is editable", () => __awaiter(void 0, void 0, void 0, function* () {
313
+ yield testWidget("gatherings.0.units.0.recordBasis", "enum");
314
+ }));
315
+ it("contains images", () => __awaiter(void 0, void 0, void 0, function* () {
316
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units.0.images").isDisplayed()).toBe(true);
317
+ }));
318
+ const $additionalsButton = protractor_1.$("#root_gatherings_0_units_0-additionals");
319
+ const $modal = protractor_1.$(".scope-field-modal");
320
+ it("can open additionals chooser", () => __awaiter(void 0, void 0, void 0, function* () {
321
+ expect(yield $additionalsButton.isDisplayed()).toBe(true);
322
+ const informalGroups = [1, 343, 232, 187];
323
+ let mocks = [];
324
+ for (let id of informalGroups) {
325
+ mocks.push(yield form.setMockResponse(`/informal-taxon-groups/MVL.${id}`));
326
+ }
327
+ yield $additionalsButton.click();
328
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.visibilityOf($modal), 5000, "Additionals modal waiting timeout");
329
+ expect(yield $modal.$$(".list-group .react-spinner").get(1).isDisplayed()).toBe(true);
330
+ for (let idx in informalGroups) {
331
+ yield mocks[idx].resolve({
332
+ "id": informalGroups[idx],
333
+ "name": "test"
334
+ });
335
+ }
336
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.invisibilityOf($modal.$(".list-group .react-spinner")), 5000, "Additionals group title spinner didn't hide");
337
+ expect(yield $modal.$$(".list-group .react-spinner").count()).toBe(0);
338
+ expect(yield $modal.$$(".list-group").get(1).$(".list-group-item strong").getText()).toBe("test");
339
+ }));
340
+ it("can add additional fields", () => __awaiter(void 0, void 0, void 0, function* () {
341
+ expect(yield test_utils_1.lajiFormLocate("gatherings.0.units.0.identifications.0.det").isPresent()).toBe(false);
342
+ expect(yield $additionalsButton.isDisplayed()).toBe(true);
343
+ const $firstGroup = protractor_1.$$(".scope-field-modal-item").first();
344
+ const getFieldCount = () => test_utils_1.lajiFormLocate("gatherings.0.units.0").$$("input").count();
345
+ const fieldCount = yield getFieldCount();
346
+ const $additionalItem = $firstGroup.all(protractor_1.by.css(".list-group-item")).get(1);
347
+ expect(yield $modal.isDisplayed()).toBe(true);
348
+ expect(yield $additionalItem.isDisplayed()).toBe(true);
349
+ yield $additionalItem.click();
350
+ yield $modal.$(".close").click();
351
+ expect(yield $additionalItem.isPresent()).toBe(false);
352
+ expect(yield yield getFieldCount()).toBe(fieldCount + 1);
353
+ }));
354
+ const $getLocationButtonFor = (gatheringIdx, unitIdx) => protractor_1.$(`#root_gatherings_${gatheringIdx}_units_${unitIdx}-location`);
355
+ const $locationModal = protractor_1.$(".map-dialog");
356
+ const $locationModalMap = $locationModal.$(".laji-map");
357
+ it("has location button", () => __awaiter(void 0, void 0, void 0, function* () {
358
+ expect(yield $getLocationButtonFor(0, 0).isDisplayed()).toBe(true);
359
+ }));
360
+ function clickLocationButtonAndAddLocation(gatheringIdx, unitIdx) {
361
+ return __awaiter(this, void 0, void 0, function* () {
362
+ yield $getLocationButtonFor(gatheringIdx, unitIdx).click();
363
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.visibilityOf($locationModal), 5000, "Map modal waiting timeout");
364
+ expect(yield $locationModal.isDisplayed()).toBe(true);
365
+ expect(yield $locationModalMap.isDisplayed()).toBe(true);
366
+ yield protractor_1.browser.actions()
367
+ .mouseMove($locationModalMap.getWebElement(), { x: 100, y: 100 }).perform();
368
+ yield protractor_1.browser.actions().click().perform();
369
+ });
370
+ }
371
+ it("can add location", () => __awaiter(void 0, void 0, void 0, function* () {
372
+ yield clickLocationButtonAndAddLocation(0, 0);
373
+ expect(yield $gatheringsMap.$$(".vector-marker.leaflet-interactive").count()).toBe(2);
374
+ }));
375
+ it("unit map modal hides after adding location", () => __awaiter(void 0, void 0, void 0, function* () {
376
+ expect(yield $locationModalMap.isPresent()).toBe(false);
377
+ }));
378
+ const $$gatheringMarkerPaths = $gatheringsMap.$$(".vector-marker path");
379
+ it("gatherings map shows unit with different color", () => __awaiter(void 0, void 0, void 0, function* () {
380
+ expect(yield $$gatheringMarkerPaths.count()).toBe(2);
381
+ const firstFill = yield $$gatheringMarkerPaths.first().getAttribute("fill");
382
+ const secondFill = yield $$gatheringMarkerPaths.last().getAttribute("fill");
383
+ expect(yield firstFill).not.toBe(secondFill);
384
+ }));
385
+ it("hovering unit table row changes gathering map unit color", () => __awaiter(void 0, void 0, void 0, function* () {
386
+ yield $unitAdd.click();
387
+ const unitFill = yield $$gatheringMarkerPaths.last().getAttribute("style");
388
+ debugger;
389
+ yield protractor_1.browser.actions()
390
+ .mouseMove(test_utils_1.lajiFormLocate("gatherings.0.units.0").getWebElement())
391
+ .perform();
392
+ debugger;
393
+ const unitFillAfterLocationHover = yield $$gatheringMarkerPaths.last().getAttribute("style");
394
+ expect(unitFill).not.toBe(unitFillAfterLocationHover);
395
+ yield test_utils_1.removeUnit(0, 1);
396
+ }));
397
+ const $locationPeeker = protractor_1.$("#root_gatherings_0_units_0-location-peeker");
398
+ it("hovering location button displays location peeking map", () => __awaiter(void 0, void 0, void 0, function* () {
399
+ yield protractor_1.browser.actions()
400
+ .mouseMove($getLocationButtonFor(0, 0).getWebElement())
401
+ .perform();
402
+ expect(yield $locationPeeker.isDisplayed()).toBe(true);
403
+ }));
404
+ it("location peeker shows data", () => __awaiter(void 0, void 0, void 0, function* () {
405
+ yield protractor_1.browser.actions()
406
+ .mouseMove($getLocationButtonFor(0, 0).getWebElement())
407
+ .perform();
408
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.visibilityOf($locationPeeker.$(".leaflet-container")), 5000, "Map peeker waiting timeout");
409
+ const $$peekerPaths = protractor_1.$$("#root_gatherings_0_units_0-location-peeker .vector-marker path");
410
+ expect(yield $$peekerPaths.count()).not.toBe(0);
411
+ const firstFill = yield $$peekerPaths.first().getAttribute("fill");
412
+ const secondFill = yield $$peekerPaths.last().getAttribute("fill");
413
+ expect(yield firstFill).not.toBe(secondFill);
414
+ }));
415
+ it("can have location even if gathering doesn't have", () => __awaiter(void 0, void 0, void 0, function* () {
416
+ yield $gatheringAdd.click();
417
+ yield clickLocationButtonAndAddLocation(1, 0);
418
+ yield test_utils_1.waitUntilBlockingLoaderHides(6000);
419
+ expect(yield $$gatheringMarkerPaths.count()).toBe(1);
420
+ yield protractor_1.$("#root_gatherings_1-delete").click();
421
+ yield protractor_1.$("#root_gatherings_1-delete-confirm-yes").click();
422
+ if (!googleApiKey) {
423
+ yield test_utils_1.waitUntilBlockingLoaderHides(6000);
424
+ }
425
+ }));
426
+ it("choosing informal taxon group changes fields", () => __awaiter(void 0, void 0, void 0, function* () {
427
+ yield protractor_1.$(".informal-taxon-group-chooser").click();
428
+ const getFieldCount = () => test_utils_1.lajiFormLocate("gatherings.0.units.0").$$("input").count();
429
+ const fieldCount = yield getFieldCount();
430
+ const $birdButton = protractor_1.element(protractor_1.by.className("MVL.1")).element(protractor_1.by.xpath("..")).$$("button").last(); // eslint-disable-line protractor/no-by-xpath
431
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.visibilityOf($birdButton), 5000, "Bird button didn't show up");
432
+ yield $birdButton.click();
433
+ yield protractor_1.browser.wait(protractor_1.protractor.ExpectedConditions.visibilityOf(test_utils_1.lajiFormLocate("gatherings.0.units.0.twitched")), 4000, "Bird field didn't appear");
434
+ expect(yield fieldCount).not.toBe(yield getFieldCount());
435
+ }));
436
+ it("adding image in background", () => __awaiter(void 0, void 0, void 0, function* () {
437
+ yield $unitAdd.click();
438
+ const { resolve, remove } = yield form.mockImageUpload("gatherings.0.units.1");
439
+ yield form.$locate("gatherings.0.units.0").$$("td").first().click();
440
+ yield resolve();
441
+ yield form.$locate("gatherings.0.units.1").$$("td").first().click();
442
+ expect(yield form.getImageArrayField("gatherings.0.units.1").$$imgs.count()).toBe(1);
443
+ yield remove();
444
+ yield test_utils_1.removeUnit(0, 1);
445
+ }));
446
+ it("removing unit with image loading", () => __awaiter(void 0, void 0, void 0, function* () {
447
+ yield $unitAdd.click();
448
+ const { resolve, remove } = yield form.mockImageUpload("gatherings.0.units.1");
449
+ yield form.$locate("gatherings.0.units.0").$$("td").first().click();
450
+ yield test_utils_1.removeUnit(0, 1);
451
+ yield resolve();
452
+ yield remove();
453
+ expect(yield form.failedJobs.$container.isPresent()).toBe(false);
454
+ }));
455
+ });
456
+ });
@@ -0,0 +1,71 @@
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("UnitListShorthandArrayField", () => {
15
+ const schema = {
16
+ type: "array",
17
+ items: {
18
+ type: "object",
19
+ properties: {
20
+ identifications: {
21
+ type: "array",
22
+ items: {
23
+ type: "object",
24
+ properties: {
25
+ taxon: { type: "string" }
26
+ }
27
+ }
28
+ },
29
+ unitFact: {
30
+ type: "object",
31
+ properties: {
32
+ autocompleteSelectedTaxonID: { type: "string" }
33
+ }
34
+ },
35
+ informalTaxonGroups: {
36
+ type: "array",
37
+ items: { type: "string" }
38
+ }
39
+ }
40
+ }
41
+ };
42
+ const uiSchema = {
43
+ "ui:field": "UnitListShorthandArrayField",
44
+ };
45
+ const formData = [];
46
+ let form;
47
+ let component;
48
+ beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
49
+ form = yield test_utils_1.createForm({ schema, uiSchema, formData });
50
+ component = form.getUnitListShorthandArrayField("");
51
+ }));
52
+ it("button renders", () => __awaiter(void 0, void 0, void 0, function* () {
53
+ expect(yield test_utils_1.isDisplayed(component.$button)).toBe(true);
54
+ }));
55
+ it("button click shows modal", () => __awaiter(void 0, void 0, void 0, function* () {
56
+ yield component.$button.click();
57
+ yield protractor_1.browser.wait(test_utils_1.EC.visibilityOf(component.modal.$addButton), 100, "Modal didn't show up");
58
+ }));
59
+ it("typing species in and submitting gets the formData", () => __awaiter(void 0, void 0, void 0, function* () {
60
+ yield test_utils_1.updateValue(component.modal.$input, "susi, kettu");
61
+ yield component.modal.$addButton.click();
62
+ yield form.waitUntilBlockingLoaderHides(5000);
63
+ const formData = yield form.getChangedData();
64
+ expect(formData[0]["informalTaxonGroups"]).toContain("MVL.2");
65
+ expect(formData[0]["identifications"]).toEqual([{ "taxon": "susi" }]);
66
+ expect(formData[0]["unitFact"]).toEqual({ "autocompleteSelectedTaxonID": "MX.46549" });
67
+ expect(formData[1]["informalTaxonGroups"]).toContain("MVL.2");
68
+ expect(formData[1]["identifications"]).toEqual([{ "taxon": "kettu" }]);
69
+ expect(formData[1]["unitFact"]).toEqual({ "autocompleteSelectedTaxonID": "MX.46587" });
70
+ }));
71
+ });
@@ -0,0 +1 @@
1
+ export {};