@panoramax/web-viewer
Version:
Panoramax web viewer for geolocated pictures
122 lines (104 loc) • 3.71 kB
JavaScript
import Basic from "../../../src/components/core/Basic";
import API from "../../../src/utils/API";
jest.mock("../../../src/utils/API");
jest.mock("../../../src/utils/i18n");
jest.mock("../../../src/utils/widgets");
jest.mock("../../../src/utils/utils");
jest.mock("../../../package.json", () => ({ version: "1.0.0", repository: { url: "https://example.com" } }));
let basic;
global.console = { info: jest.fn(), error: jest.fn(), warn: jest.fn(), log: global.console.log };
beforeEach(() => {
basic = new Basic(true);
});
afterEach(() => {
jest.clearAllMocks();
});
describe("constructor", () => {
it("should initialize with default values", () => {
expect(basic.users).toEqual(["geovisio"]);
expect(basic.mapstyle).toBeDefined();
expect(basic.lang).toBeNull();
expect(basic.endpoint).toBeNull();
expect(basic.picture).toBeNull();
expect(basic.sequence).toBeNull();
});
it("should log version info on initialization", () => {
new Basic(true);
expect(console.info).toHaveBeenCalledWith(expect.stringContaining("Panoramax Basic - Version 1.0.0"));
});
it("should set up API when endpoint is provided", async () => {
basic.endpoint = "https://api.example.com";
basic.attributeChangedCallback("endpoint", null, "https://api.example.com");
expect(API).toHaveBeenCalledWith("https://api.example.com", expect.any(Object));
});
});
describe("attributeChangedCallback", () => {
it("should dispatch select event when picture or sequence changes", () => {
const eventSpy = jest.spyOn(basic, "dispatchEvent");
basic.attributeChangedCallback("picture", null, "new-pic-id");
expect(eventSpy).toHaveBeenCalledWith(expect.any(CustomEvent));
eventSpy.mockRestore();
});
});
describe("getClassName", () => {
it("works", () => {
expect(basic.getClassName()).toBe("Basic");
});
});
describe("select", () => {
it("works", () => {
basic.select("new-seq-id", "new-pic-id");
expect(basic.picture).toBe("new-pic-id");
expect(basic.sequence).toBe("new-seq-id");
});
});
describe("offsetWidth", () => {
it("works", () => {
basic.offsetWidth = 500;
expect(basic.isWidthSmall()).toBe(true);
basic.offsetWidth = 600;
expect(basic.isWidthSmall()).toBe(false);
});
});
describe("offsetHeight", () => {
it("works", () => {
basic.offsetHeight = 300;
expect(basic.isHeightSmall()).toBe(true);
basic.offsetHeight = 500;
expect(basic.isHeightSmall()).toBe(false);
});
});
describe("getSubComponentsNames", () => {
it("works", () => {
expect(basic.getSubComponentsNames()).toEqual(["loader", "api"]);
});
});
describe("addEventListener", () => {
it("should add event listener for standard events", () => {
const listener = jest.fn();
basic.addEventListener("ready", listener);
basic.dispatchEvent(new CustomEvent("ready"));
expect(listener).toHaveBeenCalled();
});
it("should add event listener with options", () => {
const listener = jest.fn();
basic.addEventListener("once-event", listener, { once: true });
basic.dispatchEvent(new CustomEvent("once-event"));
basic.dispatchEvent(new CustomEvent("once-event"));
expect(listener).toHaveBeenCalledTimes(1);
});
it("should wait for sub-component to be available", () => {
const listener = jest.fn();
global.setTimeout = jest.fn();
basic.getSubComponentsNames = () => ["loader", "api", "map"];
basic.map = null;
basic.addEventListener("map:move", listener);
expect(global.setTimeout).toHaveBeenCalled();
});
it("adds listener to basic if no sub-component matches prefix", () => {
const listener = jest.fn();
basic.addEventListener("unknown:event", listener);
basic.dispatchEvent(new CustomEvent("unknown:event"));
expect(listener).toHaveBeenCalled();
});
});