@luomus/laji-form 15.0.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.
- package/CHANGELOG.md +0 -4
- package/dist/laji-form.js +1 -1
- package/dist/styles.css +81 -90
- package/jsonconfig.json +26 -0
- package/migrate.sh +0 -1
- package/package.json +8 -8
- package/test-export/array-spec.js +204 -0
- package/test-export/bird-point-count-spec.d.ts +1 -0
- package/test-export/bird-point-count-spec.js +62 -0
- package/test-export/collection-contest-form-spec.d.ts +1 -0
- package/test-export/collection-contest-form-spec.js +38 -0
- package/test-export/dataset-form-spec.d.ts +1 -0
- package/test-export/dataset-form-spec.js +50 -0
- package/test-export/date-time-widget-spec.d.ts +1 -0
- package/test-export/date-time-widget-spec.js +188 -0
- package/test-export/geocoder-spec.d.ts +1 -0
- package/test-export/geocoder-spec.js +135 -0
- package/test-export/image-array-spec.d.ts +1 -0
- package/test-export/image-array-spec.js +94 -0
- package/test-export/inject-field-spec.d.ts +1 -0
- package/test-export/inject-field-spec.js +148 -0
- package/test-export/internal-uuids-spec.d.ts +1 -0
- package/test-export/internal-uuids-spec.js +157 -0
- package/test-export/invasive-species-eradication-np-spec.d.ts +1 -0
- package/test-export/invasive-species-eradication-np-spec.js +18 -0
- package/test-export/invasive-species-eradication-spec.d.ts +1 -0
- package/test-export/invasive-species-eradication-spec.js +25 -0
- package/test-export/line-transect-spec.d.ts +1 -0
- package/test-export/line-transect-spec.js +121 -0
- package/test-export/mobile-form-spec.d.ts +1 -0
- package/test-export/mobile-form-spec.js +84 -0
- package/test-export/nafi-spec.d.ts +1 -0
- package/test-export/nafi-spec.js +85 -0
- package/test-export/select-widget-spec.d.ts +1 -0
- package/test-export/select-widget-spec.js +68 -0
- package/test-export/single-item-array-field-spec.d.ts +1 -0
- package/test-export/single-item-array-field-spec.js +92 -0
- package/test-export/syke-butterfly-spec.d.ts +1 -0
- package/test-export/syke-butterfly-spec.js +163 -0
- package/test-export/test-utils.d.ts +150 -176
- package/test-export/test-utils.js +218 -210
- package/test-export/transaction-form-spec.d.ts +1 -0
- package/test-export/transaction-form-spec.js +63 -0
- package/test-export/trip-report-autosuggest-spec.d.ts +1 -0
- package/test-export/trip-report-autosuggest-spec.js +272 -0
- package/test-export/trip-report-spec.d.ts +1 -0
- package/test-export/trip-report-spec.js +456 -0
- package/test-export/unit-list-shorthand-array-field-spec.d.ts +1 -0
- package/test-export/unit-list-shorthand-array-field-spec.js +71 -0
- package/test-export/validation-spec.d.ts +1 -0
- package/test-export/validation-spec.js +336 -0
- package/test-export/water-bird-spec.d.ts +1 -0
- package/test-export/water-bird-spec.js +30 -0
- package/test-export/wbc-spec.d.ts +1 -0
- package/test-export/wbc-spec.js +82 -0
- package/tsconfig.test.json +1 -1
- package/xsel -b +9 -0
- package/cypress/fixtures/example.json +0 -5
- package/cypress/screenshots/nafi.cy.ts/NAFI (MHL.6) -- selecting species name with keyboard navigation -- and closes suggestion list (failed).png +0 -0
- package/cypress/screenshots/nafi.cy.ts/NAFI (MHL.6) -- selecting species name with keyboard navigation -- and is marked as suggested (failed).png +0 -0
- package/lib/ApiClient.d.ts +0 -46
- package/lib/ApiClient.js +0 -93
- package/lib/Context.d.ts +0 -8
- package/lib/Context.js +0 -18
- package/lib/ReactContext.d.ts +0 -7
- package/lib/ReactContext.js +0 -5
- package/lib/components/BaseComponent.d.ts +0 -9
- package/lib/components/BaseComponent.js +0 -29
- package/lib/components/LajiForm.d.ts +0 -221
- package/lib/components/LajiForm.js +0 -615
- package/lib/components/VirtualSchemaField.d.ts +0 -42
- package/lib/components/VirtualSchemaField.js +0 -74
- package/lib/components/components.d.ts +0 -119
- package/lib/components/components.js +0 -606
- package/lib/components/fields/AnnotationField.d.ts +0 -34
- package/lib/components/fields/AnnotationField.js +0 -242
- package/lib/components/fields/AnyToBooleanField.d.ts +0 -18
- package/lib/components/fields/AnyToBooleanField.js +0 -20
- package/lib/components/fields/ArrayBulkField.d.ts +0 -23
- package/lib/components/fields/ArrayBulkField.js +0 -82
- package/lib/components/fields/ArrayCombinerField.d.ts +0 -36
- package/lib/components/fields/ArrayCombinerField.js +0 -138
- package/lib/components/fields/ArrayField.d.ts +0 -39
- package/lib/components/fields/ArrayField.js +0 -148
- package/lib/components/fields/AudioArrayField.d.ts +0 -22
- package/lib/components/fields/AudioArrayField.js +0 -100
- package/lib/components/fields/AutoArrayField.d.ts +0 -24
- package/lib/components/fields/AutoArrayField.js +0 -56
- package/lib/components/fields/AutosuggestField.d.ts +0 -69
- package/lib/components/fields/AutosuggestField.js +0 -299
- package/lib/components/fields/CombinedValueDisplayField.d.ts +0 -41
- package/lib/components/fields/CombinedValueDisplayField.js +0 -100
- package/lib/components/fields/ConditionalOnChangeField.d.ts +0 -42
- package/lib/components/fields/ConditionalOnChangeField.js +0 -107
- package/lib/components/fields/ConditionalUiSchemaField.d.ts +0 -123
- package/lib/components/fields/ConditionalUiSchemaField.js +0 -143
- package/lib/components/fields/ContextInjectionField.d.ts +0 -24
- package/lib/components/fields/ContextInjectionField.js +0 -68
- package/lib/components/fields/DataLeakerField.d.ts +0 -40
- package/lib/components/fields/DataLeakerField.js +0 -68
- package/lib/components/fields/DefaultValueArrayField.d.ts +0 -34
- package/lib/components/fields/DefaultValueArrayField.js +0 -59
- package/lib/components/fields/DependentBooleanField.d.ts +0 -38
- package/lib/components/fields/DependentBooleanField.js +0 -87
- package/lib/components/fields/DependentDisableField.d.ts +0 -35
- package/lib/components/fields/DependentDisableField.js +0 -71
- package/lib/components/fields/EnumRangeArrayField.d.ts +0 -27
- package/lib/components/fields/EnumRangeArrayField.js +0 -115
- package/lib/components/fields/ExtraLabelRowField.d.ts +0 -38
- package/lib/components/fields/ExtraLabelRowField.js +0 -100
- package/lib/components/fields/FakePropertyField.d.ts +0 -18
- package/lib/components/fields/FakePropertyField.js +0 -48
- package/lib/components/fields/FilterArrayField.d.ts +0 -73
- package/lib/components/fields/FilterArrayField.js +0 -121
- package/lib/components/fields/FlatField.d.ts +0 -29
- package/lib/components/fields/FlatField.js +0 -171
- package/lib/components/fields/GeocoderField.d.ts +0 -47
- package/lib/components/fields/GeocoderField.js +0 -372
- package/lib/components/fields/GridLayoutField.d.ts +0 -18
- package/lib/components/fields/GridLayoutField.js +0 -32
- package/lib/components/fields/HiddenField.d.ts +0 -10
- package/lib/components/fields/HiddenField.js +0 -11
- package/lib/components/fields/ImageArrayField.d.ts +0 -172
- package/lib/components/fields/ImageArrayField.js +0 -697
- package/lib/components/fields/ImageDisplayField.d.ts +0 -18
- package/lib/components/fields/ImageDisplayField.js +0 -44
- package/lib/components/fields/InitiallyHiddenField.d.ts +0 -21
- package/lib/components/fields/InitiallyHiddenField.js +0 -58
- package/lib/components/fields/InjectDefaultValueField.d.ts +0 -37
- package/lib/components/fields/InjectDefaultValueField.js +0 -68
- package/lib/components/fields/InjectField.d.ts +0 -46
- package/lib/components/fields/InjectField.js +0 -88
- package/lib/components/fields/InputWithDefaultValueButtonField.d.ts +0 -25
- package/lib/components/fields/InputWithDefaultValueButtonField.js +0 -61
- package/lib/components/fields/LocalityField.d.ts +0 -22
- package/lib/components/fields/LocalityField.js +0 -94
- package/lib/components/fields/LocationChooserField.d.ts +0 -27
- package/lib/components/fields/LocationChooserField.js +0 -440
- package/lib/components/fields/MapArrayField.d.ts +0 -78
- package/lib/components/fields/MapArrayField.js +0 -1783
- package/lib/components/fields/MapField.d.ts +0 -48
- package/lib/components/fields/MapField.js +0 -434
- package/lib/components/fields/MultiAnyToBooleanField.d.ts +0 -25
- package/lib/components/fields/MultiAnyToBooleanField.js +0 -100
- package/lib/components/fields/MultiArrayField.d.ts +0 -53
- package/lib/components/fields/MultiArrayField.js +0 -224
- package/lib/components/fields/MultiLanguageField.d.ts +0 -13
- package/lib/components/fields/MultiLanguageField.js +0 -52
- package/lib/components/fields/MultiTagArrayField.d.ts +0 -36
- package/lib/components/fields/MultiTagArrayField.js +0 -142
- package/lib/components/fields/NamedPlaceChooserField.d.ts +0 -29
- package/lib/components/fields/NamedPlaceChooserField.js +0 -380
- package/lib/components/fields/NamedPlaceSaverField.d.ts +0 -29
- package/lib/components/fields/NamedPlaceSaverField.js +0 -237
- package/lib/components/fields/NestField.d.ts +0 -148
- package/lib/components/fields/NestField.js +0 -289
- package/lib/components/fields/ObjectField.d.ts +0 -2
- package/lib/components/fields/ObjectField.js +0 -119
- package/lib/components/fields/PdfArrayField.d.ts +0 -21
- package/lib/components/fields/PdfArrayField.js +0 -40
- package/lib/components/fields/PrefillingArrayField.d.ts +0 -22
- package/lib/components/fields/PrefillingArrayField.js +0 -65
- package/lib/components/fields/SchemaField.d.ts +0 -7
- package/lib/components/fields/SchemaField.js +0 -109
- package/lib/components/fields/ScopeField.d.ts +0 -85
- package/lib/components/fields/ScopeField.js +0 -521
- package/lib/components/fields/SectionArrayField.d.ts +0 -38
- package/lib/components/fields/SectionArrayField.js +0 -618
- package/lib/components/fields/SelectTreeField.d.ts +0 -39
- package/lib/components/fields/SelectTreeField.js +0 -143
- package/lib/components/fields/SingleActiveArrayField.d.ts +0 -49
- package/lib/components/fields/SingleActiveArrayField.js +0 -974
- package/lib/components/fields/SingleItemArrayField.d.ts +0 -15
- package/lib/components/fields/SingleItemArrayField.js +0 -60
- package/lib/components/fields/SortArrayField.d.ts +0 -73
- package/lib/components/fields/SortArrayField.js +0 -351
- package/lib/components/fields/SplitField.d.ts +0 -28
- package/lib/components/fields/SplitField.js +0 -65
- package/lib/components/fields/StringToArrayField.d.ts +0 -24
- package/lib/components/fields/StringToArrayField.js +0 -48
- package/lib/components/fields/SumField.d.ts +0 -35
- package/lib/components/fields/SumField.js +0 -83
- package/lib/components/fields/TableField.d.ts +0 -18
- package/lib/components/fields/TableField.js +0 -136
- package/lib/components/fields/TagArrayField.d.ts +0 -38
- package/lib/components/fields/TagArrayField.js +0 -128
- package/lib/components/fields/ToggleAdditionalArrayFieldsField.d.ts +0 -26
- package/lib/components/fields/ToggleAdditionalArrayFieldsField.js +0 -81
- package/lib/components/fields/UiFieldApplierField.d.ts +0 -30
- package/lib/components/fields/UiFieldApplierField.js +0 -106
- package/lib/components/fields/UiFieldMapperArrayField.d.ts +0 -42
- package/lib/components/fields/UiFieldMapperArrayField.js +0 -121
- package/lib/components/fields/UnitCountShorthandField.d.ts +0 -22
- package/lib/components/fields/UnitCountShorthandField.js +0 -149
- package/lib/components/fields/UnitListShorthandArrayField.d.ts +0 -26
- package/lib/components/fields/UnitListShorthandArrayField.js +0 -108
- package/lib/components/fields/UnitShorthandField.d.ts +0 -32
- package/lib/components/fields/UnitShorthandField.js +0 -220
- package/lib/components/templates/ArrayFieldTemplate.d.ts +0 -85
- package/lib/components/templates/ArrayFieldTemplate.js +0 -417
- package/lib/components/templates/BaseInputTemplate.d.ts +0 -11
- package/lib/components/templates/BaseInputTemplate.js +0 -80
- package/lib/components/templates/DescriptionField.d.ts +0 -1
- package/lib/components/templates/DescriptionField.js +0 -37
- package/lib/components/templates/ErrorListTemplate.d.ts +0 -9
- package/lib/components/templates/ErrorListTemplate.js +0 -95
- package/lib/components/templates/FieldTemplate.d.ts +0 -6
- package/lib/components/templates/FieldTemplate.js +0 -112
- package/lib/components/templates/ObjectFieldTemplate.d.ts +0 -7
- package/lib/components/templates/ObjectFieldTemplate.js +0 -66
- package/lib/components/templates/TitleField.d.ts +0 -9
- package/lib/components/templates/TitleField.js +0 -51
- package/lib/components/widgets/AnyToBooleanWidget.d.ts +0 -20
- package/lib/components/widgets/AnyToBooleanWidget.js +0 -49
- package/lib/components/widgets/AutosuggestWidget.d.ts +0 -66
- package/lib/components/widgets/AutosuggestWidget.js +0 -1127
- package/lib/components/widgets/CheckboxWidget.d.ts +0 -37
- package/lib/components/widgets/CheckboxWidget.js +0 -139
- package/lib/components/widgets/DateTimeWidget.d.ts +0 -62
- package/lib/components/widgets/DateTimeWidget.js +0 -251
- package/lib/components/widgets/DateWidget.d.ts +0 -23
- package/lib/components/widgets/DateWidget.js +0 -41
- package/lib/components/widgets/HiddenWidget.d.ts +0 -15
- package/lib/components/widgets/HiddenWidget.js +0 -19
- package/lib/components/widgets/ImageSelectWidget.d.ts +0 -14
- package/lib/components/widgets/ImageSelectWidget.js +0 -57
- package/lib/components/widgets/InformalTaxonGroupChooserWidget.d.ts +0 -43
- package/lib/components/widgets/InformalTaxonGroupChooserWidget.js +0 -237
- package/lib/components/widgets/InputGroupWidget.d.ts +0 -21
- package/lib/components/widgets/InputGroupWidget.js +0 -36
- package/lib/components/widgets/InputWithDefaultValueButtonWidget.d.ts +0 -21
- package/lib/components/widgets/InputWithDefaultValueButtonWidget.js +0 -47
- package/lib/components/widgets/NumberWidget.d.ts +0 -13
- package/lib/components/widgets/NumberWidget.js +0 -21
- package/lib/components/widgets/PlainTextWidget.d.ts +0 -12
- package/lib/components/widgets/PlainTextWidget.js +0 -24
- package/lib/components/widgets/SelectWidget.d.ts +0 -52
- package/lib/components/widgets/SelectWidget.js +0 -158
- package/lib/components/widgets/SeparatedDateTimeWidget.d.ts +0 -19
- package/lib/components/widgets/SeparatedDateTimeWidget.js +0 -59
- package/lib/components/widgets/TaxonImageWidget.d.ts +0 -13
- package/lib/components/widgets/TaxonImageWidget.js +0 -30
- package/lib/components/widgets/TextSelectWidget.d.ts +0 -25
- package/lib/components/widgets/TextSelectWidget.js +0 -94
- package/lib/components/widgets/TextareaWidget.d.ts +0 -32
- package/lib/components/widgets/TextareaWidget.js +0 -87
- package/lib/components/widgets/TimeWidget.d.ts +0 -11
- package/lib/components/widgets/TimeWidget.js +0 -19
- package/lib/components/widgets/URLWidget.d.ts +0 -14
- package/lib/components/widgets/URLWidget.js +0 -12
- package/lib/components/widgets/UpperCaseWidget.d.ts +0 -13
- package/lib/components/widgets/UpperCaseWidget.js +0 -21
- package/lib/index.d.ts +0 -20
- package/lib/index.js +0 -50
- package/lib/services/blocker-service.d.ts +0 -11
- package/lib/services/blocker-service.js +0 -55
- package/lib/services/custom-event-service.d.ts +0 -17
- package/lib/services/custom-event-service.js +0 -35
- package/lib/services/dom-id-service.d.ts +0 -8
- package/lib/services/dom-id-service.js +0 -30
- package/lib/services/focus-service.d.ts +0 -13
- package/lib/services/focus-service.js +0 -60
- package/lib/services/id-service.d.ts +0 -22
- package/lib/services/id-service.js +0 -130
- package/lib/services/key-handler-service.d.ts +0 -56
- package/lib/services/key-handler-service.js +0 -184
- package/lib/services/root-instance-service.d.ts +0 -25
- package/lib/services/root-instance-service.js +0 -49
- package/lib/services/settings-service.d.ts +0 -34
- package/lib/services/settings-service.js +0 -154
- package/lib/services/singleton-map-service.d.ts +0 -23
- package/lib/services/singleton-map-service.js +0 -44
- package/lib/services/submit-hook-service.d.ts +0 -24
- package/lib/services/submit-hook-service.js +0 -73
- package/lib/styles.js +0 -4
- package/lib/themes/bs3.d.ts +0 -3
- package/lib/themes/bs3.js +0 -133
- package/lib/themes/bs5.d.ts +0 -3
- package/lib/themes/bs5.js +0 -111
- package/lib/themes/glyphicon-fa-mapping.d.ts +0 -3
- package/lib/themes/glyphicon-fa-mapping.js +0 -271
- package/lib/themes/stub.d.ts +0 -3
- package/lib/themes/stub.js +0 -82
- package/lib/themes/theme.d.ts +0 -233
- package/lib/themes/theme.js +0 -2
- package/lib/translations.json +0 -847
- package/lib/utils.d.ts +0 -171
- package/lib/utils.js +0 -1191
- package/lib/validation.d.ts +0 -7
- package/lib/validation.js +0 -141
- package/llol +0 -10
- package/llol.pdf +0 -10
- package/playwright-report/index.html +0 -62
- package/q +0 -196
- package/rename.sh +0 -24
- package/trip-report.spec.ts +0 -594
- /package/{lib/styles.d.ts → test-export/array-spec.d.ts} +0 -0
package/trip-report.spec.ts
DELETED
|
@@ -1,594 +0,0 @@
|
|
|
1
|
-
import { test, expect, Locator, Page } from "@playwright/test";
|
|
2
|
-
import { Form, createForm, Mock, NamedPlaceChooserPO, lajiFormLocator, EnumWidgetPO } from "./test-utils";
|
|
3
|
-
const { googleApiKey } = require("../properties.json");
|
|
4
|
-
|
|
5
|
-
const _testWidget = (form: Form) => async (path: string, type?: string) => {
|
|
6
|
-
const parsePointer = (container: any, path: string): any => {
|
|
7
|
-
const [next, ...remaining] = path.split(".");
|
|
8
|
-
const nextObject = container[next];
|
|
9
|
-
if (remaining.length) {
|
|
10
|
-
return parsePointer(nextObject, remaining.join("."));
|
|
11
|
-
}
|
|
12
|
-
return nextObject;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
expect(form.$locate(path)).toBeVisible();
|
|
16
|
-
const beforeChange = parsePointer(await form.getChangedData() || {}, path);
|
|
17
|
-
let widget;
|
|
18
|
-
let $secondOption, $otherOptionThanActive;
|
|
19
|
-
switch (type) {
|
|
20
|
-
case "checkbox":
|
|
21
|
-
widget = form.getBooleanWidget(path);
|
|
22
|
-
await widget.$nonactive.click();
|
|
23
|
-
break;
|
|
24
|
-
case "enum":
|
|
25
|
-
widget = form.$getEnumWidget(path);
|
|
26
|
-
await widget.$container.click();
|
|
27
|
-
$secondOption = widget.$enums.nth(1);
|
|
28
|
-
$otherOptionThanActive = (await $secondOption.getAttribute("class")).includes("rw-state-selected")
|
|
29
|
-
? widget.$enums.first()
|
|
30
|
-
: $secondOption;
|
|
31
|
-
await $otherOptionThanActive.click();
|
|
32
|
-
break;
|
|
33
|
-
case "date":
|
|
34
|
-
widget = form.getDateWidget(path).$input;
|
|
35
|
-
await widget.click();
|
|
36
|
-
await widget.type("1.1.2019");
|
|
37
|
-
await widget.press("Tab");
|
|
38
|
-
break;
|
|
39
|
-
default:
|
|
40
|
-
widget = form.$getInputWidget(path);
|
|
41
|
-
await widget.type("1");
|
|
42
|
-
await widget.press("Tab");
|
|
43
|
-
break;
|
|
44
|
-
}
|
|
45
|
-
expect(beforeChange).not.toEqual(parsePointer(await form.getChangedData(), path));
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
test.describe.configure({ mode: "serial" });
|
|
49
|
-
|
|
50
|
-
test.describe("Trip report (JX.519)", () => {
|
|
51
|
-
|
|
52
|
-
let page: Page;
|
|
53
|
-
let form: Form;
|
|
54
|
-
let testWidget: (path: string, fill?: string) => Promise<void>;
|
|
55
|
-
let npMock: Mock;
|
|
56
|
-
let $gatheringsMap: Locator;
|
|
57
|
-
let $$gatheringMarkerPaths: Locator;
|
|
58
|
-
let $gatheringEvent: Locator;
|
|
59
|
-
let $gatheringAdd: Locator;
|
|
60
|
-
let $additionalsButton: Locator;
|
|
61
|
-
|
|
62
|
-
test.beforeAll(async ({browser}) => {
|
|
63
|
-
page = await browser.newPage();
|
|
64
|
-
// Initialize via json require so we can mock the named places fetch before the page initializees
|
|
65
|
-
form = await createForm(page);
|
|
66
|
-
npMock = await form.setMockResponse("/named-places", false);
|
|
67
|
-
form.setState({...require("../forms/JX.519"), formData: {gatheringEvent: {leg: [require("../properties.json").userId]}}});
|
|
68
|
-
|
|
69
|
-
testWidget = _testWidget(form);
|
|
70
|
-
$gatheringsMap = form.$locate("gatherings").locator(".laji-map");
|
|
71
|
-
$$gatheringMarkerPaths = $gatheringsMap.locator(".vector-marker path");
|
|
72
|
-
$gatheringEvent = form.$locate("gatheringEvent");
|
|
73
|
-
$gatheringAdd = form.$locateButton("gatherings", "add");
|
|
74
|
-
$additionalsButton = form.$locateButton("gatherings.0", "additionals");
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
test.describe("gatheringEvent", () => {
|
|
78
|
-
|
|
79
|
-
test("container is displayed", async () => {
|
|
80
|
-
await expect($gatheringEvent).toBeVisible();
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
test.describe("contains", () => {
|
|
84
|
-
|
|
85
|
-
test("secureLevel which is editable", async () => {
|
|
86
|
-
await expect($gatheringEvent.locator(lajiFormLocator("secureLevel"))).toBeVisible();
|
|
87
|
-
await testWidget("secureLevel", "checkbox");
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
test("gatheringEvent.legPublic which is editable", async () => {
|
|
91
|
-
await testWidget("gatheringEvent.legPublic", "checkbox");
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
test("gatheringEvent.dateBegin which is editable", async () => {
|
|
95
|
-
await testWidget("gatheringEvent.dateBegin", "date");
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
test("gatheringEvent.dateEnd which is editable", async () => {
|
|
99
|
-
await testWidget("gatheringEvent.dateEnd", "date");
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
test("keywords which is editable", async () => {
|
|
103
|
-
await expect($gatheringEvent.locator(lajiFormLocator("keywords"))).toBeVisible();
|
|
104
|
-
await testWidget("keywords");
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
// TODO TableField messes up ids!
|
|
109
|
-
test.describe("observers", () => {
|
|
110
|
-
test("displayed", async () => {
|
|
111
|
-
await expect(form.$locate("gatheringEvent.0.leg")).toBeVisible();
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
test("can be added", async () => {
|
|
115
|
-
await form.$locateButton("gatheringEvent", "add").click();
|
|
116
|
-
|
|
117
|
-
await expect(form.$locate("gatheringEvent.1.leg")).toBeVisible();
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
test("deleting first shows only the remaining empty", async () => {
|
|
121
|
-
// Should be 1st delete button (row 0 is labels)
|
|
122
|
-
await form.$locate("").locator(".table-field .row").nth(1).locator("button").click();
|
|
123
|
-
|
|
124
|
-
await expect(form.$locate("gatheringEvent.1.leg")).not.toBeVisible();
|
|
125
|
-
await expect(form.$getInputWidget("gatheringEvent.0.leg")).toHaveValue("");
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
test.describe("gatherings", () => {
|
|
132
|
-
let geocodingMock: Mock;
|
|
133
|
-
|
|
134
|
-
test.beforeAll(async () => {
|
|
135
|
-
geocodingMock = await form.setMockResponse("/coordinates/location");
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
test("is displayed", async () => {
|
|
139
|
-
await expect(form.$locate("gatherings")).toBeVisible();
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
test("is empty", async () => {
|
|
143
|
-
await expect(form.$locate("gatherings.0")).not.toBeVisible();
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
test("map is present", async () => {
|
|
147
|
-
await expect($gatheringsMap).toBeVisible();
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
test("creating pointer on map creates gathering", async () => {
|
|
151
|
-
await form.putMarkerToMap(); // Adds outside Finland so "country" field will appear for later test.
|
|
152
|
-
|
|
153
|
-
await expect(form.$locate("gatherings.0")).toBeVisible();
|
|
154
|
-
|
|
155
|
-
await form.$locateButton("gatherings.0", "delete").click(); // Cleanup
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
test.describe("items", async () => {
|
|
159
|
-
test.beforeEach(async () => {
|
|
160
|
-
await form.putMarkerToMap();
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
test.afterEach(async () => {
|
|
164
|
-
await form.$locateButton("gatherings.0", "delete").click();
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
test.describe("geocoding", () => {
|
|
168
|
-
test("starts and finishes after adding gathering", async () => {
|
|
169
|
-
// if (await form.$locate("gatherings.0.country")) {
|
|
170
|
-
// return;
|
|
171
|
-
// }
|
|
172
|
-
// const $loadingGeocoderButton = $(".geocoder-btn .react-spinner");
|
|
173
|
-
|
|
174
|
-
// if (await $loadingGeocoderButton) {
|
|
175
|
-
// await browser.wtest(protractor.ExpectedConditions.invisibilityOf($loadingGeocoderButton), 6000, "Geocoding timeout");
|
|
176
|
-
// }
|
|
177
|
-
|
|
178
|
-
await expect(form.$locate("gatherings.0.country")).not.toBeVisible();
|
|
179
|
-
await expect(form.getGeocoder().$spinner).toBeVisible();
|
|
180
|
-
|
|
181
|
-
await geocodingMock.resolve(require("./mocks/coordinates.json"));
|
|
182
|
-
await geocodingMock.remove();
|
|
183
|
-
|
|
184
|
-
await expect(form.$locate("gatherings.0.country")).toBeVisible();
|
|
185
|
-
await expect(form.getGeocoder().$spinner).not.toBeVisible();
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
test.describe("after geocoded", () => {
|
|
189
|
-
test.beforeEach(async () => {
|
|
190
|
-
await geocodingMock.resolve(require("./mocks/coordinates.json"));
|
|
191
|
-
await geocodingMock.remove();
|
|
192
|
-
});
|
|
193
|
-
test("adds country which is editable", async () => {
|
|
194
|
-
await testWidget("gatherings.0.country");
|
|
195
|
-
});
|
|
196
|
-
|
|
197
|
-
test("adds biologicalProvince which is editable", async () => {
|
|
198
|
-
await testWidget("gatherings.0.biologicalProvince");
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
test("adds municipality which is editable", async () => {
|
|
202
|
-
await testWidget("gatherings.0.municipality");
|
|
203
|
-
});
|
|
204
|
-
});
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
test("contains locality which is editable", async () => {
|
|
208
|
-
await testWidget("gatherings.0.locality");
|
|
209
|
-
});
|
|
210
|
-
|
|
211
|
-
test("contains localityDescription which is editable", async () => {
|
|
212
|
-
await testWidget("gatherings.0.localityDescription");
|
|
213
|
-
});
|
|
214
|
-
|
|
215
|
-
test("contains weather which is editable", async () => {
|
|
216
|
-
await testWidget("gatherings.0.weather");
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
test("contains notes which is editable", async () => {
|
|
220
|
-
await testWidget("gatherings.0.notes");
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
test("has additional fields button", async () => {
|
|
224
|
-
await expect(form.getScopeField("gatherings.0").$button).toBeVisible();
|
|
225
|
-
});
|
|
226
|
-
|
|
227
|
-
test.describe("taxonCensus", () => {
|
|
228
|
-
test("can be added from additional fields", async () => {
|
|
229
|
-
const scopeField = form.getScopeField("gatherings.0");
|
|
230
|
-
await scopeField.$button.click();
|
|
231
|
-
await scopeField.$listItems.last().click();
|
|
232
|
-
|
|
233
|
-
await expect(form.$locate("gatherings.0.taxonCensus")).toBeVisible();
|
|
234
|
-
|
|
235
|
-
await $additionalsButton.click();
|
|
236
|
-
|
|
237
|
-
await expect(scopeField.$listItems).not.toBeVisible();
|
|
238
|
-
});
|
|
239
|
-
|
|
240
|
-
test("can add items", async () => {
|
|
241
|
-
await form.$locateButton("gatherings.0.taxonCensus", "add").click();
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
test("added item is focused", async () => {
|
|
245
|
-
await expect(form.$getInputWidget("gatherings.0.taxonCensus.0.censusTaxonID")).toBeFocused();
|
|
246
|
-
});
|
|
247
|
-
|
|
248
|
-
test("added item is displayed and can be edited", async () => {
|
|
249
|
-
await testWidget("gatherings.0.taxonCensus.0.censusTaxonID");
|
|
250
|
-
await testWidget("gatherings.0.taxonCensus.0.taxonCensusType", "enum");
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
test("second added item is focused", async () => {
|
|
254
|
-
await form.$locateButton("gatherings.0.taxonCensus", "add").click();
|
|
255
|
-
|
|
256
|
-
await expect(form.$getInputWidget("gatherings.0.taxonCensus.1.censusTaxonID")).toBeFocused();
|
|
257
|
-
});
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
test.describe("adding with button", async () => {
|
|
261
|
-
test.beforeAll(async () => {
|
|
262
|
-
await $gatheringAdd.click();
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
test.afterAll(async () => {
|
|
266
|
-
await form.$locateButton("gatherings.0", "delete").click();
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
test("works", async () => {
|
|
270
|
-
await expect(form.$locate("gatherings.1")).toBeVisible();
|
|
271
|
-
});
|
|
272
|
-
|
|
273
|
-
test("map is empty for new gathering", async () => {
|
|
274
|
-
await expect($gatheringsMap.locator(".vector-marker.leaflet-interactive")).toHaveCount(0);
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
test("items can be closed", async () => {
|
|
278
|
-
await form.$locateAddition("gatherings.1", "panel").locator(".laji-form-clickable-panel-header").click();
|
|
279
|
-
|
|
280
|
-
await expect(form.$locate("gatherings.1.units")).not.toBeVisible();
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
test("items can be opened", async () => {
|
|
284
|
-
await form.$locateAddition("gatherings.1", "panel").locator(".laji-form-clickable-panel-header").click();
|
|
285
|
-
|
|
286
|
-
expect(form.$locate("gatherings.1.units")).toBeVisible();
|
|
287
|
-
});
|
|
288
|
-
|
|
289
|
-
test("items can be deleted", async () => {
|
|
290
|
-
await form.$locateButton("gatherings.1", "delete").click();
|
|
291
|
-
await form.$locateButton("gatherings.1", "delete-confirm-yes").click();
|
|
292
|
-
|
|
293
|
-
await expect(form.$locate("gatherings.1")).not.toBeVisible();
|
|
294
|
-
await expect(form.$locateAddition("gatherings.1", "header")).not.toBeVisible();
|
|
295
|
-
});
|
|
296
|
-
|
|
297
|
-
test.describe("named place button", () => {
|
|
298
|
-
let $addNPButton: Locator;
|
|
299
|
-
let npChooser: NamedPlaceChooserPO;
|
|
300
|
-
let npList: EnumWidgetPO;
|
|
301
|
-
|
|
302
|
-
test.beforeAll(async () => {
|
|
303
|
-
$addNPButton = form.$locateButton("gatherings", "addNamedPlace");
|
|
304
|
-
npChooser = form.getNamedPlaceChooser();
|
|
305
|
-
npList = npChooser.select;
|
|
306
|
-
});
|
|
307
|
-
|
|
308
|
-
test("not displayed before fetched", async () => {
|
|
309
|
-
await expect($addNPButton).not.toBeVisible();
|
|
310
|
-
});
|
|
311
|
-
|
|
312
|
-
test("displayed when fetched", async () => {
|
|
313
|
-
await npMock.resolve(require("./mocks/named-places.json"));
|
|
314
|
-
await expect($addNPButton).toBeVisible();
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
test("click displays list", async () => {
|
|
318
|
-
await $addNPButton.click();
|
|
319
|
-
|
|
320
|
-
await expect(npList.$container).toBeVisible();
|
|
321
|
-
});
|
|
322
|
-
|
|
323
|
-
test("selecting from list displays map popup", async () => {
|
|
324
|
-
await npList.openEnums();
|
|
325
|
-
await npList.$enums.first().click();
|
|
326
|
-
});
|
|
327
|
-
|
|
328
|
-
test("map popup select btn click closes chooser modal", async () => {
|
|
329
|
-
await npChooser.getMapPopup().$useBtn.click();
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
test("np chooser modal closes after np selected or shows alert", async () => {
|
|
333
|
-
await expect(npList.$container).not.toBeVisible();
|
|
334
|
-
});
|
|
335
|
-
|
|
336
|
-
test("new gathering is added", async () => {
|
|
337
|
-
await expect(form.$locate("gatherings.1")).toBeVisible();
|
|
338
|
-
await form.$locateButton("gatherings.1", "delete").click();
|
|
339
|
-
await form.$locateButton("gatherings.1", "delete-confirm-yes").click();
|
|
340
|
-
});
|
|
341
|
-
});
|
|
342
|
-
});
|
|
343
|
-
});
|
|
344
|
-
});
|
|
345
|
-
|
|
346
|
-
test.describe("units", () => {
|
|
347
|
-
|
|
348
|
-
test("is displayed", async () => {
|
|
349
|
-
await expect(form.$locate("gatherings.0.units")).toBeVisible();
|
|
350
|
-
});
|
|
351
|
-
|
|
352
|
-
test("has one by default", async () => {
|
|
353
|
-
await expect(form.$locate("gatherings.0.units.0")).toBeVisible();
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
test("can be added", async () => {
|
|
357
|
-
await form.$locateButton("gatherings.0.units", "add").click();
|
|
358
|
-
|
|
359
|
-
await expect(form.$locate("gatherings.0.units.1")).toBeVisible();
|
|
360
|
-
});
|
|
361
|
-
|
|
362
|
-
test("added is focused", async () => {
|
|
363
|
-
await expect(form.$getInputWidget("gatherings.0.units.1.identifications.0.taxon")).toBeFocused();
|
|
364
|
-
});
|
|
365
|
-
|
|
366
|
-
test("first is shown as table row after activating second", async () => {
|
|
367
|
-
expect(await form.$locate("gatherings.0.units.0").evaluate(e => e.tagName)).toBe("TR");
|
|
368
|
-
});
|
|
369
|
-
|
|
370
|
-
test("activating works for both", async () => {
|
|
371
|
-
await form.$locate("gatherings.0.units.0").click();
|
|
372
|
-
|
|
373
|
-
expect(await form.$locate("gatherings.0.units.0").evaluate(e => e.tagName)).toBe("DIV");
|
|
374
|
-
expect(await form.$locate("gatherings.0.units.1").evaluate(e => e.tagName)).toBe("TR");
|
|
375
|
-
|
|
376
|
-
await form.$locate("gatherings.0.units.1").click();
|
|
377
|
-
|
|
378
|
-
expect(await form.$locate("gatherings.0.units.1").evaluate(e => e.tagName)).toBe("DIV");
|
|
379
|
-
expect(await form.$locate("gatherings.0.units.0").evaluate(e => e.tagName)).toBe("TR");
|
|
380
|
-
});
|
|
381
|
-
|
|
382
|
-
test("can be deleted", async () => {
|
|
383
|
-
await form.removeUnit(0, 1);
|
|
384
|
-
|
|
385
|
-
await expect(form.$locate("gatherings.0.units.1")).not.toBeVisible();
|
|
386
|
-
});
|
|
387
|
-
|
|
388
|
-
test("first is active after deleting second", async () => {
|
|
389
|
-
expect(await form.$locate("gatherings.0.units.0").evaluate(e => e.tagName)).toBe("DIV");
|
|
390
|
-
});
|
|
391
|
-
|
|
392
|
-
test("contains identifications.0.taxon", async () => {
|
|
393
|
-
await expect(form.$locate("gatherings.0.units.0.identifications.0.taxon")).toBeVisible();
|
|
394
|
-
});
|
|
395
|
-
|
|
396
|
-
test("contains count which is editable", async () => {
|
|
397
|
-
await testWidget("gatherings.0.units.0.count");
|
|
398
|
-
});
|
|
399
|
-
|
|
400
|
-
test("contains notes which is editable", async () => {
|
|
401
|
-
await testWidget("gatherings.0.units.0.notes");
|
|
402
|
-
});
|
|
403
|
-
|
|
404
|
-
test("contains taxonConfidence which is editable", async () => {
|
|
405
|
-
await testWidget("gatherings.0.units.0.taxonConfidence", "enum");
|
|
406
|
-
});
|
|
407
|
-
|
|
408
|
-
test("contains recordBasis which is editable", async () => {
|
|
409
|
-
await testWidget("gatherings.0.units.0.recordBasis", "enum");
|
|
410
|
-
});
|
|
411
|
-
|
|
412
|
-
test("contains images", async () => {
|
|
413
|
-
await expect(form.$locate("gatherings.0.units.0.images")).toBeVisible();
|
|
414
|
-
});
|
|
415
|
-
|
|
416
|
-
test("can open additionals chooser", async () => {
|
|
417
|
-
const scopeField = form.getScopeField("gatherings.0.units.0");
|
|
418
|
-
await expect(scopeField.$button).toBeVisible();
|
|
419
|
-
const informalGroups = [1, 343, 232, 187];
|
|
420
|
-
let mocks: Mock[] = [];
|
|
421
|
-
for (let id of informalGroups) {
|
|
422
|
-
mocks.push(await form.setMockResponse(`/informal-taxon-groups/MVL.${id}`));
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
await scopeField.$button.click();
|
|
426
|
-
|
|
427
|
-
await expect(scopeField.modal.$container).toBeVisible();
|
|
428
|
-
|
|
429
|
-
await expect(scopeField.modal.$loadingGroup.nth(1)).toBeVisible();
|
|
430
|
-
|
|
431
|
-
for (let idx in informalGroups) {
|
|
432
|
-
await mocks[idx].resolve({
|
|
433
|
-
"id": informalGroups[idx],
|
|
434
|
-
"name": "test"
|
|
435
|
-
});
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
await expect(scopeField.modal.$loadingGroup).toHaveCount(0);
|
|
439
|
-
await expect(scopeField.modal.$groupTitles.first()).toHaveText("test");
|
|
440
|
-
});
|
|
441
|
-
|
|
442
|
-
test("can add additional fields", async () => {
|
|
443
|
-
const scopeField = form.getScopeField("gatherings.0.units.0");
|
|
444
|
-
|
|
445
|
-
await expect(form.$locate("gatherings.0.units.0.identifications.0.det")).not.toBeVisible();
|
|
446
|
-
|
|
447
|
-
await expect(scopeField.$button).toBeVisible();
|
|
448
|
-
|
|
449
|
-
const getFieldCount = () => form.$locate("gatherings.0.units.0").locator("input").count();
|
|
450
|
-
const fieldCount = await getFieldCount();
|
|
451
|
-
|
|
452
|
-
const $additionalItem = scopeField.$listItems.first();
|
|
453
|
-
|
|
454
|
-
await expect(scopeField.modal.$container).toBeVisible();
|
|
455
|
-
await expect($additionalItem).toBeVisible();
|
|
456
|
-
|
|
457
|
-
await $additionalItem.click();
|
|
458
|
-
await scopeField.modal.$close.click();
|
|
459
|
-
|
|
460
|
-
await expect($additionalItem).not.toBeVisible();
|
|
461
|
-
expect(await getFieldCount()).toBe(fieldCount + 1);
|
|
462
|
-
});
|
|
463
|
-
|
|
464
|
-
const getLocationChooserFor = (gatheringIdx: number, unitIdx: number) => form.getLocationChooser(`gatherings.${gatheringIdx}.units.${unitIdx}`);
|
|
465
|
-
// const $getLocationModal = () => page.locator(".map-dialog");
|
|
466
|
-
// const $getLocationModalMap = () => $getLocationModal().locator(".laji-map");
|
|
467
|
-
|
|
468
|
-
test("has location button", async () => {
|
|
469
|
-
await expect(getLocationChooserFor(0, 0).$button).toBeVisible();
|
|
470
|
-
});
|
|
471
|
-
|
|
472
|
-
async function clickLocationButtonAndAddLocation(gatheringIdx: number, unitIdx: number) {
|
|
473
|
-
const locationChooser = getLocationChooserFor(gatheringIdx, unitIdx);
|
|
474
|
-
await locationChooser.$button.click();
|
|
475
|
-
|
|
476
|
-
// await browser.wtest(protractor.ExpectedConditions.visibilityOf($locationModal), 5000, "Map modal waiting timeout");
|
|
477
|
-
|
|
478
|
-
await expect(locationChooser.modal.$container).toBeVisible();
|
|
479
|
-
|
|
480
|
-
await locationChooser.modal.map.clickAt(0, 0);
|
|
481
|
-
// const pos = await $getLocationModalMap().boundingBox();
|
|
482
|
-
// page.mouse.move(pos.x, pos.y)
|
|
483
|
-
// page.mouse.click(pos.x, pos.y)
|
|
484
|
-
// await browser.actions()
|
|
485
|
-
// .mouseMove($getLocationModalMap().getWebElement(), {x: 100, y: 100}).perform();
|
|
486
|
-
// await browser.actions().click().perform();
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
test("can add location", async () => {
|
|
490
|
-
await clickLocationButtonAndAddLocation(0, 0);
|
|
491
|
-
|
|
492
|
-
await expect($gatheringsMap.locator(".vector-marker.leaflet-interactive")).toHaveCount(2);
|
|
493
|
-
});
|
|
494
|
-
|
|
495
|
-
test("unit map modal hides after adding location", async () => {
|
|
496
|
-
const locationChooser = getLocationChooserFor(0, 0);
|
|
497
|
-
await expect(locationChooser.modal.$container).not.toBeVisible();
|
|
498
|
-
});
|
|
499
|
-
|
|
500
|
-
test("gatherings map shows unit with different color", async () => {
|
|
501
|
-
await expect($$gatheringMarkerPaths).toHaveCount(2);
|
|
502
|
-
const firstFill = await $$gatheringMarkerPaths.first().getAttribute("fill");
|
|
503
|
-
const secondFill = await $$gatheringMarkerPaths.last().getAttribute("fill");
|
|
504
|
-
|
|
505
|
-
expect(firstFill).not.toBe(secondFill);
|
|
506
|
-
});
|
|
507
|
-
|
|
508
|
-
test("hovering unit table row changes gathering map unit color", async () => {
|
|
509
|
-
await form.$locateButton("gatherings.0.unit", "add").click();
|
|
510
|
-
|
|
511
|
-
const unitFill = await $$gatheringMarkerPaths.last().getAttribute("style");
|
|
512
|
-
|
|
513
|
-
form.$locate("gatherings.0.units.0").hover();
|
|
514
|
-
// debugger;
|
|
515
|
-
// await browser.actions()
|
|
516
|
-
// .mouseMove(form.$locate("gatherings.0.units.0").getWebElement())
|
|
517
|
-
// .perform();
|
|
518
|
-
// debugger;
|
|
519
|
-
|
|
520
|
-
const unitFillAfterLocationHover = await $$gatheringMarkerPaths.last().getAttribute("style");
|
|
521
|
-
|
|
522
|
-
expect(unitFill).not.toBe(unitFillAfterLocationHover);
|
|
523
|
-
|
|
524
|
-
await form.removeUnit(0, 1);
|
|
525
|
-
});
|
|
526
|
-
|
|
527
|
-
// const $locationPeeker = $("#root_gatherings_0_units_0-location-peeker");
|
|
528
|
-
|
|
529
|
-
test("hovering location button displays location peeking map", async () => {
|
|
530
|
-
await getLocationChooserFor(0, 0).$button.hover();
|
|
531
|
-
|
|
532
|
-
await expect(getLocationChooserFor(0, 0).peeker.$map).toBeVisible();
|
|
533
|
-
});
|
|
534
|
-
|
|
535
|
-
test("location peeker shows data", async () => {
|
|
536
|
-
const locationChooser = getLocationChooserFor(0, 0);
|
|
537
|
-
await locationChooser.$button.hover();
|
|
538
|
-
|
|
539
|
-
// await browser.wtest(protractor.ExpectedConditions.visibilityOf($locationPeeker.locator(".leaflet-container")), 5000, "Map peeker waiting timeout");
|
|
540
|
-
|
|
541
|
-
// const $$peekerPaths = $$("#root_gatherings_0_units_0-location-peeker .vector-marker path");
|
|
542
|
-
|
|
543
|
-
await expect(locationChooser.peeker.$markers).not.toHaveCount(0);
|
|
544
|
-
|
|
545
|
-
const firstFill = await locationChooser.peeker.$markers.first().getAttribute("fill");
|
|
546
|
-
const secondFill = await locationChooser.peeker.$markers.last().getAttribute("fill");
|
|
547
|
-
|
|
548
|
-
expect(firstFill).not.toBe(secondFill);
|
|
549
|
-
});
|
|
550
|
-
|
|
551
|
-
test("can have location even if gathering doesn't have", async () => {
|
|
552
|
-
await $gatheringAdd.click();
|
|
553
|
-
await clickLocationButtonAndAddLocation(1, 0);
|
|
554
|
-
|
|
555
|
-
await expect($$gatheringMarkerPaths).toHaveCount(1);
|
|
556
|
-
|
|
557
|
-
await form.$locateButton("gatherings.1", "delete").click();
|
|
558
|
-
await form.$locateButton("gatherings.1", "delete-confirm-yes").click();
|
|
559
|
-
});
|
|
560
|
-
|
|
561
|
-
test("choosing informal taxon group changes fields", async () => {
|
|
562
|
-
await page.locator(".informal-taxon-group-chooser").click();
|
|
563
|
-
|
|
564
|
-
await expect(form.$locate("gatherings.0.units.0.twitched")).not.toBeVisible();
|
|
565
|
-
const $birdButton = page.locator(".MVL\.1").locator("xpath=..").locator("button").last();
|
|
566
|
-
|
|
567
|
-
await $birdButton.click();
|
|
568
|
-
await expect(form.$locate("gatherings.0.units.0.twitched")).toBeVisible();
|
|
569
|
-
});
|
|
570
|
-
|
|
571
|
-
test("adding image in background", async () => {
|
|
572
|
-
await form.$locateButton("gatherings.0.unit", "add").click();
|
|
573
|
-
const {resolve, remove} = await form.mockImageUpload("gatherings.0.units.1");
|
|
574
|
-
await form.$locate("gatherings.0.units.0").locator("td").first().click();
|
|
575
|
-
await resolve();
|
|
576
|
-
await form.$locate("gatherings.0.units.1").locator("td").first().click();
|
|
577
|
-
|
|
578
|
-
await expect(form.getImageArrayField("gatherings.0.units.1").$imgs).toHaveCount(1);
|
|
579
|
-
await remove();
|
|
580
|
-
await form.removeUnit(0, 1);
|
|
581
|
-
});
|
|
582
|
-
|
|
583
|
-
test("removing unit with image loading", async () => {
|
|
584
|
-
await form.$locateButton("gatherings.0.unit", "add").click();
|
|
585
|
-
const {resolve, remove} = await form.mockImageUpload("gatherings.0.units.1");
|
|
586
|
-
await form.$locate("gatherings.0.units.0").locator("td").first().click();
|
|
587
|
-
await form.removeUnit(0, 1);
|
|
588
|
-
await resolve();
|
|
589
|
-
await remove();
|
|
590
|
-
|
|
591
|
-
await expect(form.getFailedJobs().$container).not.toBeVisible();
|
|
592
|
-
});
|
|
593
|
-
});
|
|
594
|
-
});
|
|
File without changes
|