@esri/solutions-components 0.5.3 → 0.5.4

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 (116) hide show
  1. package/dist/cjs/calcite-input-text_5.cjs.entry.js +36 -36
  2. package/dist/cjs/calcite-shell-panel_14.cjs.entry.js +1 -1
  3. package/dist/cjs/solution-configuration.cjs.entry.js +1 -1
  4. package/dist/cjs/solution-contents_3.cjs.entry.js +1 -1
  5. package/dist/cjs/{solution-store-70002b57.js → solution-store-ca4639d5.js} +3 -3
  6. package/dist/collection/components/add-record-modal/test/add-record-modal.e2e.js +24 -0
  7. package/dist/collection/components/add-record-modal/test/add-record-modal.spec.js +32 -0
  8. package/dist/collection/components/buffer-tools/test/buffer-tools.e2e.js +24 -0
  9. package/dist/collection/components/buffer-tools/test/buffer-tools.spec.js +157 -0
  10. package/dist/collection/components/card-manager/test/card-manager.e2e.js +24 -0
  11. package/dist/collection/components/card-manager/test/card-manager.spec.js +32 -0
  12. package/dist/collection/components/comment-card/test/comment-card.e2e.js +24 -0
  13. package/dist/collection/components/comment-card/test/comment-card.spec.js +32 -0
  14. package/dist/collection/components/crowdsource-manager/test/crowdsource-manager.e2e.js +24 -0
  15. package/dist/collection/components/crowdsource-manager/test/crowdsource-manager.spec.js +32 -0
  16. package/dist/collection/components/crowdsource-reporter/test/crowdsource-reporter.e2e.js +24 -0
  17. package/dist/collection/components/crowdsource-reporter/test/crowdsource-reporter.spec.js +32 -0
  18. package/dist/collection/components/deduct-calculator/test/deduct-calculator.e2e.js +24 -0
  19. package/dist/collection/components/deduct-calculator/test/deduct-calculator.spec.js +32 -0
  20. package/dist/collection/components/edit-record-modal/test/edit-record-modal.e2e.js +24 -0
  21. package/dist/collection/components/edit-record-modal/test/edit-record-modal.spec.js +32 -0
  22. package/dist/collection/components/info-card/test/info-card.e2e.js +24 -0
  23. package/dist/collection/components/info-card/test/info-card.spec.js +32 -0
  24. package/dist/collection/components/json-editor/test/json-editor.e2e.js +31 -0
  25. package/dist/collection/components/json-editor/test/json-editor.spec.js +60 -0
  26. package/dist/collection/components/layer-table/test/layer-table.e2e.js +24 -0
  27. package/dist/collection/components/layer-table/test/layer-table.spec.js +32 -0
  28. package/dist/collection/components/list-item/test/list-item.e2e.js +24 -0
  29. package/dist/collection/components/list-item/test/list-item.spec.js +32 -0
  30. package/dist/collection/components/map-card/test/map-card.e2e.js +24 -0
  31. package/dist/collection/components/map-card/test/map-card.spec.js +32 -0
  32. package/dist/collection/components/map-draw-tools/test/map-draw-tools.e2e.js +24 -0
  33. package/dist/collection/components/map-draw-tools/test/map-draw-tools.spec.js +32 -0
  34. package/dist/collection/components/map-layer-picker/test/map-layer-picker.e2e.js +24 -0
  35. package/dist/collection/components/map-layer-picker/test/map-layer-picker.spec.js +109 -0
  36. package/dist/collection/components/map-search/test/map-search.e2e.js +24 -0
  37. package/dist/collection/components/map-search/test/map-search.spec.js +53 -0
  38. package/dist/collection/components/map-select-tools/map-select-tools.js +36 -36
  39. package/dist/collection/components/map-select-tools/test/map-select-tools.e2e.js +24 -0
  40. package/dist/collection/components/map-select-tools/test/map-select-tools.spec.js +349 -0
  41. package/dist/collection/components/media-card/test/media-card.e2e.js +24 -0
  42. package/dist/collection/components/media-card/test/media-card.spec.js +32 -0
  43. package/dist/collection/components/pci-calculator/test/pci-calculator.e2e.js +24 -0
  44. package/dist/collection/components/pci-calculator/test/pci-calculator.spec.js +32 -0
  45. package/dist/collection/components/pdf-download/test/pdf-download.e2e.js +71 -0
  46. package/dist/collection/components/pdf-download/test/pdf-download.spec.js +104 -0
  47. package/dist/collection/components/public-notification/test/public-notification.e2e.js +95 -0
  48. package/dist/collection/components/public-notification/test/public-notification.spec.js +149 -0
  49. package/dist/collection/components/refine-selection/refine-selection.css +85 -85
  50. package/dist/collection/components/solution-configuration/test/solution-configuration.e2e.js +31 -0
  51. package/dist/collection/components/solution-configuration/test/solution-configuration.spec.js +114 -0
  52. package/dist/collection/components/solution-contents/test/solution-contents.e2e.js +89 -0
  53. package/dist/collection/components/solution-contents/test/solution-contents.spec.js +138 -0
  54. package/dist/collection/components/solution-item/test/solution-item.e2e.js +31 -0
  55. package/dist/collection/components/solution-item/test/solution-item.spec.js +72 -0
  56. package/dist/collection/components/solution-item-details/test/solution-item-details.e2e.js +31 -0
  57. package/dist/collection/components/solution-item-details/test/solution-item-details.spec.js +137 -0
  58. package/dist/collection/components/solution-item-icon/test/solution-item-icon.e2e.js +24 -0
  59. package/dist/collection/components/solution-item-icon/test/solution-item-icon.spec.js +34 -0
  60. package/dist/collection/components/solution-item-sharing/test/solution-item-sharing.e2e.js +31 -0
  61. package/dist/collection/components/solution-item-sharing/test/solution-item-sharing.spec.js +49 -0
  62. package/dist/collection/components/solution-organization-variables/test/solution-organization-variables.e2e.js +31 -0
  63. package/dist/collection/components/solution-organization-variables/test/solution-organization-variables.spec.js +60 -0
  64. package/dist/collection/components/solution-resource-item/test/solution-resource-item.e2e.js +31 -0
  65. package/dist/collection/components/solution-resource-item/test/solution-resource-item.spec.js +50 -0
  66. package/dist/collection/components/solution-spatial-ref/test/solution-spatial-ref.e2e.js +31 -0
  67. package/dist/collection/components/solution-spatial-ref/test/solution-spatial-ref.spec.js +170 -0
  68. package/dist/collection/components/solution-template-data/test/solution-template-data.e2e.js +31 -0
  69. package/dist/collection/components/solution-template-data/test/solution-template-data.spec.js +55 -0
  70. package/dist/collection/components/solution-variables/test/solution-variables.e2e.js +31 -0
  71. package/dist/collection/components/solution-variables/test/solution-variables.spec.js +126 -0
  72. package/dist/collection/utils/publicNotificationUtils.js +45 -0
  73. package/dist/collection/utils/templates.e2e.js +25 -0
  74. package/dist/collection/utils/test/csvUtils.spec.js +46 -0
  75. package/dist/collection/utils/test/downloadUtils.spec.js +102 -0
  76. package/dist/collection/utils/test/pciUtils.spec.js +297 -0
  77. package/dist/collection/utils/test/solution-store.spec.js +439 -0
  78. package/dist/components/map-select-tools2.js +36 -36
  79. package/dist/components/solution-store.js +3 -3
  80. package/dist/esm/calcite-input-text_5.entry.js +36 -36
  81. package/dist/esm/calcite-shell-panel_14.entry.js +1 -1
  82. package/dist/esm/solution-configuration.entry.js +1 -1
  83. package/dist/esm/solution-contents_3.entry.js +1 -1
  84. package/dist/esm/{solution-store-5d068b07.js → solution-store-70f874f8.js} +3 -3
  85. package/dist/solutions-components/{p-41802f6b.entry.js → p-16dfb254.entry.js} +1 -1
  86. package/dist/solutions-components/{p-4769a2a5.entry.js → p-5ed755a2.entry.js} +1 -1
  87. package/dist/solutions-components/{p-826a814d.js → p-78719506.js} +2 -2
  88. package/dist/solutions-components/{p-9f620303.entry.js → p-b4b19fd3.entry.js} +1 -1
  89. package/dist/solutions-components/{p-24fe6e1c.entry.js → p-d5d5942d.entry.js} +1 -1
  90. package/dist/solutions-components/solutions-components.esm.js +1 -1
  91. package/dist/solutions-components/utils/common.js +291 -0
  92. package/dist/solutions-components/utils/csvDownload.js +36 -0
  93. package/dist/solutions-components/utils/csvUtils.js +32 -0
  94. package/dist/solutions-components/utils/downloadUtils.js +386 -0
  95. package/dist/solutions-components/utils/interfaces.js +56 -0
  96. package/dist/solutions-components/utils/languageUtil.js +85 -0
  97. package/dist/solutions-components/utils/loadModules.js +20 -0
  98. package/dist/solutions-components/utils/locale.js +56 -0
  99. package/dist/solutions-components/utils/mapViewUtils.js +140 -0
  100. package/dist/solutions-components/utils/pciUtils.js +837 -0
  101. package/dist/solutions-components/utils/pdfUtils.js +62 -0
  102. package/dist/solutions-components/utils/publicNotificationStore.js +38 -0
  103. package/dist/solutions-components/utils/publicNotificationUtils.js +45 -0
  104. package/dist/solutions-components/utils/queryUtils.js +148 -0
  105. package/dist/solutions-components/utils/solution-store.js +579 -0
  106. package/dist/solutions-components/utils/templates.e2e.js +25 -0
  107. package/dist/solutions-components/utils/templates.js +341 -0
  108. package/dist/solutions-components/utils/test/csvUtils.spec.js +46 -0
  109. package/dist/solutions-components/utils/test/downloadUtils.spec.js +102 -0
  110. package/dist/solutions-components/utils/test/mocks/jsApi.js +74 -0
  111. package/dist/solutions-components/utils/test/pciUtils.spec.js +297 -0
  112. package/dist/solutions-components/utils/test/solution-store.spec.js +439 -0
  113. package/dist/solutions-components/utils/test/testUtils.js +135 -0
  114. package/dist/solutions-components/utils/types.js +14 -0
  115. package/dist/solutions-components_commit.txt +7 -0
  116. package/package.json +7 -7
