From 0569bfd3e33d639cf00f740031c133f1401d2cad Mon Sep 17 00:00:00 2001 From: Bandana Laishram Date: Wed, 24 Jul 2024 17:59:54 +0530 Subject: [PATCH] Fix for errors in dynamically loaded scripts in test cases (#2619) * Fix for dynamic script loading in test cases * Lint fix --- libs/navigation/navigation.js | 8 +++--- test/navigation/bootstrapper.test.js | 38 +++++++++++++++++++++++++--- test/navigation/navigation.test.js | 4 +-- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/libs/navigation/navigation.js b/libs/navigation/navigation.js index 21992cbb33..ab721d2a47 100644 --- a/libs/navigation/navigation.js +++ b/libs/navigation/navigation.js @@ -12,10 +12,10 @@ const envMap = { qa: 'https://feds--milo--adobecom.hlx.page', }; -export default async function loadBlock(configs = {}) { - const { footer, locale, env = 'prod' } = configs; +export default async function loadBlock(configs, customLib) { + const { footer, locale, env = 'prod' } = configs || {}; const branch = new URLSearchParams(window.location.search).get('navbranch'); - const miloLibs = branch ? `https://${branch}--milo--adobecom.hlx.page` : envMap[env]; + const miloLibs = branch ? `https://${branch}--milo--adobecom.hlx.page` : customLib || envMap[env]; // Relative path can't be used, as the script will run on consumer's app const { default: bootstrapBlock } = await import(`${miloLibs}/libs/navigation/bootstrapper.js`); @@ -27,7 +27,7 @@ export default async function loadBlock(configs = {}) { locales: configs.locales || locales, }; if (footer) { - const { footer: { authoringPath, privacyId, privacyLoadDelay = 3000 } } = configs; + const { authoringPath, privacyId, privacyLoadDelay = 3000 } = footer; blockConfig.delay = privacyLoadDelay; bootstrapBlock({ ...clientConfig, contentRoot: authoringPath, privacyId }, blockConfig.footer); } diff --git a/test/navigation/bootstrapper.test.js b/test/navigation/bootstrapper.test.js index 8bfb286e82..4415788452 100644 --- a/test/navigation/bootstrapper.test.js +++ b/test/navigation/bootstrapper.test.js @@ -1,27 +1,57 @@ import { readFile } from '@web/test-runner-commands'; import { expect } from '@esm-bundle/chai'; -import sinon from 'sinon'; +import { stub, useFakeTimers, restore } from 'sinon'; import loadBlock from '../../libs/navigation/bootstrapper.js'; +import fetchedFooter from '../blocks/global-footer/mocks/fetched-footer.js'; +import placeholders from '../blocks/global-navigation/mocks/placeholders.js'; document.body.innerHTML = await readFile({ path: './mocks/body.html' }); const blockConfig = { name: 'global-footer', targetEl: 'footer', - appendType: 'appendChild', + appendType: 'append', footer: { authoringPath: '/federal/home', privacyLoadDelay: 0 }, }; const miloConfigs = { origin: 'https://feds--milo--adobecom.hlx.page', - miloLibs: 'https://feds--milo--adobecom.hlx.page/libs', + miloLibs: 'http://localhost:2000/libs', pathname: '/', }; +const mockRes = ({ payload, status = 200, ok = true } = {}) => new Promise((resolve) => { + resolve({ + status, + ok, + json: () => payload, + text: () => payload, + }); +}); + describe('Bootstrapper', async () => { + beforeEach(async () => { + stub(window, 'fetch').callsFake(async (url) => { + if (url.includes('/footer')) { + return mockRes({ + payload: fetchedFooter( + { regionPickerHash: '/fragments/regions#langnav' }, + ), + }); + } + if (url.includes('/placeholders')) return mockRes({ payload: placeholders }); + if (url.includes('/footer.plain.html')) return mockRes({ payload: await readFile({ path: '../blocks/region-nav/mocks/regions.html' }) }); + return null; + }); + }); + + afterEach(() => { + restore(); + }); + it('Renders the footer block', async () => { await loadBlock(miloConfigs, blockConfig); - const clock = sinon.useFakeTimers({ + const clock = useFakeTimers({ toFake: ['setTimeout'], shouldAdvanceTime: true, }); diff --git a/test/navigation/navigation.test.js b/test/navigation/navigation.test.js index a29a75ced1..28b3bacc13 100644 --- a/test/navigation/navigation.test.js +++ b/test/navigation/navigation.test.js @@ -4,9 +4,9 @@ import loadBlock from '../../libs/navigation/navigation.js'; document.body.innerHTML = await readFile({ path: './mocks/body.html' }); -describe('Bootstrapper', async () => { +describe('Navigation component', async () => { it('Renders the footer block', async () => { - await loadBlock({ footer: { authoringPath: '/federal/home' }, env: 'qa' }); + await loadBlock({ footer: { authoringPath: '/federal/home' }, env: 'qa' }, 'http://localhost:2000'); const el = document.getElementsByTagName('footer'); expect(el).to.exist; });