import React from "react";
import { combineReducers, createStore } from "redux";
import { Provider } from "react-redux";
import { mount } from "enzyme";
import { INITIAL_STATE, reducers } from "common/Reducers.sys.mjs";
import { TopSitesHoverCard } from "content-src/components/TopSitesHoverCard/TopSitesHoverCard";
const ORIGIN = "https://example.com";
const NOTIFICATIONS = {
a: { id: "a", title: "A", origin: ORIGIN, persistent: true, timestamp: 1 },
};
const BY_ORIGIN = { [ORIGIN]: ["a"] };
function mockState(enabled, { gate = true } = {}) {
return {
...INITIAL_STATE,
Prefs: {
...INITIAL_STATE.Prefs,
values: {
...INITIAL_STATE.Prefs.values,
"system.showWebNotifications": gate,
showWebNotifications: enabled,
},
},
WebNotifications: {
...INITIAL_STATE.WebNotifications,
notifications: NOTIFICATIONS,
byOrigin: BY_ORIGIN,
},
};
}
function render(link, enabled, opts) {
const store = createStore(
combineReducers(reducers),
mockState(enabled, opts)
);
return mount(
);
}
describe("", () => {
const link = { url: `${ORIGIN}/path`, label: "Example" };
it("renders nothing when the user pref is off", () => {
const wrapper = render(link, false);
assert.lengthOf(wrapper.find(".top-sites-hover-card"), 0);
});
it("renders nothing when the feature gate is off", () => {
const wrapper = render(link, true, { gate: false });
assert.lengthOf(wrapper.find(".top-sites-hover-card"), 0);
});
it("routes an ordinary tile to the notifications card", () => {
const wrapper = render(link, true);
assert.lengthOf(wrapper.find(".top-sites-hover-card"), 1);
});
it("routes a sponsored tile to the ad variant (no notifications card)", () => {
const wrapper = render(
{ url: `${ORIGIN}/path`, label: "Ad", sponsored_tile_id: 42 },
true
);
assert.lengthOf(wrapper.find(".top-sites-hover-card"), 0);
});
});