134 lines
4.1 KiB
JavaScript
134 lines
4.1 KiB
JavaScript
import {
|
|
setupApplicationTest as upstreamSetupApplicationTest,
|
|
setupRenderingTest as upstreamSetupRenderingTest,
|
|
setupTest as upstreamSetupTest,
|
|
} from 'ember-qunit';
|
|
import { setupNostrMocks } from './mock-nostr';
|
|
import sinon from 'sinon';
|
|
|
|
function setupMapStyleMocks(hooks) {
|
|
hooks.beforeEach(function () {
|
|
// Stub window.fetch to capture map-style assets before they hit the network
|
|
this.fetchStub = sinon.stub(window, 'fetch');
|
|
|
|
this.fetchStub.callsFake(async (input, init) => {
|
|
let url = input;
|
|
if (typeof input === 'object' && input !== null && 'url' in input) {
|
|
url = input.url;
|
|
}
|
|
|
|
if (typeof url === 'string' && url.includes('tiles.openfreemap.org')) {
|
|
// A. Mock Style Sheet
|
|
if (url.includes('/styles/liberty')) {
|
|
return {
|
|
ok: true,
|
|
status: 200,
|
|
json: async () => ({
|
|
version: 8,
|
|
name: 'Mock Style',
|
|
sources: {
|
|
openmaptiles: {
|
|
type: 'vector',
|
|
tiles: [], // Empty tiles list prevents any map tile fetching completely!
|
|
},
|
|
},
|
|
sprite: 'https://tiles.openfreemap.org/sprites/liberty',
|
|
glyphs:
|
|
'https://tiles.openfreemap.org/fonts/{fontstack}/{range}.pbf',
|
|
layers: [
|
|
{
|
|
id: 'background',
|
|
type: 'background',
|
|
paint: { 'background-color': '#f8f9fa' },
|
|
},
|
|
],
|
|
}),
|
|
};
|
|
}
|
|
|
|
// B. Mock Sprite Atlas JSON
|
|
if (url.endsWith('.json') && url.includes('/sprites/')) {
|
|
return {
|
|
ok: true,
|
|
status: 200,
|
|
json: async () => ({}), // Empty sprite dictionary
|
|
};
|
|
}
|
|
|
|
// C. Mock Sprite Atlas PNG (Returns a valid 1x1 transparent PNG)
|
|
if (url.endsWith('.png') && url.includes('/sprites/')) {
|
|
const bytes = new Uint8Array([
|
|
137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0,
|
|
0, 1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 11, 73,
|
|
68, 65, 84, 120, 156, 99, 96, 0, 0, 0, 2, 0, 1, 226, 33, 188, 51, 0,
|
|
0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130,
|
|
]);
|
|
const blob = new Blob([bytes], { type: 'image/png' });
|
|
return {
|
|
ok: true,
|
|
status: 200,
|
|
blob: async () => blob,
|
|
};
|
|
}
|
|
|
|
// Catch-all mock for other openfreemap endpoints
|
|
return {
|
|
ok: true,
|
|
status: 200,
|
|
json: async () => ({}),
|
|
};
|
|
}
|
|
|
|
// Pass through to original fetch (e.g. Photon results, local mock APIs)
|
|
return this.fetchStub.wrappedMethod(input, init);
|
|
});
|
|
});
|
|
|
|
hooks.afterEach(function () {
|
|
if (this.fetchStub && typeof this.fetchStub.restore === 'function') {
|
|
this.fetchStub.restore();
|
|
}
|
|
});
|
|
}
|
|
|
|
// This file exists to provide wrappers around ember-qunit's
|
|
// test setup functions. This way, you can easily extend the setup that is
|
|
// needed per test type.
|
|
|
|
function setupApplicationTest(hooks, options) {
|
|
upstreamSetupApplicationTest(hooks, options);
|
|
setupNostrMocks(hooks);
|
|
setupMapStyleMocks(hooks);
|
|
|
|
// Additional setup for application tests can be done here.
|
|
//
|
|
// For example, if you need an authenticated session for each
|
|
// application test, you could do:
|
|
//
|
|
// hooks.beforeEach(async function () {
|
|
// await authenticateSession(); // ember-simple-auth
|
|
// });
|
|
//
|
|
// This is also a good place to call test setup functions coming
|
|
// from other addons:
|
|
//
|
|
// setupIntl(hooks, 'en-us'); // ember-intl
|
|
// setupMirage(hooks); // ember-cli-mirage
|
|
}
|
|
|
|
function setupRenderingTest(hooks, options) {
|
|
upstreamSetupRenderingTest(hooks, options);
|
|
setupNostrMocks(hooks);
|
|
|
|
// Additional setup for rendering tests can be done here.
|
|
}
|
|
|
|
function setupTest(hooks, options) {
|
|
upstreamSetupTest(hooks, options);
|
|
setupNostrMocks(hooks);
|
|
|
|
// Additional setup for unit tests can be done here.
|
|
}
|
|
|
|
export { setupApplicationTest, setupRenderingTest, setupTest };
|