Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
giswqs
GitHub Repository: giswqs/geemap
Path: blob/master/tests/layer_manager_row.spec.ts
2313 views
1
import { AnyModel } from "@anywidget/types";
2
import "../js/layer_manager_row";
3
import { default as rowRender, LayerManagerRow, LayerManagerRowModel } from "../js/layer_manager_row";
4
import { FakeAnyModel } from "./fake_anywidget";
5
6
describe("<layer-manager-row>", () => {
7
let row: LayerManagerRow;
8
9
async function makeRow(model: AnyModel<LayerManagerRowModel>) {
10
const container = document.createElement("div");
11
rowRender.render({
12
model, el: container, experimental: {
13
invoke: () => new Promise(() => [model, []]),
14
}
15
});
16
const element = container.firstElementChild as LayerManagerRow;
17
document.body.appendChild(element);
18
await element.updateComplete;
19
return element;
20
}
21
22
beforeEach(async () => {
23
row = await makeRow(new FakeAnyModel<LayerManagerRowModel>({
24
name: "Test Layer",
25
visible: true,
26
opacity: 1,
27
is_loading: false,
28
}));
29
});
30
31
afterEach(() => {
32
Array.from(document.querySelectorAll("layer-manager-row")).forEach((el) => {
33
el.remove();
34
})
35
});
36
37
it("can be instantiated.", () => {
38
expect(row.shadowRoot?.querySelector(".layer-name")?.textContent).toContain("Test Layer");
39
});
40
41
it("sets model properties on property change.", async () => {
42
const setSpy = spyOn(FakeAnyModel.prototype, "set");
43
const saveSpy = spyOn(FakeAnyModel.prototype, "save_changes");
44
row.opacity = 0.5;
45
await row.updateComplete;
46
expect(setSpy).toHaveBeenCalledOnceWith("opacity", 0.5);
47
expect(saveSpy).toHaveBeenCalledTimes(1);
48
});
49
50
it("emits model events when clicked.", async () => {
51
// Settings button emits an event.
52
const sendSpy = spyOn(FakeAnyModel.prototype, "send");
53
(row.shadowRoot?.querySelector(".settings-button") as HTMLButtonElement).click();
54
expect(FakeAnyModel.prototype.send).toHaveBeenCalledOnceWith({
55
type: "click",
56
id: "settings"
57
});
58
59
sendSpy.calls.reset();
60
61
// Deletion button emits an event.
62
(row.shadowRoot?.querySelector(".delete-button") as HTMLButtonElement).click();
63
await row.updateComplete;
64
(row.shadowRoot?.querySelector(".confirm-deletion-button") as HTMLButtonElement).click();
65
expect(sendSpy).toHaveBeenCalledOnceWith({
66
type: "click",
67
id: "delete"
68
});
69
});
70
});
71