import { actionCreators as ac, actionTypes as at } from "common/Actions.mjs"; import { DiscoveryStreamAdminInner, CollapseToggle, DiscoveryStreamAdminUI, Personalization, ToggleStoryButton, } from "content-src/components/DiscoveryStreamAdmin/DiscoveryStreamAdmin"; import React from "react"; import { shallow } from "enzyme"; describe("DiscoveryStreamAdmin", () => { let sandbox; let wrapper; beforeEach(() => { sandbox = sinon.createSandbox(); wrapper = shallow( ); }); afterEach(() => { sandbox.restore(); }); it("should render DiscoveryStreamAdmin component", () => { assert.ok(wrapper.exists()); }); it("should set a .collapsed class on the outer div if props.collapsed is true", () => { wrapper.setProps({ collapsed: true }); assert.isTrue(wrapper.find(".discoverystream-admin").hasClass("collapsed")); }); it("should set a .expanded class on the outer div if props.collapsed is false", () => { wrapper.setProps({ collapsed: false }); assert.isTrue(wrapper.find(".discoverystream-admin").hasClass("expanded")); assert.isFalse( wrapper.find(".discoverystream-admin").hasClass("collapsed") ); }); it("should render a DS section", () => { assert.equal(wrapper.find("h1").at(0).text(), "Discovery Stream Admin"); }); describe("#DiscoveryStream", () => { let state = {}; let dispatch; beforeEach(() => { dispatch = sandbox.stub(); state = { config: { enabled: true, }, layout: [], spocs: { frequency_caps: [], }, feeds: { data: {}, }, blocks: {}, impressions: { feed: {}, }, }; wrapper = shallow( ); }); it("should render a DiscoveryStreamAdminUI component", () => { assert.equal(wrapper.find("h3").at(0).text(), "Layout"); }); it("should render a spoc in DiscoveryStreamAdminUI component", () => { state.spocs = { frequency_caps: [], data: { newtab_spocs: { items: [ { id: 12345, }, ], }, }, }; wrapper = shallow( ); wrapper.instance().onStoryToggle({ id: 12345 }); const messageSummary = wrapper.find(".message-summary").at(0); const pre = messageSummary.find("pre").at(0); const spocText = pre.text(); assert.equal(spocText, '{\n "id": 12345\n}'); }); it("should fire restorePrefDefaults with DISCOVERY_STREAM_CONFIG_RESET_DEFAULTS", () => { wrapper.find("button").at(0).simulate("click"); assert.calledWith( dispatch, ac.OnlyToMain({ type: at.DISCOVERY_STREAM_CONFIG_RESET_DEFAULTS, }) ); }); it("should fire config change with DISCOVERY_STREAM_CONFIG_CHANGE", () => { wrapper.find("button").at(1).simulate("click"); assert.calledWith( dispatch, ac.OnlyToMain({ type: at.DISCOVERY_STREAM_CONFIG_CHANGE, data: { enabled: true }, }) ); }); it("should fire expireCache with DISCOVERY_STREAM_DEV_EXPIRE_CACHE", () => { wrapper.find("button").at(2).simulate("click"); assert.calledWith( dispatch, ac.OnlyToMain({ type: at.DISCOVERY_STREAM_DEV_EXPIRE_CACHE, }) ); }); it("should fire systemTick with DISCOVERY_STREAM_DEV_SYSTEM_TICK", () => { wrapper.find("button").at(3).simulate("click"); assert.calledWith( dispatch, ac.OnlyToMain({ type: at.DISCOVERY_STREAM_DEV_SYSTEM_TICK, }) ); }); it("should fire idleDaily with DISCOVERY_STREAM_DEV_IDLE_DAILY", () => { wrapper.find("button").at(4).simulate("click"); assert.calledWith( dispatch, ac.OnlyToMain({ type: at.DISCOVERY_STREAM_DEV_IDLE_DAILY, }) ); }); it("should fire syncRemoteSettings with DISCOVERY_STREAM_DEV_SYNC_RS", () => { wrapper.find("button").at(6).simulate("click"); assert.calledWith( dispatch, ac.OnlyToMain({ type: at.DISCOVERY_STREAM_DEV_SYNC_RS, }) ); }); it("should fire setConfigValue with DISCOVERY_STREAM_CONFIG_SET_VALUE", () => { const configName = "name"; const configValue = "value"; wrapper.instance().setConfigValue(configName, configValue); assert.calledWith( dispatch, ac.OnlyToMain({ type: at.DISCOVERY_STREAM_CONFIG_SET_VALUE, data: { name: configName, value: configValue }, }) ); }); }); describe("#Personalization", () => { let dispatch; beforeEach(() => { dispatch = sandbox.stub(); wrapper = shallow( ); }); it("should render with pref checkbox, lastUpdated, and initialized", () => { assert.lengthOf(wrapper.find("TogglePrefCheckbox"), 1); assert.equal( wrapper.find("td").at(1).text(), "Personalization Last Updated" ); assert.equal( wrapper.find("td").at(2).text(), new Date(1000).toLocaleString() ); assert.equal( wrapper.find("td").at(3).text(), "Personalization Initialized" ); assert.equal(wrapper.find("td").at(4).text(), "true"); }); it("should render with no data with no last updated", () => { wrapper = shallow( ); assert.equal(wrapper.find("td").at(2).text(), "(no data)"); }); it("should dispatch DISCOVERY_STREAM_PERSONALIZATION_TOGGLE", () => { wrapper.instance().togglePersonalization(); assert.calledWith( dispatch, ac.OnlyToMain({ type: at.DISCOVERY_STREAM_PERSONALIZATION_TOGGLE, }) ); }); }); describe("#ToggleStoryButton", () => { it("should fire onClick in toggle button", async () => { let result = ""; function onClick(spoc) { result = spoc; } wrapper = shallow(); wrapper.find("button").simulate("click"); assert.equal(result, "spoc"); }); }); }); describe("CollapseToggle", () => { let wrapper; beforeEach(() => { wrapper = shallow(); }); describe("rendering inner content", () => { it("should not render DiscoveryStreamAdminInner for about:newtab (no hash)", () => { wrapper.setProps({ location: { hash: "", routes: [""] } }); assert.lengthOf(wrapper.find(DiscoveryStreamAdminInner), 0); }); it("should render DiscoveryStreamAdminInner for about:newtab#devtools and subroutes", () => { wrapper.setProps({ location: { hash: "#devtools", routes: [""] } }); assert.lengthOf(wrapper.find(DiscoveryStreamAdminInner), 1); wrapper.setProps({ location: { hash: "#devtools-foo", routes: [""] } }); assert.lengthOf(wrapper.find(DiscoveryStreamAdminInner), 1); }); }); });