@panoramax/web-viewer
Version:
Panoramax web viewer for geolocated pictures
124 lines (108 loc) • 2.89 kB
JavaScript
import PresetsManager from "../../src/utils/PresetsManager";
const mockPresets = {
"osm_traffic_sign": {
"icon": "fas-directions",
"tags": {
"osm|traffic_sign": "*"
},
"geometry": [
"point",
"vertex"
]
},
"osm_traffic_calming": {
"icon": "temaki-diamond",
"tags": {
"osm|traffic_calming": "*"
},
"geometry": [
"vertex"
]
},
"osm_shop": {
"icon": "maki-shop",
"tags": {
"osm|shop": "*"
},
"geometry": [
"point",
"area"
]
},
};
// Mock des appels fetch
global.fetch = jest.fn(() =>
Promise.resolve({
ok: true,
json: () => Promise.resolve({}),
})
);
beforeEach(() => {
fetch.mockClear();
});
it("should initialize with default values", () => {
const presetsManager = new PresetsManager(null, true);
expect(presetsManager._ready).toBe(false);
expect(presetsManager._presets).toBe(null);
expect(presetsManager._translations).toEqual({});
});
it("should load translations and presets", async () => {
const mockTranslationsEN = { en: { presets: { preset1: { name: "Preset 1" } } } };
const mockTranslationsFR = { fr: { presets: { preset1: { name: "Préréglage 1" } } } };
fetch.mockImplementationOnce(() =>
Promise.resolve({
ok: true,
json: () => Promise.resolve(mockTranslationsEN),
})
).mockImplementationOnce(() =>
Promise.resolve({
ok: true,
json: () => Promise.resolve(mockTranslationsFR),
})
).mockImplementationOnce(() =>
Promise.resolve({
ok: true,
json: () => Promise.resolve(mockPresets),
})
);
const presetsManager = new PresetsManager("fr");
await presetsManager.onceReady();
expect(presetsManager._translations.en).toEqual(mockTranslationsEN.en.presets);
expect(presetsManager._translations.fr).toEqual(mockTranslationsFR.fr.presets);
expect(presetsManager._presets).toEqual(mockPresets);
expect(presetsManager._ready).toBe(true);
});
it("should handle errors during load", async () => {
global.console = { error: jest.fn() };
fetch.mockImplementation(() =>
Promise.resolve({
ok: false,
})
);
const presetsManager = new PresetsManager();
await expect(presetsManager.onceReady()).rejects.toBeUndefined();
expect(presetsManager._ready).toBe(-1);
});
it("should find the best matching preset", async () => {
fetch.mockImplementationOnce(() =>
Promise.resolve({
ok: true,
json: () => Promise.resolve({}),
})
).mockImplementationOnce(() =>
Promise.resolve({
ok: true,
json: () => Promise.resolve({}),
})
).mockImplementationOnce(() =>
Promise.resolve({
ok: true,
json: () => Promise.resolve(mockPresets),
})
);
const presetsManager = new PresetsManager();
await presetsManager.onceReady();
const feature = { semantics: [{ key: "key1", value: "value1" }, { key: "key2", value: "value2" }] };
const bestPreset = await presetsManager.getPreset(feature);
expect(bestPreset).toEqual(mockPresets.preset2);
});