import { getImageAssetSrcPath } from './assets'; describe('getImageAssetSrcPath', () => { const imageName = 'ontario-material-dropdown-arrow-48px.svg'; beforeEach(() => { document.head.innerHTML = ''; document.body.innerHTML = ''; // The Stencil test environment leaves `window.location.href` empty, which makes // `new URL(path, window.location.href)` throw. Seed a valid origin so the asset // path resolution behaves like a real browser. (window as unknown as { location: { href: string } }).location.href = 'http://localhost:3000/'; }); it('returns asset path from explicit assetBasePath when provided', () => { const result = getImageAssetSrcPath(imageName, '/developer-docs/assets/'); expect(result).toBe('/developer-docs/assets/ontario-material-dropdown-arrow-48px.svg'); }); it('returns stencil asset path when getAssetPath succeeds', () => { const resolver = vi.fn().mockReturnValue('/build/assets/ontario-material-dropdown-arrow-48px.svg'); const result = getImageAssetSrcPath(imageName, undefined, resolver); expect(result).toBe('/build/assets/ontario-material-dropdown-arrow-48px.svg'); expect(resolver).toHaveBeenCalledWith('./assets/ontario-material-dropdown-arrow-48px.svg'); }); it('falls back using base href when getAssetPath fails', () => { const resolver = vi.fn(() => { throw new Error('asset path unavailable'); }); document.head.innerHTML = ''; const result = getImageAssetSrcPath(imageName, undefined, resolver); expect(result).toBe('/developer-docs/assets/ontario-material-dropdown-arrow-48px.svg'); }); it('falls back using loaded asset URLs when base href is unavailable', () => { const resolver = vi.fn(() => { throw new Error('asset path unavailable'); }); document.head.innerHTML = ''; const result = getImageAssetSrcPath(imageName, undefined, resolver); expect(result).toBe('/developer-docs/assets/ontario-material-dropdown-arrow-48px.svg'); }); it('falls back to root assets when no document hint is available', () => { const resolver = vi.fn(() => { throw new Error('asset path unavailable'); }); const result = getImageAssetSrcPath(imageName, undefined, resolver); expect(result).toBe('/assets/ontario-material-dropdown-arrow-48px.svg'); }); });