/* 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, You can obtain one at https://mozilla.org/MPL/2.0/. */
import { render, screen } from "@testing-library/react";
import { Provider } from "react-redux";
import { combineReducers, createStore } from "redux";
import { INITIAL_STATE, reducers } from "common/Reducers.sys.mjs";
import { WidgetsSidebar } from "content-src/components/Widgets/WidgetsSidebar";
jest.mock("content-src/components/Widgets/Weather/Weather", () => ({
Weather: () =>
,
}));
function makeState(prefs = {}) {
return {
...INITIAL_STATE,
Prefs: {
...INITIAL_STATE.Prefs,
values: { ...INITIAL_STATE.Prefs.values, ...prefs },
},
};
}
function renderSidebar(state = INITIAL_STATE) {
const store = createStore(combineReducers(reducers), state);
return render(
{}} />
);
}
const SIDEBAR_PREFS = {
"widgets.enabled": true,
"widgets.weather.enabled": true,
"widgets.weather.size": "small",
"widgets.system.weather.enabled": true,
showWeather: true,
};
describe("WidgetsSidebar", () => {
it("renders nothing when no sidebar widgets are active", () => {
expect(screen.queryByTestId("weather-widget")).toBeNull();
});
it("renders the weather widget when enabled, at small size, with system pref set", () => {
renderSidebar(makeState(SIDEBAR_PREFS));
expect(screen.getByTestId("weather-widget")).toBeTruthy();
});
it("does not render when size is not small", () => {
renderSidebar(
makeState({ ...SIDEBAR_PREFS, "widgets.weather.size": "medium" })
);
expect(screen.queryByTestId("weather-widget")).toBeNull();
});
it("does not render when the user pref is disabled", () => {
renderSidebar(
makeState({ ...SIDEBAR_PREFS, "widgets.weather.enabled": false })
);
expect(screen.queryByTestId("weather-widget")).toBeNull();
});
it("does not render when showWeather is false", () => {
renderSidebar(makeState({ ...SIDEBAR_PREFS, showWeather: false }));
expect(screen.queryByTestId("weather-widget")).toBeNull();
});
it("does not render when system weather pref is not set", () => {
renderSidebar(
makeState({ ...SIDEBAR_PREFS, "widgets.system.weather.enabled": false })
);
expect(screen.queryByTestId("weather-widget")).toBeNull();
});
it("renders when trainhop weather config is enabled instead of system pref", () => {
renderSidebar(
makeState({
...SIDEBAR_PREFS,
"widgets.system.weather.enabled": false,
trainhopConfig: { widgets: { weatherEnabled: true } },
})
);
expect(screen.getByTestId("weather-widget")).toBeTruthy();
});
it("does not render in sidebar when trainhop overrides hasSidebar to false (widget moves to row)", () => {
renderSidebar(
makeState({
...SIDEBAR_PREFS,
trainhopConfig: { widgets: { weatherSidebar: false } },
})
);
expect(screen.queryByTestId("weather-widget")).toBeNull();
});
});