Skip to content

Commit

Permalink
Merge branch 'stage' of https://github.com/adobecom/milo into dismiss…
Browse files Browse the repository at this point in the history
…-pep
  • Loading branch information
sharmrj committed May 23, 2024
2 parents 4ab6a2f + 62c25ff commit e9a2143
Show file tree
Hide file tree
Showing 9 changed files with 109 additions and 3 deletions.
14 changes: 12 additions & 2 deletions libs/blocks/global-navigation/global-navigation.js
Original file line number Diff line number Diff line change
Expand Up @@ -991,10 +991,20 @@ class Gnav {
};
}

const getSource = async () => {
const { locale, dynamicNavKey } = getConfig();
let url = getMetadata('gnav-source') || `${locale.contentRoot}/gnav`;
if (dynamicNavKey) {
const { default: dynamicNav } = await import('../../features/dynamic-navigation.js');
url = dynamicNav(url, dynamicNavKey);
}
return url;
};

export default async function init(block) {
try {
const { locale, mep } = getConfig();
const url = getMetadata('gnav-source') || `${locale.contentRoot}/gnav`;
const { mep } = getConfig();
const url = await getSource();
const content = await fetchAndProcessPlainHtml({ url })
.catch((e) => lanaLog({
message: `Error fetching gnav content url: ${url}`,
Expand Down
15 changes: 15 additions & 0 deletions libs/features/dynamic-navigation.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { getMetadata } from '../utils/utils.js';

export default function dynamicNav(url, key) {
const metadataContent = getMetadata('dynamic-nav');

if (metadataContent === 'entry') {
window.sessionStorage.setItem('gnavSource', url);
window.sessionStorage.setItem('dynamicNavKey', key);
return url;
}

if (metadataContent !== 'on' || key !== window.sessionStorage.getItem('dynamicNavKey')) return url;

return window.sessionStorage.getItem('gnavSource') || url;
}
1 change: 1 addition & 0 deletions libs/features/personalization/stage-entitlements.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const STAGE_ENTITLEMENTS = {
'569f0f9d-83e8-45b4-adbf-07ef08a83398': 'any-cc-product-with-stock',
'47e204a3-220a-4e53-a95e-94b6eded0d26': '3d-substance-collection',
'4ec7b469-42c9-4367-a7da-39f11a32d880': '3d-substance-texturing',
'2a93b6cc-90a2-4cff-a32d-03c71d4692e6': 'free-cc',
// PEP segments
'9202b767-77dc-4e6e-8d74-488d9ef08900': 'lightroom-web-usage',
'3a7ffcce-11b8-4242-8cdf-8c8d059ae1cd': 'photoshop-signup-source',
Expand Down
5 changes: 4 additions & 1 deletion libs/utils/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -790,7 +790,9 @@ export async function decorateFooterPromo(doc = document) {
let imsLoaded;
export async function loadIms() {
imsLoaded = imsLoaded || new Promise((resolve, reject) => {
const { locale, imsClientId, imsScope, env, base } = getConfig();
const {
locale, imsClientId, imsScope, env, base, adobeid,
} = getConfig();
if (!imsClientId) {
reject(new Error('Missing IMS Client ID'));
return;
Expand All @@ -812,6 +814,7 @@ export async function loadIms() {
clearTimeout(timeout);
},
onError: reject,
...adobeid,
};
const path = PAGE_URL.searchParams.get('useAlternateImsDomain')
? 'https://auth.services.adobe.com/imslib/imslib.min.js'
Expand Down
26 changes: 26 additions & 0 deletions test/blocks/global-navigation/global-navigation.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import globalNavigationMock from './mocks/global-navigation.plain.js';
import globalNavigationActiveMock from './mocks/global-navigation-active.plain.js';
import globalNavigationWideColumnMock from './mocks/global-navigation-wide-column.plain.js';
import globalNavigationCrossCloud from './mocks/global-navigation-cross-cloud.plain.js';
import { getConfig } from '../../../tools/send-to-caas/send-utils.js';

const ogFetch = window.fetch;

Expand Down Expand Up @@ -1410,5 +1411,30 @@ describe('global navigation', () => {
fetchStub.calledOnceWith('https://www.stage.adobe.com/federal/path/to/gnav.plain.html'),
).to.be.true;
});

it('fetches navigation saved in sessionStorage', async () => {
const dynamicNavOn = toFragment`<meta name="dynamic-nav" content="on">`;
const conf = getConfig();
setConfig({ dynamicNavKey: 'milo', ...conf });
document.head.append(dynamicNavOn);
window.sessionStorage.setItem('dynamicNavKey', 'milo');
window.sessionStorage.setItem('gnavSource', '/some-path');
await initGnav(document.body.querySelector('header'));
expect(
fetchStub.calledOnceWith('/some-path.plain.html'),
).to.be.true;
});

it('does not fetch from sessionStorage url when dyanmicNavKey is not present', async () => {
const dynamicNavOn = toFragment`<meta name="dynamic-nav" content="on">`;
document.head.append(dynamicNavOn);
document.body.replaceChildren(toFragment`<header class="global-navigation"></header>`);
window.sessionStorage.setItem('dynamicNavKey', 'milo');
window.sessionStorage.setItem('gnavSource', '/some-path');
await initGnav(document.body.querySelector('header'));
expect(
fetchStub.calledOnceWith('http://localhost:2000/gnav.plain.html'),
).to.be.true;
});
});
});
48 changes: 48 additions & 0 deletions test/features/dynamic-nav/dynamicNav.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import { readFile } from '@web/test-runner-commands';
import { expect } from '@esm-bundle/chai';
import { setConfig } from '../../../libs/utils/utils.js';
import dynamicNav from '../../../libs/features/dynamic-navigation.js';

describe('Dynamic nav', () => {
beforeEach(() => {
const conf = { dynamicNavKey: 'bacom' };
setConfig(conf);
window.sessionStorage.setItem('gnavSource', 'some-source-string');
});

it('Saves the gnavSource and dynamicNavKey to session storage', async () => {
document.head.innerHTML = await readFile({ path: './mocks/entry.html' });
window.sessionStorage.removeItem('gnavSource');
dynamicNav('gnav/aem-sites', 'bacom');
expect(window.sessionStorage.getItem('gnavSource')).to.equal('gnav/aem-sites');
expect(window.sessionStorage.getItem('dynamicNavKey')).to.equal('bacom');
});

it('Returns the provided url when the dynamic nav metadata is not present', async () => {
document.head.innerHTML = await readFile({ path: './mocks/off.html' });
const url = dynamicNav('gnav/aem-sites', 'nocom');
expect(window.sessionStorage.getItem('gnavSource')).to.equal('some-source-string');
expect(url).to.equal('gnav/aem-sites');
});

it('Returns the provided url with when the wrong dynamicNavKey is passed', async () => {
document.head.innerHTML = await readFile({ path: './mocks/on.html' });
const url = dynamicNav('gnav/aem-sites', 'nocom');
expect(window.sessionStorage.getItem('gnavSource')).to.equal('some-source-string');
expect(url).to.equal('gnav/aem-sites');
});

it('Returns the sessionStorage url if the item exists, the keys match, and dynamic nav is on', async () => {
document.head.innerHTML = await readFile({ path: './mocks/on.html' });
const url = dynamicNav('gnav/aem-sites', 'bacom');
expect(window.sessionStorage.getItem('gnavSource')).to.equal('some-source-string');
expect(url).to.equal('some-source-string');
});

it('Returns the pprovided url if it does not find an item in sessionStorage and dynamic nav is on', async () => {
document.head.innerHTML = await readFile({ path: './mocks/on.html' });
window.sessionStorage.removeItem('gnavSource');
const url = dynamicNav('gnav/aem-sites', 'bacom');
expect(url).to.equal('gnav/aem-sites');
});
});
1 change: 1 addition & 0 deletions test/features/dynamic-nav/mocks/entry.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<meta name="dynamic-nav" content="entry">
1 change: 1 addition & 0 deletions test/features/dynamic-nav/mocks/off.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<meta name="stub" content="stub">
1 change: 1 addition & 0 deletions test/features/dynamic-nav/mocks/on.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<meta name="dynamic-nav" content="on">

0 comments on commit e9a2143

Please sign in to comment.