renewedtab/tests/app/WidgetManager.test.ts

124 lines
3.0 KiB
TypeScript

import { LinkBoxProps } from "app/components/LinkBox";
import { Vector2 } from "app/utils/Vector2";
import { WidgetManager } from "app/WidgetManager";
import { expect } from "chai";
import DummyStorage from "./DummyStorage";
describe("WidgetManager::create", () => {
it("createsDefaultWidgets", async () => {
const storage = new DummyStorage();
const wm = new WidgetManager(storage);
await wm.load();
expect(wm.widgets.length).to.equal(9);
});
it("copiesProps", async () => {
const storage = new DummyStorage();
storage.set("widgets", [
{
id: "123",
type: "Notes",
props: {},
size: new Vector2(3, 5),
},
]);
const wm = new WidgetManager(storage);
expect(wm.widgets.length).to.equal(0);
await wm.load();
expect(wm.widgets.length).to.equal(1);
const widget1 = wm.createWidget<LinkBoxProps>("Links");
const widget2 = wm.createWidget<LinkBoxProps>("Links");
expect(widget1.props.links.length).to.equal(6);
expect(widget2.props.links.length).to.equal(6);
widget1.props.links.push({
id: "123",
title: "Title",
url: "url",
});
expect(widget1.props.links.length).to.equal(7);
expect(widget2.props.links.length).to.equal(6);
});
it("copiesTheme", async () => {
const storage = new DummyStorage();
storage.set("widgets", []);
const wm = new WidgetManager(storage);
await wm.load();
expect(wm.widgets.length).to.equal(0);
const widget1 = wm.createWidget<LinkBoxProps>("Links");
const widget2 = wm.createWidget<LinkBoxProps>("Links");
expect(widget1.theme.useIconBar).is.false;
widget1.theme.useIconBar = true;
expect(widget1.theme.useIconBar).is.true;
expect(widget2.theme.useIconBar).is.false;
});
});
describe("WidgetManager::load", () => {
it("adds theme", async () => {
const storage = new DummyStorage();
storage.set("widgets", [
{
id: "123",
type: "Notes",
props: {},
size: new Vector2(3, 5),
},
{
id: "124",
type: "Clock",
props: {},
size: new Vector2(3, 5),
},
]);
const wm = new WidgetManager(storage);
expect(wm.widgets.length).to.equal(0);
await wm.load();
expect(wm.widgets.length).to.equal(2);
{
const notesWidget = wm.widgets[0];
expect(notesWidget.theme).not.null;
expect(notesWidget.theme.showPanelBG).to.be.true;
}
{
const clockWidget = wm.widgets[1];
expect(clockWidget.theme).not.null;
expect(clockWidget.theme.showPanelBG).to.be.false;
}
});
it("runs load hook", async () => {
const storage = new DummyStorage();
storage.set("widgets", [
{
id: "123",
type: "TopSites",
props: {
useIconBar: false,
},
size: new Vector2(3, 5),
},
]);
const wm = new WidgetManager(storage);
expect(wm.widgets.length).to.equal(0);
await wm.load();
expect(wm.widgets.length).to.equal(1);
const widget = wm.widgets[0];
expect(widget.props).not.to.haveOwnProperty("useIconBar");
expect(widget.theme).not.null;
expect(widget.theme.showPanelBG).to.be.true;
expect(widget.theme.useIconBar).to.be.false;
});
});