@@ -0,0 +1,126 @@
1
+ /** @license
2
+ * Copyright 2022 Esri
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { newSpecPage } from '@stencil/core/testing';
17
+ import { SolutionVariables } from '../solution-variables';
18
+ import { value } from '../../../demos/data/solution-variables-data.json';
19
+ import { h } from '@stencil/core';
20
+ xdescribe('solution-variables', () => {
21
+ it('renders', async () => {
22
+ const page = await newSpecPage({
23
+ components: [SolutionVariables],
24
+ template: () => (h("solution-variables", { value: JSON.stringify(value) }))
25
+ });
26
+ expect(page.root).toEqualHtml(`
27
+ <solution-variables>
28
+ <mock:shadow-root>
29
+ <div>
30
+ <h4 class="org-var-header">
31
+ Solution Variables
32
+ </h4>
33
+ </div>
34
+ <div class="container-border">
35
+ <calcite-label id="variable-label">
36
+ <calcite-tree-item>
37
+ <solution-item-icon></solution-item-icon>
38
+ <span class="icon-text" title="Dashboard 1">
39
+ Dashboard 1
40
+ </span>
41
+ <calcite-tree slot="children">
42
+ <calcite-tree-item>
43
+ Item Id
44
+ </calcite-tree-item>
45
+ <calcite-tree-item>
46
+ Url
47
+ </calcite-tree-item>
48
+ </calcite-tree>
49
+ </calcite-tree-item>
50
+ <calcite-tree-item>
51
+ <solution-item-icon></solution-item-icon>
52
+ <span class="icon-text" title="Dashboard 2">
53
+ Dashboard 2
54
+ </span>
55
+ <calcite-tree slot="children">
56
+ <calcite-tree-item>
57
+ Item Id
58
+ </calcite-tree-item>
59
+ <calcite-tree-item>
60
+ Url
61
+ </calcite-tree-item>
62
+ </calcite-tree>
63
+ </calcite-tree-item>
64
+ <calcite-tree-item>
65
+ <solution-item-icon></solution-item-icon>
66
+ <span class="icon-text" title="Feature Service 1">
67
+ Feature Service 1
68
+ </span>
69
+ <calcite-tree slot="children">
70
+ <calcite-tree-item>
71
+ Item Id
72
+ </calcite-tree-item>
73
+ <calcite-tree-item>
74
+ Url
75
+ </calcite-tree-item>
76
+ <calcite-tree-item>
77
+ Name
78
+ </calcite-tree-item>
79
+ <calcite-tree-item>
80
+ <solution-item-icon></solution-item-icon>
81
+ <span class="icon-text" title="Layer 0">
82
+ Layer 0
83
+ </span>
84
+ <calcite-tree slot="children">
85
+ <calcite-tree-item>
86
+ Id
87
+ </calcite-tree-item>
88
+ <calcite-tree-item>
89
+ Url
90
+ </calcite-tree-item>
91
+ </calcite-tree>
92
+ </calcite-tree-item>
93
+ <calcite-tree-item>
94
+ <solution-item-icon></solution-item-icon>
95
+ <span class="icon-text" title="Layer 1">
96
+ Layer 1
97
+ </span>
98
+ <calcite-tree slot="children">
99
+ <calcite-tree-item>
100
+ Id
101
+ </calcite-tree-item>
102
+ <calcite-tree-item>
103
+ Url
104
+ </calcite-tree-item>
105
+ </calcite-tree>
106
+ </calcite-tree-item>
107
+ </calcite-tree>
108
+ </calcite-tree-item>
109
+ <calcite-tree-item>
110
+ <solution-item-icon></solution-item-icon>
111
+ <span class="icon-text" title="Group 1">
112
+ Group 1
113
+ </span>
114
+ <calcite-tree slot="children">
115
+ <calcite-tree-item>
116
+ Group Id
117
+ </calcite-tree-item>
118
+ </calcite-tree>
119
+ </calcite-tree-item>
120
+ </calcite-label>
121
+ </div>
122
+ </mock:shadow-root>
123
+ </solution-variables>
124
+ `);
125
+ });
126
+ });
@@ -0,0 +1,45 @@
1
+ /** @license
2
+ * Copyright 2022 Esri
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ export function getSelectionIds(selectionSets) {
17
+ return Object.keys(selectionSets).reduce((prev, cur) => {
18
+ return [
19
+ ...prev,
20
+ ...selectionSets[cur].download ? selectionSets[cur].selectedIds : []
21
+ ];
22
+ }, []);
23
+ }
24
+ export function getSelectionIdsAndViews(selectionSets) {
25
+ return selectionSets.reduce((prev, cur) => {
26
+ if (Object.keys(prev).indexOf(cur.layerView.layer.id) > -1) {
27
+ prev[cur.layerView.layer.id].ids = [
28
+ ...prev[cur.layerView.layer.id].ids,
29
+ ...cur.selectedIds
30
+ ];
31
+ prev[cur.layerView.layer.id].selectionSetNames.push(cur.label);
32
+ }
33
+ else {
34
+ prev[cur.layerView.layer.id] = {
35
+ ids: cur.selectedIds,
36
+ layerView: cur.layerView,
37
+ selectionSetNames: [cur.label]
38
+ };
39
+ }
40
+ return prev;
41
+ }, {});
42
+ }
43
+ export function getTotal(selectionSets) {
44
+ return [...new Set(getSelectionIds(selectionSets))].length;
45
+ }
@@ -0,0 +1,25 @@
1
+ /** @license
2
+ * Copyright 2022 Esri
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { getInventoryItems } from "./templates";
17
+ import * as electionOutreach from '../demos/data/election-outreach.json';
18
+ describe("getInventoryItems", () => {
19
+ it("can get inventory items", () => {
20
+ const templates = electionOutreach.templates;
21
+ expect(templates.length).toEqual(11);
22
+ const actual = getInventoryItems(templates);
23
+ expect(actual.length).toEqual(5);
24
+ });
25
+ });
@@ -0,0 +1,46 @@
1
+ /** @license
2
+ * Copyright 2023 Esri
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import * as csvDownload from "../csvDownload";
17
+ import * as csvUtils from "../csvUtils";
18
+ import { expect, jest } from "@jest/globals";
19
+ afterEach(() => {
20
+ jest.restoreAllMocks();
21
+ });
22
+ describe("csvUtils", () => {
23
+ describe("exportCSV", () => {
24
+ it("prepares output lines 1", () => {
25
+ const title = "title";
26
+ const labels = [
27
+ ["Cyd Charise", "1922 Main St", "Amarillo, TX 79118"],
28
+ ["Fred Astaire", "1899 Main St", "Omaha, NE 68022"],
29
+ ["Gene Kelly", "1912 Main St", "Pittsburgh, PA 15215"],
30
+ ["Ginger Rogers", "1911 Main St", "Independence, MO 64050"]
31
+ ];
32
+ const expectedOutputLines = [
33
+ "\"Cyd Charise\",\"1922 Main St\",\"Amarillo, TX 79118\"\r\n",
34
+ "\"Fred Astaire\",\"1899 Main St\",\"Omaha, NE 68022\"\r\n",
35
+ "\"Gene Kelly\",\"1912 Main St\",\"Pittsburgh, PA 15215\"\r\n",
36
+ "\"Ginger Rogers\",\"1911 Main St\",\"Independence, MO 64050\"\r\n"
37
+ ];
38
+ const downloadCSVFileMock = jest.spyOn(csvDownload, "downloadCSVFile")
39
+ .mockImplementation((fileTitle, outputLines) => { });
40
+ csvUtils.exportCSV(title, labels);
41
+ expect(downloadCSVFileMock).toBeCalledTimes(1);
42
+ expect(downloadCSVFileMock.mock.calls[0][0]).toEqual(title);
43
+ expect(downloadCSVFileMock.mock.calls[0][1]).toEqual(expectedOutputLines);
44
+ });
45
+ });
46
+ });
@@ -0,0 +1,102 @@
1
+ /** @license
2
+ * Copyright 2023 Esri
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import * as downloadUtils from "../downloadUtils";
17
+ describe("downloadUtils", () => {
18
+ describe("_convertPopupFieldsToLabelSpec", () => {
19
+ it("handles fieldname visibility", () => {
20
+ const fieldInfos = [
21
+ { fieldName: "A", visible: true },
22
+ { fieldName: "B", visible: true },
23
+ { fieldName: "C", visible: false },
24
+ { fieldName: "D", visible: true }
25
+ ];
26
+ const bypassFieldVisiblity = false;
27
+ const expectedLabelSpec = "{A}|{B}|{D}";
28
+ const labelSpec = downloadUtils._convertPopupFieldsToLabelSpec(fieldInfos, bypassFieldVisiblity);
29
+ expect(labelSpec).toEqual(expectedLabelSpec);
30
+ });
31
+ it("handles fieldname ignoring visibility", () => {
32
+ const fieldInfos = [
33
+ { fieldName: "A", visible: true },
34
+ { fieldName: "B", visible: true },
35
+ { fieldName: "C", visible: false },
36
+ { fieldName: "D", visible: true }
37
+ ];
38
+ const bypassFieldVisiblity = true;
39
+ const expectedLabelSpec = "{A}|{B}|{C}|{D}";
40
+ const labelSpec = downloadUtils._convertPopupFieldsToLabelSpec(fieldInfos, bypassFieldVisiblity);
41
+ expect(labelSpec).toEqual(expectedLabelSpec);
42
+ });
43
+ });
44
+ describe("_convertPopupTextToLabelSpec", () => {
45
+ it("handles <br> variants", () => {
46
+ const popupInfo = "<div style='text-align: left;'>{NAME}<br />{STREET}<br/>{CITY}, {STATE} {ZIP} <br></div>";
47
+ const expectedLabelSpec = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
48
+ const labelSpec = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
49
+ expect(labelSpec).toEqual(expectedLabelSpec);
50
+ });
51
+ it("handles <p>", () => {
52
+ const popupInfo = "<p>{NAME}</p><p>{STREET}</p><p>{CITY}, {STATE} {ZIP}</p>";
53
+ const expectedLabelSpec = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
54
+ const labelSpec = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
55
+ expect(labelSpec).toEqual(expectedLabelSpec);
56
+ });
57
+ it("handles popup's use of \xA0", () => {
58
+ const popupInfo = "<div style='text-align: left;'>{NAME}<br />{STREET}<br />{CITY},\xA0{STATE}\xA0{ZIP}\xA0<br /></div>";
59
+ const expectedLabelSpec = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
60
+ const labelSpec = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
61
+ expect(labelSpec).toEqual(expectedLabelSpec);
62
+ });
63
+ it("removes newlines and blank lines, and trims each line", () => {
64
+ const popupInfo = " \n\n {NAME} \n \n\n {STREET}\n{CITY}, {STATE} {ZIP}\n\n \n ";
65
+ const expectedLabelSpec = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
66
+ const labelSpec = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
67
+ expect(labelSpec).toEqual(expectedLabelSpec);
68
+ });
69
+ it("removes extra HTML", () => {
70
+ const popupInfo = "\n<div style='text-align: left;'><span style='font-weight:bold'>{NAME}</span><br />{STREET}<br />{CITY},\xA0{STATE}\xA0{ZIP}\xA0<br /></div>\n";
71
+ const expectedLabelSpec = "{NAME}|{STREET}|{CITY}, {STATE} {ZIP}";
72
+ const labelSpec = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
73
+ expect(labelSpec).toEqual(expectedLabelSpec);
74
+ });
75
+ it("handles some special characters", () => {
76
+ const popupInfo = "<div style='text-align: left;'>&lt;{NAME}&gt;<br />{STREET}<br/>{CITY},&nbsp;{STATE}&nbsp;{ZIP}<br></div>";
77
+ const expectedLabelSpec = "<{NAME}>|{STREET}|{CITY}, {STATE} {ZIP}";
78
+ const labelSpec = downloadUtils._convertPopupTextToLabelSpec(popupInfo);
79
+ expect(labelSpec).toEqual(expectedLabelSpec);
80
+ });
81
+ });
82
+ describe("_createTitle", () => {
83
+ it("handles no selection set names", () => {
84
+ const selectionSetNames = [];
85
+ const expectedTitle = "download";
86
+ const title = downloadUtils._createTitle(selectionSetNames);
87
+ expect(title).toEqual(expectedTitle);
88
+ });
89
+ it("handles one selection set name", () => {
90
+ const selectionSetNames = ["fred"];
91
+ const expectedTitle = "fred";
92
+ const title = downloadUtils._createTitle(selectionSetNames);
93
+ expect(title).toEqual(expectedTitle);
94
+ });
95
+ it("handles two selection set names", () => {
96
+ const selectionSetNames = ["fred", "ginger"];
97
+ const expectedTitle = "fred,ginger";
98
+ const title = downloadUtils._createTitle(selectionSetNames);
99
+ expect(title).toEqual(expectedTitle);
100
+ });
101
+ });
102
+ });
@@ -0,0 +1,297 @@
1
+ /** @license
2
+ * Copyright 2022 Esri
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import * as pciUtils from "../pciUtils";
17
+ jest.setTimeout(30000);
18
+ afterEach(() => {
19
+ jest.restoreAllMocks();
20
+ });
21
+ describe("pciUtils", () => {
22
+ it("calculateDeductValue", () => {
23
+ const logMock = jest.spyOn(console, "log").mockImplementation(() => { });
24
+ // 1
25
+ let type = "1";
26
+ let actual = pciUtils.calculateDeductValue(type, "L", "0.52", true);
27
+ let expected = "1|L|7.4|0.52";
28
+ expect(actual).toEqual(expected);
29
+ expect(logMock).toBeCalledTimes(3);
30
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
31
+ expected = "1|M|16|0.52";
32
+ expect(actual).toEqual(expected);
33
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
34
+ expected = "1|H|23.3|0.52";
35
+ expect(actual).toEqual(expected);
36
+ // 2
37
+ type = "2";
38
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
39
+ expected = "2|L|0|0.52";
40
+ expect(actual).toEqual(expected);
41
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
42
+ expected = "2|M|1.1|0.52";
43
+ expect(actual).toEqual(expected);
44
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
45
+ expected = "2|H|3.9|0.52";
46
+ expect(actual).toEqual(expected);
47
+ // 3
48
+ type = "3";
49
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
50
+ expected = "3|L|-0.2|0.52";
51
+ expect(actual).toEqual(expected);
52
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
53
+ expected = "3|M|0.5|0.52";
54
+ expect(actual).toEqual(expected);
55
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
56
+ expected = "3|H|5.2|0.52";
57
+ expect(actual).toEqual(expected);
58
+ // 4
59
+ type = "4";
60
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
61
+ expected = "4|L|5.3|0.52";
62
+ expect(actual).toEqual(expected);
63
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
64
+ expected = "4|M|17.9|0.52";
65
+ expect(actual).toEqual(expected);
66
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
67
+ expected = "4|H|42.7|0.52";
68
+ expect(actual).toEqual(expected);
69
+ // 5
70
+ type = "5";
71
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
72
+ expected = "5|L|1.1|0.52";
73
+ expect(actual).toEqual(expected);
74
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
75
+ expected = "5|M|10.7|0.52";
76
+ expect(actual).toEqual(expected);
77
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
78
+ expected = "5|H|28.1|0.52";
79
+ expect(actual).toEqual(expected);
80
+ // 6
81
+ type = "6";
82
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
83
+ expected = "6|L|5.2|0.52";
84
+ expect(actual).toEqual(expected);
85
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
86
+ expected = "6|M|8.1|0.52";
87
+ expect(actual).toEqual(expected);
88
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
89
+ expected = "6|H|16.5|0.52";
90
+ expect(actual).toEqual(expected);
91
+ // 7
92
+ type = "7";
93
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
94
+ expected = "7|L|2|0.52";
95
+ expect(actual).toEqual(expected);
96
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
97
+ expected = "7|M|6.7|0.52";
98
+ expect(actual).toEqual(expected);
99
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
100
+ expected = "7|H|11.9|0.52";
101
+ expect(actual).toEqual(expected);
102
+ // 8
103
+ type = "8";
104
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
105
+ expected = "8|L|0.8|0.52";
106
+ expect(actual).toEqual(expected);
107
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
108
+ expected = "8|M|7.1|0.52";
109
+ expect(actual).toEqual(expected);
110
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
111
+ expected = "8|H|11.5|0.52";
112
+ expect(actual).toEqual(expected);
113
+ // 9
114
+ type = "9";
115
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
116
+ expected = "9|L|2|0.52";
117
+ expect(actual).toEqual(expected);
118
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
119
+ expected = "9|M|4|0.52";
120
+ expect(actual).toEqual(expected);
121
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
122
+ expected = "9|H|6|0.52";
123
+ expect(actual).toEqual(expected);
124
+ // 10
125
+ type = "10";
126
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
127
+ expected = "10|L|0.5|0.52";
128
+ expect(actual).toEqual(expected);
129
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
130
+ expected = "10|M|5.7|0.52";
131
+ expect(actual).toEqual(expected);
132
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
133
+ expected = "10|H|13.5|0.52";
134
+ expect(actual).toEqual(expected);
135
+ // 11
136
+ type = "11";
137
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
138
+ expected = "11|L|1|0.52";
139
+ expect(actual).toEqual(expected);
140
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
141
+ expected = "11|M|7.1|0.52";
142
+ expect(actual).toEqual(expected);
143
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
144
+ expected = "11|H|15.7|0.52";
145
+ expect(actual).toEqual(expected);
146
+ // 12
147
+ type = "12";
148
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
149
+ expected = "12|L|18.8|0.52";
150
+ expect(actual).toEqual(expected);
151
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
152
+ expected = "12|M|18.8|0.52";
153
+ expect(actual).toEqual(expected);
154
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
155
+ expected = "12|H|18.8|0.52";
156
+ expect(actual).toEqual(expected);
157
+ // 13
158
+ type = "13";
159
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
160
+ expected = "13|L|46.9|0.52";
161
+ expect(actual).toEqual(expected);
162
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
163
+ expected = "13|M|73.4|0.52";
164
+ expect(actual).toEqual(expected);
165
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
166
+ expected = "13|H|93.7|0.52";
167
+ expect(actual).toEqual(expected);
168
+ // 14
169
+ type = "14";
170
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
171
+ expected = "14|L|3.3|0.52";
172
+ expect(actual).toEqual(expected);
173
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
174
+ expected = "14|M|-8.7|0.52";
175
+ expect(actual).toEqual(expected);
176
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
177
+ expected = "14|H|-1.6|0.52";
178
+ expect(actual).toEqual(expected);
179
+ // 15
180
+ type = "15";
181
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
182
+ expected = "15|L|4.9|0.52";
183
+ expect(actual).toEqual(expected);
184
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
185
+ expected = "15|M|13.1|0.52";
186
+ expect(actual).toEqual(expected);
187
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
188
+ expected = "15|H|21.1|0.52";
189
+ expect(actual).toEqual(expected);
190
+ // 16
191
+ type = "16";
192
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
193
+ expected = "16|L|1.5|0.52";
194
+ expect(actual).toEqual(expected);
195
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
196
+ expected = "16|M|6.6|0.52";
197
+ expect(actual).toEqual(expected);
198
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
199
+ expected = "16|H|13.7|0.52";
200
+ expect(actual).toEqual(expected);
201
+ // 17
202
+ type = "17";
203
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
204
+ expected = "17|L|2.4|0.52";
205
+ expect(actual).toEqual(expected);
206
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
207
+ expected = "17|M|7.5|0.52";
208
+ expect(actual).toEqual(expected);
209
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
210
+ expected = "17|H|12.7|0.52";
211
+ expect(actual).toEqual(expected);
212
+ // 18
213
+ type = "18";
214
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
215
+ expected = "18|L|-2.8|0.52";
216
+ expect(actual).toEqual(expected);
217
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
218
+ expected = "18|M|10|0.52";
219
+ expect(actual).toEqual(expected);
220
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
221
+ expected = "18|H|26.3|0.52";
222
+ expect(actual).toEqual(expected);
223
+ // 19
224
+ type = "19";
225
+ actual = pciUtils.calculateDeductValue(type, "L", "0.52");
226
+ expected = "19|L|0|0.52";
227
+ expect(actual).toEqual(expected);
228
+ actual = pciUtils.calculateDeductValue(type, "M", "0.52");
229
+ expected = "19|M|7.1|0.52";
230
+ expect(actual).toEqual(expected);
231
+ actual = pciUtils.calculateDeductValue(type, "H", "0.52");
232
+ expected = "19|H|13.9|0.52";
233
+ expect(actual).toEqual(expected);
234
+ });
235
+ it("calculatePCI", () => {
236
+ const debugMessages = [
237
+ "Deduct values sorted in descending order: 25.1,23.4,17.9,11.2,7.9,7.5,6.9,5.3",
238
+ "Highest deduct value: 25.1",
239
+ "Allowable number of deducts including fractions: 7.87857142857143",
240
+ "Reduce deduct values to the m largest including the fractional part: 25.1,23.4,17.9,11.2,7.9,7.5,6.9,4.7",
241
+ "vals: 25.1,23.4,17.9,11.2,7.9,7.5,6.9,4.7",
242
+ "totalDV: 104.60000000000002",
243
+ "q: 8",
244
+ "CDV: 51.412097117472015",
245
+ "vals: 25.1,23.4,17.9,11.2,7.9,7.5,6.9,2",
246
+ "totalDV: 101.90000000000002",
247
+ "q: 7",
248
+ "CDV: 50.051756691168016",
249
+ "vals: 25.1,23.4,17.9,11.2,7.9,7.5,2,2",
250
+ "totalDV: 97.00000000000001",
251
+ "q: 6",
252
+ "CDV: 47.48916845800001",
253
+ "vals: 25.1,23.4,17.9,11.2,7.9,2,2,2",
254
+ "totalDV: 91.50000000000001",
255
+ "q: 5",
256
+ "CDV: 47.433547768125",
257
+ "vals: 25.1,23.4,17.9,11.2,2,2,2,2",
258
+ "totalDV: 85.60000000000001",
259
+ "q: 4",
260
+ "CDV: 48.57397038028801",
261
+ "vals: 25.1,23.4,17.9,2,2,2,2,2",
262
+ "totalDV: 76.4",
263
+ "q: 3",
264
+ "CDV: 48.755270187200004",
265
+ "vals: 25.1,23.4,2,2,2,2,2,2",
266
+ "totalDV: 60.5",
267
+ "q: 2",
268
+ "CDV: 44.42615179325001",
269
+ "vals: 25.1,2,2,2,2,2,2,2",
270
+ "totalDV: 39.1",
271
+ "q: 1",
272
+ "CDV: 39.1",
273
+ "Max CDV: 51.412097117472015"
274
+ ];
275
+ const logMock = jest.spyOn(console, "log").mockImplementation(() => { });
276
+ const expected = 48.6;
277
+ const actual = pciUtils.calculatePCI("7.9,23.4,7.5,25.1,17.9,11.2,6.9,5.3", true);
278
+ expect(actual).toEqual(expected);
279
+ debugMessages.forEach((m, i) => {
280
+ expect(logMock).nthCalledWith(i + 1, m);
281
+ });
282
+ });
283
+ it("calculatePCI", () => {
284
+ const logMock = jest.spyOn(console, "log").mockImplementation(() => { });
285
+ const expected = 48.6;
286
+ const actual = pciUtils.calculatePCI("7.9,23.4,7.5,25.1,17.9,11.2,6.9,5.3", false);
287
+ expect(actual).toEqual(expected);
288
+ expect(logMock).toBeCalledTimes(0);
289
+ });
290
+ it("calculatePCI", () => {
291
+ const logMock = jest.spyOn(console, "log").mockImplementation(() => { });
292
+ const expected = 92.1;
293
+ const actual = pciUtils.calculatePCI("7.9", true);
294
+ expect(actual).toEqual(expected);
295
+ expect(logMock).lastCalledWith("Max CDV: 7.9");
296
+ });
297
+ });