Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
giswqs
GitHub Repository: giswqs/geemap
Path: blob/master/tests/basemap_selector.spec.ts
2313 views
1
import { AnyModel } from "@anywidget/types";
2
import "../js/basemap_selector";
3
import {
4
default as selectorRender,
5
BasemapSelector,
6
BasemapSelectorModel,
7
} from "../js/basemap_selector";
8
import { FakeAnyModel } from "./fake_anywidget";
9
10
describe("<basemap-selector>", () => {
11
let selector: BasemapSelector;
12
13
async function makeSelector(model: AnyModel<BasemapSelectorModel>) {
14
const container = document.createElement("div");
15
selectorRender.render({
16
model,
17
el: container,
18
experimental: {
19
invoke: () => new Promise(() => [model, []]),
20
},
21
});
22
const element = container.firstElementChild as BasemapSelector;
23
document.body.appendChild(element);
24
await element.updateComplete;
25
return element;
26
}
27
28
beforeEach(async () => {
29
selector = await makeSelector(
30
new FakeAnyModel<BasemapSelectorModel>({
31
basemaps: {
32
DEFAULT: [],
33
"a-provider": ["resource-1", "resource-2"],
34
"another-provider": [],
35
},
36
provider: "DEFAULT",
37
resource: "",
38
})
39
);
40
});
41
42
afterEach(() => {
43
Array.from(document.querySelectorAll("basemap-selector")).forEach(
44
(el) => {
45
el.remove();
46
}
47
);
48
});
49
50
it("can be instantiated.", () => {
51
expect(
52
selector.shadowRoot?.querySelector("select")?.textContent
53
).toContain("DEFAULT");
54
});
55
56
it("selects the default provider appropriately.", () => {
57
const selects = selector.shadowRoot?.querySelectorAll("select")!;
58
const providerSelect = selects[0];
59
const resourceSelect = selects[1];
60
61
expect(selects.length).toBe(2); // Resource select should display "---".
62
expect(providerSelect.value).toBe("DEFAULT");
63
expect(selector.provider).toBe("DEFAULT");
64
expect(resourceSelect.value).toBe("---");
65
expect(selector.resource).toBe("");
66
});
67
68
it("setting the provider and resource on model updates the view.", async () => {
69
selector.provider = "a-provider";
70
await selector.updateComplete;
71
72
const selects = selector.shadowRoot?.querySelectorAll("select")!;
73
expect(selects.length).toBe(2);
74
const providerSelect = selects[0];
75
const resourceSelect = selects[1];
76
77
expect(providerSelect.value).toBe("a-provider");
78
expect(resourceSelect.value).toBe("resource-1");
79
expect(selector.resource).toBe("resource-1");
80
81
selector.resource = "resource-2";
82
await selector.updateComplete;
83
84
expect(providerSelect.value).toBe("a-provider");
85
expect(selector.provider).toBe("a-provider");
86
expect(resourceSelect.value).toBe("resource-2");
87
});
88
89
it("sets value on model when option changes.", async () => {
90
const setSpy = spyOn(FakeAnyModel.prototype, "set");
91
const saveSpy = spyOn(FakeAnyModel.prototype, "save_changes");
92
93
let selects = selector.shadowRoot?.querySelectorAll("select")!;
94
const providerSelect = selects[0];
95
96
providerSelect.value = "a-provider";
97
providerSelect.dispatchEvent(new Event("change"));
98
await selector.updateComplete;
99
100
expect(setSpy).toHaveBeenCalledWith("provider", "a-provider");
101
expect(setSpy).toHaveBeenCalledWith("resource", "resource-1");
102
expect(setSpy).toHaveBeenCalledTimes(2);
103
expect(saveSpy).toHaveBeenCalledTimes(1);
104
105
selects = selector.shadowRoot?.querySelectorAll("select")!;
106
const resourceSelect = selects[1];
107
108
resourceSelect.value = "resource-2";
109
resourceSelect.dispatchEvent(new Event("change"));
110
await selector.updateComplete;
111
112
expect(setSpy).toHaveBeenCalledWith("resource", "resource-2");
113
expect(setSpy).toHaveBeenCalledTimes(3);
114
expect(saveSpy).toHaveBeenCalledTimes(2);
115
});
116
});
117
118