diff --git a/.github/workflows/merge-to-main.yaml b/.github/workflows/merge-to-main.yaml
index ada833d19f..bd12f267b8 100644
--- a/.github/workflows/merge-to-main.yaml
+++ b/.github/workflows/merge-to-main.yaml
@@ -9,6 +9,7 @@ on:
env:
MILO_RELEASE_SLACK_WH: ${{ secrets.MILO_RELEASE_SLACK_WH }}
+ MILO_STAGE_SLACK_WH: ${{secrets.MILO_STAGE_SLACK_WH}}
jobs:
merge-to-main:
diff --git a/head.html b/head.html
index 3bead19732..0b7209238b 100644
--- a/head.html
+++ b/head.html
@@ -1,4 +1,4 @@
-
+
diff --git a/libs/blocks/caas-config/caas-config.js b/libs/blocks/caas-config/caas-config.js
index e1b12c4638..ca8959bfa8 100644
--- a/libs/blocks/caas-config/caas-config.js
+++ b/libs/blocks/caas-config/caas-config.js
@@ -1,6 +1,6 @@
/* eslint-disable compat/compat */
/* eslint-disable react-hooks/exhaustive-deps */
-/* global ClipboardItem */
+
import {
createContext,
html,
@@ -363,6 +363,7 @@ const UiPanel = () => html`
<${Input} label="Use Light Text" prop="useLightText" type="checkbox" />
<${Input} label="Use Overlay Links" prop="useOverlayLinks" type="checkbox" />
<${Input} label="Show total card count at top" prop="showTotalResults" type="checkbox" />
+ <${Input} label="Hide date for on-demand content" prop="hideDateInterval" type="checkbox" />
<${Select} label="Card Style" prop="cardStyle" options=${defaultOptions.cardStyle} />
<${Select} options=${defaultOptions.accessibilityLevel} prop="accessibilityLevel" label="Card Accessibility Title Level" />
<${Select} label="Layout" prop="container" options=${defaultOptions.container} />
diff --git a/libs/blocks/caas/utils.js b/libs/blocks/caas/utils.js
index 21e228db2f..6155e2a58a 100644
--- a/libs/blocks/caas/utils.js
+++ b/libs/blocks/caas/utils.js
@@ -595,6 +595,7 @@ export const getConfig = async (originalState, strs = {}) => {
lastModified: strs.lastModified || 'Last modified {date}',
},
detailsTextOption: state.detailsTextOption,
+ hideDateInterval: state.hideDateInterval,
setCardBorders: state.setCardBorders,
showFooterDivider: state.showFooterDivider,
useOverlayLinks: state.useOverlayLinks,
@@ -798,6 +799,7 @@ export const defaultState = {
headers: [],
hideCtaIds: [],
hideCtaTags: [],
+ hideDateInterval: false,
includeTags: [],
language: 'caas:language/en',
layoutType: '4up',
diff --git a/libs/blocks/marketo/marketo.css b/libs/blocks/marketo/marketo.css
index 2110cf9c55..75a37a69d4 100644
--- a/libs/blocks/marketo/marketo.css
+++ b/libs/blocks/marketo/marketo.css
@@ -534,7 +534,7 @@
background-color: #123456
}
-.resource-form .marketo {
+.resource-form.section.two-up .marketo {
margin-left: calc(var(--grid-margins-width) * -1 / 2);
margin-right: calc(var(--grid-margins-width) * -1 / 2);
}
diff --git a/libs/blocks/merch/merch.css b/libs/blocks/merch/merch.css
index e4a89dad3c..907fd8ef61 100644
--- a/libs/blocks/merch/merch.css
+++ b/libs/blocks/merch/merch.css
@@ -15,7 +15,7 @@ span.placeholder-resolved[data-template="strikethrough"], span.price.price-strik
visibility: inherit;
}
-a[is='checkout-link'] > span {
+a[is='checkout-link'].con-button > span {
display: inline-block;
text-align: center;
width: 100%;
diff --git a/libs/features/personalization/personalization.js b/libs/features/personalization/personalization.js
index c214bafa89..5608c19c1c 100644
--- a/libs/features/personalization/personalization.js
+++ b/libs/features/personalization/personalization.js
@@ -111,6 +111,11 @@ export const preloadManifests = ({ targetManifests = [], persManifests = [] }) =
export const getFileName = (path) => path?.split('/').pop();
+const isInLcpSection = (el) => {
+ const lcpSection = document.querySelector('body > main > div');
+ return lcpSection === el || lcpSection?.contains(el);
+};
+
const createFrag = (el, url, manifestId) => {
let href = url;
try {
@@ -126,7 +131,9 @@ const createFrag = (el, url, manifestId) => {
if (isSection) {
frag = createTag('div', undefined, frag);
}
- loadLink(`${localizeLink(a.href)}.plain.html`, { as: 'fetch', crossorigin: 'anonymous', rel: 'preload' });
+ if (isInLcpSection(el)) {
+ loadLink(`${localizeLink(a.href)}.plain.html`, { as: 'fetch', crossorigin: 'anonymous', rel: 'preload' });
+ }
return frag;
};
diff --git a/libs/features/webapp-prompt/webapp-prompt.css b/libs/features/webapp-prompt/webapp-prompt.css
index cd421f6f8a..b9059e2374 100644
--- a/libs/features/webapp-prompt/webapp-prompt.css
+++ b/libs/features/webapp-prompt/webapp-prompt.css
@@ -182,6 +182,10 @@
transform: scaleX(0) translateZ(0);
}
+ [dir = "rtl"] .appPrompt-progress {
+ transform-origin: top right;
+ }
+
@keyframes appPrompt-animate {
100% {
transform: scaleX(1);
diff --git a/libs/utils/utils.js b/libs/utils/utils.js
index 5ccf544815..db9ad8a95b 100644
--- a/libs/utils/utils.js
+++ b/libs/utils/utils.js
@@ -139,6 +139,7 @@ ENVS.local = {
export const MILO_EVENTS = { DEFERRED: 'milo:deferred' };
const LANGSTORE = 'langstore';
+const PREVIEW = 'target-preview';
const PAGE_URL = new URL(window.location.href);
const SLD = PAGE_URL.hostname.includes('.aem.') ? 'aem' : 'hlx';
@@ -168,13 +169,11 @@ export function getLocale(locales, pathname = window.location.pathname) {
}
const split = pathname.split('/');
const localeString = split[1];
- const locale = locales[localeString] || locales[''];
- if (localeString === LANGSTORE) {
+ let locale = locales[localeString] || locales[''];
+ if ([LANGSTORE, PREVIEW].includes(localeString)) {
+ const ietf = Object.keys(locales).find((loc) => locales[loc]?.ietf?.startsWith(split[2]));
+ if (ietf) locale = locales[ietf];
locale.prefix = `/${localeString}/${split[2]}`;
- if (
- Object.values(locales)
- .find((loc) => loc.ietf?.startsWith(split[2]))?.dir === 'rtl'
- ) locale.dir = 'rtl';
return locale;
}
const isUS = locale.ietf === 'en-US';
@@ -299,8 +298,10 @@ export function localizeLink(
const isLocalizable = relative || (prodDomains && prodDomains.includes(url.hostname))
|| overrideDomain;
if (!isLocalizable) return processedHref;
- const isLocalizedLink = path.startsWith(`/${LANGSTORE}`) || Object.keys(locales)
- .some((loc) => loc !== '' && (path.startsWith(`/${loc}/`) || path.endsWith(`/${loc}`)));
+ const isLocalizedLink = path.startsWith(`/${LANGSTORE}`)
+ || path.startsWith(`/${PREVIEW}`)
+ || Object.keys(locales).some((loc) => loc !== '' && (path.startsWith(`/${loc}/`)
+ || path.endsWith(`/${loc}`)));
if (isLocalizedLink) return processedHref;
const urlPath = `${locale.prefix}${path}${url.search}${hash}`;
return relative ? urlPath : `${url.origin}${urlPath}`;
diff --git a/test/blocks/caas-config/caas-config.test.html b/test/blocks/caas-config/caas-config.test.html
index ee7013751a..e0a88d04c0 100644
--- a/test/blocks/caas-config/caas-config.test.html
+++ b/test/blocks/caas-config/caas-config.test.html
@@ -316,8 +316,8 @@
// This does not affect the decoded hash value,
// so either of these are valid hashes for the same content
- const windowsHash = '~~H4sIAAAAAAAACnVVTY/bNhD9Lzw7Wafb9qDb2ruLGPBm3diLHoqgGJMjiTDFUcmhvUrR/16Q+nacm/TecIbz5oP/ClBKsyYL5iv+E9DzDhxUXmR/fVsIsGAa1tKvyRiU0e4LVCgyISbkwYE8baraofearMhyMB6jgdpSoeUBit5fYFpTsOyaLdhisDwSnSpwp40ku8cYqQ0xxd+snzASnNpzY+JdSjD5hxJ1UXLHHDQbfJAyXuiojeZmi2c0Ivt9IeSQyopt76J2ugLXiCk9ZjpiyfE1uNffB8wyaItOZOLTL8vlC7z/qRWXHYWWD02Nox6y1UJkQgL4rPu9Cz4eCJ6pWoNTnW+GhxROZOJvjyYXC6HoC/EWvjdbAjWoqbSHo8EVWIvOj7CDnB+Pwz9aVZO2UdDL5fIRFB3xo6TqTpa6QgcfoNZ3Y5YinjhrR7ZC21UB36UJClW8ZZdSB4055mDMEeTpaQwnFiJH4OBmJ3NtGN3TefDeAqugjdqBjeVLDVQBaznQW5LQqWIw5wleaCkyQW6AZnH8Ouk7g/YlXZ6qmptBoyIwp2r++i4WokRQg5tSK1wzbNT8f0xc2yslDNgiQIF9ufv/O4ziGmgopP6I4UIdIQL1Qg5vNqolvpousqaJKay6qRnU7ZIhd3WghkLbpN6D1VX6GOJAgUpMTZ5sbKqxy0bmjwCWNafY9gbf5dQBqSAj+ebxUGKF9+NBAxJLMgrdmzNtKzj0wbDfodslAX9bCI/gZPms0fQV8CjJKnDNmOEA7Sk4iT3IUZgVOTWdD1/S5ZmI0T3qs1ax7BOmF9U/p165zb3aueLJZd97E2xzZbNPucygA3FcySntkSDHj8D44OUP2CPeAF9I6VxPqpYIzCGYOGSqP9cSbYl3VId6dqDFv4JVVO2hqo2e7O5kEId2T45n6HM34zOwv9F1Cj3+Qxpt2DmEHt2ZtNsRGZF9Wi6XV0S6JYrsvsXb9+DKcQKvwnVNIkq4nLz4thAMhW+78Oc7MtqIaOoK5LijzzquEDFg16PDseHjwopPFvq4tBQyaOMP+M6vdbfPVFenheB41c8IStuie8lEeR+J2CWp5w4Uxy+KsRDB4za6jt6GoMHj6xmdgWar7Wnsqcl7GJjpxqYJHt3G5hSn57//AaZjTZUyCAAA';
- const osxHash = '~~H4sIAAAAAAAAA3VVTY/bNhD9Lzw7Wafb9qDb2ruLGPBm3diLHoqgGJMjiTDFUcmhvUrR/16Q+nacm/TecIbz5oP/ClBKsyYL5iv+E9DzDhxUXmR/fVsIsGAa1tKvyRiU0e4LVCgyISbkwYE8baraofearMhyMB6jgdpSoeUBit5fYFpTsOyaLdhisDwSnSpwp40ku8cYqQ0xxd+snzASnNpzY+JdSjD5hxJ1UXLHHDQbfJAyXuiojeZmi2c0Ivt9IeSQyopt76J2ugLXiCk9ZjpiyfE1uNffB8wyaItOZOLTL8vlC7z/qRWXHYWWD02Nox6y1UJkQgL4rPu9Cz4eCJ6pWoNTnW+GhxROZOJvjyYXC6HoC/EWvjdbAjWoqbSHo8EVWIvOj7CDnB+Pwz9aVZO2UdDL5fIRFB3xo6TqTpa6QgcfoNZ3Y5YinjhrR7ZC21UB36UJClW8ZZdSB4055mDMEeTpaQwnFiJH4OBmJ3NtGN3TefDeAqugjdqBjeVLDVQBaznQW5LQqWIw5wleaCkyQW6AZnH8Ouk7g/YlXZ6qmptBoyIwp2r++i4WokRQg5tSK1wzbNT8f0xc2yslDNgiQIF9ufv/O4ziGmgopP6I4UIdIQL1Qg5vNqolvpousqaJKay6qRnU7ZIhd3WghkLbpN6D1VX6GOJAgUpMTZ5sbKqxy0bmjwCWNafY9gbf5dQBqSAj+ebxUGKF9+NBAxJLMgrdmzNtKzj0wbDfodslAX9bCI/gZPms0fQV8CjJKnDNmOEA7Sk4iT3IUZgVOTWdD1/S5ZmI0T3qs1ax7BOmF9U/p165zb3aueLJZd97E2xzZbNPucygA3FcySntkSDHj8D44OUP2CPeAF9I6VxPqpYIzCGYOGSqP9cSbYl3VId6dqDFv4JVVO2hqo2e7O5kEId2T45n6HM34zOwv9F1Cj3+Qxpt2DmEHt2ZtNsRGZF9Wi6XV0S6JYrsvsXb9+DKcQKvwnVNIkq4nLz4thAMhW+78Oc7MtqIaOoK5LijzzquEDFg16PDseHjwopPFvq4tBQyaOMP+M6vdbfPVFenheB41c8IStuie8lEeR+J2CWp5w4Uxy+KsRDB4za6jt6GoMHj6xmdgWar7Wnsqcl7GJjpxqYJHt3G5hSn57//AaZjTZUyCAAA';
+ const windowsHash = '~~H4sIAAAAAAAACnVVTY/bNhD9Lzw7Wafb9qDb2ruLGPBm3diLHoqgGJMjiTDFUcmhvUrR/16Q+nacm/TecL74ZvivAKU0a7JgvuI/AT3vwEHlRfbXt4UAC6ZhLf2ajEEZ7b5AhSITYkIeHMjTpqodeq/JiiwH4zEaqC0VWh6g6P0FpjUFy67Zgi0GyyPRqQJ32kiye4yR2hBT/M36CSPBqT03JuZSgsk/lKiLkjvmoNngg5QxoaM2mpstntGI7PeFkEMpK7a9i9rpClwjpvRY6Yglx9fgXn8fMMugLTqRiU+/LJcv8P6nVlx2FFo+NDWO/ZBtL0QmJIDPut+74OOB4JmqNTjV+WZ4SOFEJv72aHKxEIq+EG/he7MlUEM3lfZwNLgCa9H5EXaQ8+Nx+EeratI2NvRyuXwERUf8KKm6k6Wu0MEHqPXdWKWIJ87aka3QdreA79IEhSpm2ZXUQWONORhzBHl6GsOJhcgROLjZyVwbRvd0Hry3wCpoo3Zg4/UlAVXAWg70liR0XTGY8wQvtBSZIDdAszh+nfo7g/YlXZ6qmpuhR0VgTrf567tYiBJBDW5KrXDNsFHz/7HwCDwC48YyujOYwam2Vy0yYIsABfY66P/vMHbdQEMhCSfmEeoIEagXcnhTwZb4auzImibWturGaWh7lxC5qwM1FNqmtj5YXaWPIQ4UqMTU5MlGtY3yG5k/AljWnGLbG3xXUwekmxrJN4+HEiu8Hw8akFiSUejenGk14tAHw36Hbpca+NtCeAQny2eNpr8aj5KsAteMFQ7QnoKT2IMcG7Mip6aD40u6PBMxukd91irqYcL0TfXPSUS3uVc773hy2Ytygm2ubPaplhl0II67OpU9EuQ4au3Byx+wR7wBvpDSuZ7cWiIwh2Di9Kn+XEu0V7yjOtSzAy3+Fayiag9VbfRkqSeDOM17cjxDn7vhn4F9Rtcl9PgPZbRh5xB6dGfSbkdkRPZpuVxeESlLFNl9i7cPxZXjBF6F60QiSricvPi2EAyFb1X48+UZbUQ0dQVyXN5nHXeLGLDr0eEo+LjJ4luGPm4zhQza+AO+82vdLTrV3dNCcEz1M4LStuieOFHeRyKqJGnuQHH8YjMWInjcRtfR2xA0eHw9ozPQbLU9jZqaPJSBmW5smuDRbWxOcXr++x/O+0/8SwgAAA==';
+ const osxHash = '~~H4sIAAAAAAAAA3VVTY/bNhD9Lzw7Wafb9qDb2ruLGPBm3diLHoqgGJMjiTDFUcmhvUrR/16Q+nacm/TecL74ZvivAKU0a7JgvuI/AT3vwEHlRfbXt4UAC6ZhLf2ajEEZ7b5AhSITYkIeHMjTpqodeq/JiiwH4zEaqC0VWh6g6P0FpjUFy67Zgi0GyyPRqQJ32kiye4yR2hBT/M36CSPBqT03JuZSgsk/lKiLkjvmoNngg5QxoaM2mpstntGI7PeFkEMpK7a9i9rpClwjpvRY6Yglx9fgXn8fMMugLTqRiU+/LJcv8P6nVlx2FFo+NDWO/ZBtL0QmJIDPut+74OOB4JmqNTjV+WZ4SOFEJv72aHKxEIq+EG/he7MlUEM3lfZwNLgCa9H5EXaQ8+Nx+EeratI2NvRyuXwERUf8KKm6k6Wu0MEHqPXdWKWIJ87aka3QdreA79IEhSpm2ZXUQWONORhzBHl6GsOJhcgROLjZyVwbRvd0Hry3wCpoo3Zg4/UlAVXAWg70liR0XTGY8wQvtBSZIDdAszh+nfo7g/YlXZ6qmpuhR0VgTrf567tYiBJBDW5KrXDNsFHz/7HwCDwC48YyujOYwam2Vy0yYIsABfY66P/vMHbdQEMhCSfmEeoIEagXcnhTwZb4auzImibWturGaWh7lxC5qwM1FNqmtj5YXaWPIQ4UqMTU5MlGtY3yG5k/AljWnGLbG3xXUwekmxrJN4+HEiu8Hw8akFiSUejenGk14tAHw36Hbpca+NtCeAQny2eNpr8aj5KsAteMFQ7QnoKT2IMcG7Mip6aD40u6PBMxukd91irqYcL0TfXPSUS3uVc773hy2Ytygm2ubPaplhl0II67OpU9EuQ4au3Byx+wR7wBvpDSuZ7cWiIwh2Di9Kn+XEu0V7yjOtSzAy3+Fayiag9VbfRkqSeDOM17cjxDn7vhn4F9Rtcl9PgPZbRh5xB6dGfSbkdkRPZpuVxeESlLFNl9i7cPxZXjBF6F60QiSricvPi2EAyFb1X48+UZbUQ0dQVyXN5nHXeLGLDr0eEo+LjJ4luGPm4zhQza+AO+82vdLTrV3dNCcEz1M4LStuieOFHeRyKqJGnuQHH8YjMWInjcRtfR2xA0eHw9ozPQbLU9jZqaPJSBmW5smuDRbWxOcXr++x/O+0/8SwgAAA==';
const hash = copyTextArea.value.split('#')[1].trim();
let isCorrectHash = false;
let osHash = navigator.platform.startsWith('Win') ? windowsHash : osxHash;
diff --git a/test/blocks/caas-config/expectedConfigs/defaultConfig.js b/test/blocks/caas-config/expectedConfigs/defaultConfig.js
index 945bafc774..afaed3b076 100644
--- a/test/blocks/caas-config/expectedConfigs/defaultConfig.js
+++ b/test/blocks/caas-config/expectedConfigs/defaultConfig.js
@@ -8,6 +8,7 @@ const defaultConfig = {
endpoint:
'https://www.adobe.com/chimera-api/collection?originSelection=hawks&contentTypeTags=&secondSource=&secondaryTags=&collectionTags=&excludeContentWithTags=&language=en&country=us&complexQuery=&excludeIds=¤tEntityId=&featuredCards=&environment=&draft=false&size=10',
fallbackEndpoint: '',
+ hideDateInterval: false,
totalCardsToShow: 10,
cardStyle: 'half-height',
cardHoverEffect: 'default',
diff --git a/test/blocks/caas/utils.test.js b/test/blocks/caas/utils.test.js
index abf6267355..04a1b300a0 100644
--- a/test/blocks/caas/utils.test.js
+++ b/test/blocks/caas/utils.test.js
@@ -168,6 +168,7 @@ describe('getConfig', () => {
endpoint:
'https://www.adobe.com/chimera-api/collection/myTargetActivity.json?originSelection=hawks&contentTypeTags=&secondSource=&secondaryTags=&collectionTags=&excludeContentWithTags=&language=en&country=us&complexQuery=((%22caas%3Aproducts%2Findesign%22%2BAND%2B%22caas%3Aproducts%2Freader%22)%2BAND%2B(%22caas%3Acountry%2Fbr%22%2BOR%2B%22caas%3Acountry%2Fca%22))%2BAND%2B((%22caas%3Acontent-type%2Fvideo%22%2BAND%2B%22caas%3Acontent-type%2Fblog%22))&excludeIds=¤tEntityId=&featuredCards=c94ec235-50c2-595e-9fa8-0b4602c08712%2Ce9d71f5e-e7c9-5d6d-89e9-2ffdad17b8bd&environment=&draft=true&size=10&flatFile=false',
fallbackEndpoint: '',
+ hideDateInterval: false,
totalCardsToShow: 10,
cardStyle: 'half-height',
ctaAction: '_self',
@@ -429,6 +430,7 @@ describe('getConfig', () => {
endpoint:
'https://www.adobe.com/chimera-api/collection/myTargetActivity.json?originSelection=hawks&contentTypeTags=&secondSource=&secondaryTags=&collectionTags=&excludeContentWithTags=&language=fr&country=be&complexQuery=((%22caas%3Aproducts%2Findesign%22%2BAND%2B%22caas%3Aproducts%2Freader%22)%2BAND%2B(%22caas%3Acountry%2Fbr%22%2BOR%2B%22caas%3Acountry%2Fca%22))%2BAND%2B((%22caas%3Acontent-type%2Fvideo%22%2BAND%2B%22caas%3Acontent-type%2Fblog%22))&excludeIds=¤tEntityId=&featuredCards=b6aa23a7-f6bf-51f4-a2b6-0a93fc31bd16%2Ce9d71f5e-e7c9-5d6d-89e9-2ffdad17b8bd&environment=&draft=true&size=10&flatFile=false',
fallbackEndpoint: '',
+ hideDateInterval: false,
totalCardsToShow: 10,
cardStyle: 'half-height',
ctaAction: '_self',
@@ -751,6 +753,7 @@ describe('getFloodgateCaasConfig', () => {
endpoint:
'https://www.adobe.com/chimera-api/collection/myTargetActivity.json?originSelection=hawks&contentTypeTags=&secondSource=&secondaryTags=&collectionTags=&excludeContentWithTags=&language=en&country=us&complexQuery=((%22caas%3Aproducts%2Findesign%22%2BAND%2B%22caas%3Aproducts%2Freader%22)%2BAND%2B(%22caas%3Acountry%2Fbr%22%2BOR%2B%22caas%3Acountry%2Fca%22))%2BAND%2B((%22caas%3Acontent-type%2Fvideo%22%2BAND%2B%22caas%3Acontent-type%2Fblog%22))&excludeIds=¤tEntityId=&featuredCards=c94ec235-50c2-595e-9fa8-0b4602c08712%2Ce9d71f5e-e7c9-5d6d-89e9-2ffdad17b8bd&environment=&draft=true&size=10&flatFile=false',
fallbackEndpoint: '',
+ hideDateInterval: false,
totalCardsToShow: 10,
cardStyle: 'half-height',
ctaAction: '_self',
diff --git a/test/features/personalization/actions.test.js b/test/features/personalization/actions.test.js
index d903a0917b..e9bce4b9c0 100644
--- a/test/features/personalization/actions.test.js
+++ b/test/features/personalization/actions.test.js
@@ -263,4 +263,26 @@ describe('custom actions', async () => {
},
});
});
+
+ it('Only fragments in the first section should be preloaded', async () => {
+ document.body.innerHTML = await readFile({ path: './mocks/personalization.html' });
+
+ let manifestJson = await readFile({ path: './mocks/actions/manifestPreloadFrags.json' });
+ manifestJson = JSON.parse(manifestJson);
+ setFetchResponse(manifestJson);
+
+ // This fragment is in the 1st section and should be preloaded
+ const lcpLink = 'link[href^="/test/features/personalization/mocks/fragments/fragmentReplaced"]';
+
+ // This fragment is in the 3rd section and should not be preloaded
+ const notLcpLink = 'link[href^="/test/features/personalization/mocks/fragments/inlineFragReplaced"]';
+
+ expect(document.querySelector(lcpLink)).not.to.exist;
+ expect(document.querySelector(notLcpLink)).not.to.exist;
+
+ await applyPers([{ manifestPath: '/path/to/manifest.json' }]);
+
+ expect(document.querySelector(lcpLink)).to.exist;
+ expect(document.querySelector(notLcpLink)).not.to.exist;
+ });
});
diff --git a/test/features/personalization/mocks/actions/manifestPreloadFrags.json b/test/features/personalization/mocks/actions/manifestPreloadFrags.json
new file mode 100644
index 0000000000..8ee42f1bf8
--- /dev/null
+++ b/test/features/personalization/mocks/actions/manifestPreloadFrags.json
@@ -0,0 +1,28 @@
+{
+ "total": 5,
+ "offset": 0,
+ "limit": 5,
+ "data": [
+ {
+ "action": "replace",
+ "selector": ".custom-block",
+ "page filter (optional)": "",
+ "param-newoffer=123": "",
+ "chrome": "/test/features/personalization/mocks/fragments/fragmentReplaced",
+ "firefox": "",
+ "android": "",
+ "ios": ""
+ },
+ {
+ "action": "replace",
+ "selector": ".how-to",
+ "page filter (optional)": "",
+ "param-newoffer=123": "",
+ "chrome": "/test/features/personalization/mocks/fragments/inlineFragReplaced",
+ "firefox": "",
+ "android": "",
+ "ios": ""
+ }
+ ],
+ ":type": "sheet"
+}