UNPKG

@talend/assets-api

Version:

A set of API designed to access assets using CDN

75 lines (68 loc) 2.6 kB
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); }); }); });