Source code
Revision control
Copy as Markdown
Other Tools
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
import {
OMC_HIGHLIGHT_REGISTRY,
SHELLS,
DISMISS_MODES,
getRegistryEntry,
resolveText,
resolveImage,
} from "content-src/components/DiscoveryStreamComponents/FeatureHighlight/OMCHighlightRegistry.mjs";
import { SLOTS } from "content-src/components/DiscoveryStreamComponents/FeatureHighlight/OMCHighlightSlots.mjs";
describe("OMCHighlightRegistry", () => {
describe("getRegistryEntry", () => {
it("returns the entry for a known messageType", () => {
const entry = getRegistryEntry("WorldCupWidgetsCallout");
expect(entry).toBeTruthy();
expect(entry.slot).toBe(SLOTS.WIDGETS_ROW);
expect(entry.shell).toBe(SHELLS.POPOVER);
});
it("returns null for unknown messageType", () => {
expect(getRegistryEntry("NonexistentType")).toBeNull();
});
it("returns null when messageType is falsy", () => {
expect(getRegistryEntry(undefined)).toBeNull();
expect(getRegistryEntry(null)).toBeNull();
expect(getRegistryEntry("")).toBeNull();
});
});
describe("resolveText override chain", () => {
const args = {
rawKey: "cardTitle",
l10nKey: "title",
defaultL10nId: "default-title-id",
};
it("prefers raw string from content", () => {
const result = resolveText({
...args,
content: { cardTitle: "Raw Override", title: "custom-id" },
});
expect(result).toEqual({ raw: "Raw Override" });
});
it("falls back to custom l10n id when raw is absent", () => {
const result = resolveText({
...args,
content: { title: "custom-id" },
});
expect(result).toEqual({ l10nId: "custom-id" });
});
it("falls back to default l10n id when neither override is present", () => {
const result = resolveText({ ...args, content: {} });
expect(result).toEqual({ l10nId: "default-title-id" });
});
it("returns null when no default and no overrides", () => {
const result = resolveText({
rawKey: "cardTitle",
l10nKey: "title",
defaultL10nId: undefined,
content: {},
});
expect(result).toBeNull();
});
it("treats missing content the same as empty content", () => {
const result = resolveText({ ...args, content: undefined });
expect(result).toEqual({ l10nId: "default-title-id" });
});
});
describe("resolveImage override chain", () => {
const defaults = { src: "default.png" };
it("returns null when content.hideImage is truthy", () => {
expect(
resolveImage({ content: { hideImage: true }, defaults })
).toBeNull();
});
it("returns the override when content.imageURL is present", () => {
const result = resolveImage({
content: { imageURL: "override.png" },
defaults,
});
expect(result).toEqual({ src: "override.png" });
});
it("falls back to registry defaults when no override", () => {
expect(resolveImage({ content: {}, defaults })).toEqual(defaults);
});
it("returns null when neither overrides nor defaults are present", () => {
expect(resolveImage({ content: {}, defaults: undefined })).toBeNull();
});
it("supports srcLight/srcDark default", () => {
const result = resolveImage({
content: {},
defaults: { srcLight: "light.png", srcDark: "dark.png" },
});
expect(result).toEqual({ srcLight: "light.png", srcDark: "dark.png" });
});
});
describe("World Cup widgets popover entry", () => {
it("references the agreed-upon shared l10n ids", () => {
const entry = OMC_HIGHLIGHT_REGISTRY.WorldCupWidgetsCallout;
expect(entry.body.title.l10nId).toBe(
"newtab-sports-widget-message-day-in-play-title"
);
expect(entry.body.subtitle.l10nId).toBe(
"newtab-sports-widget-message-day-in-play-body"
);
});
it("uses BLOCK dismiss mode", () => {
const entry = OMC_HIGHLIGHT_REGISTRY.WorldCupWidgetsCallout;
expect(entry.dismiss).toBe(DISMISS_MODES.BLOCK);
});
});
describe("Non-World-Cup widgets popover entry", () => {
it("references the focus-and-forecasts l10n ids", () => {
const entry = OMC_HIGHLIGHT_REGISTRY.WidgetsCallout;
expect(entry.body.title.l10nId).toBe(
"newtab-widget-message-focus-forecasts-title"
);
expect(entry.body.subtitle.l10nId).toBe(
"newtab-widget-message-focus-forecasts-body"
);
});
it("uses BLOCK dismiss mode", () => {
const entry = OMC_HIGHLIGHT_REGISTRY.WidgetsCallout;
expect(entry.dismiss).toBe(DISMISS_MODES.BLOCK);
});
it("shares the widgets-callout className with the World Cup popover", () => {
const wc = OMC_HIGHLIGHT_REGISTRY.WorldCupWidgetsCallout;
const nonWc = OMC_HIGHLIGHT_REGISTRY.WidgetsCallout;
expect(nonWc.chrome.modalClassName).toBe(wc.chrome.modalClassName);
});
});
});