@talend/assets-api
Version:
A set of API designed to access assets using CDN
75 lines (68 loc) • 2.6 kB
text/typescript
import readPackageUp from 'read-pkg-up';
import assetsApi, { Asset } from '.';
const currentInfo = readPackageUp.sync({ cwd: __dirname });
const bundlePath = '/dist/svg-bundles/all.svg';
describe('assets-api', () => {
describe('getURL', () => {
afterEach(() => {
jest.restoreAllMocks();
});
it('should return unpkg url', () => {
const url = assetsApi.getURL(bundlePath, '@talend/icons', '6.60.1');
expect(url).toBe(`https://unpkg.com/@talend/icons@6.60.1${bundlePath}`);
});
it('should return /cdn url', () => {
const original = window.Talend.CDN_URL;
window.Talend.CDN_URL = '/cdn';
const url = assetsApi.getURL(bundlePath, '@talend/icons', '6.60.1');
expect(url).toBe(`/cdn/@talend/icons/6.60.1${bundlePath}`);
window.Talend.CDN_URL = original;
});
it('should prevent // as start url', () => {
const original = window.Talend.CDN_URL;
window.Talend.CDN_URL = '/cdn';
const mockedBaseElement = {
getAttribute: jest.fn().mockReturnValueOnce('/'),
} as unknown as Element;
jest.spyOn(document, 'querySelector').mockImplementation(() => mockedBaseElement);
const url = assetsApi.getURL(bundlePath, '@talend/icons', '6.60.1');
expect(url).toBe(`/cdn/@talend/icons/6.60.1${bundlePath}`);
window.Talend.CDN_URL = original;
});
it('should use global getCDNUrl', () => {
const assetsPath = '/package.json';
const original = window.Talend.getCDNUrl;
window.Talend.getCDNUrl = jest.fn(
(info: Asset) => `https://mycdn.talend.com/${info.name}/${info.version}${info.path}`,
);
const url = assetsApi.getURL(
assetsPath,
'@talend/assets-api',
currentInfo?.packageJson.version,
);
expect(url).toBe(
`https://mycdn.talend.com/@talend/assets-api/${currentInfo?.packageJson.version}${assetsPath}`,
);
window.Talend.getCDNUrl = original;
});
it('should use meta to override the value', () => {
const assetsPath = '/package.json';
const original = window.Talend.getCDNUrl;
window.Talend.getCDNUrl = jest.fn(
(info: Asset) => `https://mycdn.talend.com/${info.name}/${info.version}${info.path}`,
);
const meta = document.createElement('meta');
meta.setAttribute('name', '@talend/assets-api');
meta.setAttribute('content', '0.0.0');
document.head.appendChild(meta);
const url = assetsApi.getURL(
assetsPath,
'@talend/assets-api',
currentInfo?.packageJson.version,
);
expect(url).toBe(`https://mycdn.talend.com/@talend/assets-api/0.0.0${assetsPath}`);
window.Talend.getCDNUrl = original;
document.head.removeChild(meta);
});
});
});