lion/packages/ui/components/localize/test-helpers/fake-imports.js
2022-10-31 16:55:07 +01:00

60 lines
1.3 KiB
JavaScript

/**
* @type {Object.<String, Object>}
*/
let fakeImports = {};
/**
* @param {string} path
* @param {Object} data
*/
export function setupFakeImport(path, data) {
const fakeExports = { ...data };
Object.defineProperty(fakeExports, '__esModule', { value: true });
fakeImports[path] = fakeExports;
}
/**
* @param {string[]} namespaces
* @param {string[]} locales
*/
export function setupEmptyFakeImportsFor(namespaces, locales) {
namespaces.forEach(namespace => {
locales.forEach(locale => {
setupFakeImport(`./${namespace}/${locale}.js`, {
default: { foo: `bar-${locale}` },
});
});
});
}
export function resetFakeImport() {
fakeImports = {};
}
/**
* @param {Object} result
* @param {Function} resolve
* @param {Function} reject
*/
function resolveOrReject(result, resolve, reject) {
if (result) {
resolve(result);
} else {
reject();
}
}
/**
* @param {string} path
* @param {number} [ms=0]
* @returns {Promise.<Object>}
*/
export async function fakeImport(path, ms = 0) {
const result = fakeImports[path];
if (ms > 0) {
return new Promise((resolve, reject) => {
setTimeout(() => resolveOrReject(result, resolve, reject), ms);
});
}
return new Promise((resolve, reject) => resolveOrReject(result, resolve, reject));
}