import { beforeEach, afterEach, it } from 'vitest'; import 'chai'; import sinon from 'sinon'; import sinonChai from 'sinon-chai'; import 'happen'; import fetchMock from 'fetch-mock'; import envs from '../config/envs.mjs'; chai.use(sinonChai); declare var global: typeof globalThis; global.before = beforeEach; global.after = afterEach; global.fetchMock = fetchMock; global.sinon = sinon; global.VITEST = true; // create global variables for this data, to match what the esbuild config does for (const [key, value] of Object.entries(envs)) { Reflect.set(global, key, JSON.parse(value)); } // the 'happen' library explicitly references `window` when creating an event, // but we need to use jsdom's window, so we have to patch initEvent. const { initMouseEvent } = MouseEvent.prototype; MouseEvent.prototype.initMouseEvent = function (...args) { args[3] = jsdom.window; return initMouseEvent.apply(this, args); }; const { initUIEvent } = UIEvent.prototype; UIEvent.prototype.initUIEvent = function (...args) { args[3] = jsdom.window; return initUIEvent.apply(this, args); }; // must be imported after global envs are defined await import('../modules/id.js'); const iD = global.iD; iD.setDebug(true); // @ts-expect-error // Disable things that use the network for (var k in iD.services) { delete iD.services[k]; } // Try not to load imagery window.location.hash = '#background=none'; // Run without data for speed (tests which need data can set it up themselves) iD.fileFetcher.assetPath('../dist/'); const cached: any = iD.fileFetcher.cache(); // Initializing `coreContext` will try loading the locale data and English locale strings: cached.locales = { en: { rtl: false, pct: 1 } }; cached.locales_index_general = { en: { rtl: false, pct: 1 } }; cached.locales_index_tagging = { en: { rtl: false, pct: 1 } }; // Use fake data for the 'tagging' scope cached.locale_tagging_en = { en: { presets: { fields: { restrictions: { label: 'Turn Restrictions' }, access: { label: 'Allowed Access', placeholder: 'Not Specified', types: { access: 'All', foot: 'Foot', motor_vehicle: 'Motor Vehicles', bicycle: 'Bicycles', horse: 'Horses' }, options: { yes: { title: 'Allowed', description: 'Access allowed by law; a right of way' }, no: { title: 'Prohibited', description: 'Access not allowed to the general public' }, permissive: { title: 'Permissive', description: 'Access allowed until such time as the owner revokes the permission' }, private: { title: 'Private', description: 'Access allowed only with permission of the owner on an individual basis' }, designated: { title: 'Designated', description: 'Access allowed according to signs or specific local laws' }, destination: { title: 'Destination', description: 'Access allowed only to reach a destination' }, dismount: { title: 'Dismount', description: 'Access allowed but rider must dismount' }, permit: { title: 'Permit', description: 'Access allowed only with a valid permit or license' } } } } } } }; // Load the actual data from `dist/locales/` for the 'general' scope iD.localizer.loadLocale('en', 'general', 'locales'); // Load the fake data seeded above for the 'tagging' scope iD.localizer.loadLocale('en', 'tagging'); // Initializing `coreContext` initializes `_background`, which tries loading: cached.imagery = []; // Initializing `coreContext` initializes `_presets`, which tries loading: cached.preset_categories = {}; cached.preset_defaults = {}; cached.preset_fields = {}; cached.preset_presets = {}; // Initializing `coreContext` initializes `_validator`, which tries loading: cached.deprecated = []; // Initializing `coreContext` initializes `_uploader`, which tries loading: cached.discarded = {}; // @ts-expect-error window.d3 = iD.d3; // Remove this if we can avoid exporting all of d3.js // @ts-expect-error delete window.PointerEvent; // force the browser to use mouse events // some sticky fallbacks const capabilities = ` `; fetchMock.sticky('https://www.openstreetmap.org/api/capabilities', capabilities, {sticky: true}); fetchMock.sticky('http://www.openstreetmap.org/api/capabilities', capabilities, {sticky: true}); const vegbilderOwsCapabilities = ` Mock OGC WFS 2.0.0 vegbilder_1_0:Vegbilder_2020 Vegbilder_2020 Testlayer urn:ogc:def:crs:EPSG::4326 urn:ogc:def:crs:EPSG::3857 not_matched_layer:Vegbilder_2020 Vegbilder_2020_4 Not matched layer urn:ogc:def:crs:EPSG::4326 urn:ogc:def:crs:EPSG::3857 `; fetchMock.sticky({ url: 'https://www.vegvesen.no/kart/ogc/vegbilder_1_0/ows', query: { service: 'WFS', request: 'GetCapabilities' } }, vegbilderOwsCapabilities, {sticky: true}); fetchMock.config.fallbackToNetwork = true; fetchMock.config.overwriteRoutes = false; beforeAll(async () => { await iD.coreLocalizer().ensureLoaded(); });