79 lines
1.8 KiB
TypeScript
79 lines
1.8 KiB
TypeScript
import { getTheme, IThemeProps, setScheme, setTheme } from "../../lib/useTheme";
|
|
|
|
const props: IThemeProps = {
|
|
label: "Classic",
|
|
value: 0,
|
|
mainColor: "#000000",
|
|
accentColor: "#1e272e",
|
|
backgroundColor: "#ffffff",
|
|
};
|
|
|
|
const location: Location = window.location;
|
|
const setup = () => {
|
|
Object.defineProperty(window, "localStorage", {
|
|
value: {
|
|
getItem: jest.fn(() => JSON.stringify(props)),
|
|
setItem: jest.fn(() => null),
|
|
},
|
|
writable: true,
|
|
});
|
|
|
|
// @ts-ignore
|
|
delete window.location;
|
|
|
|
Object.defineProperty(window, "location", {
|
|
configurable: true,
|
|
value: {
|
|
...window.location,
|
|
reload: jest.fn(),
|
|
},
|
|
});
|
|
};
|
|
|
|
describe("theme.tsx", () => {
|
|
it("Tests setScheme", () => {
|
|
setup();
|
|
|
|
let value = "dark";
|
|
|
|
setScheme(value);
|
|
expect(window.localStorage.setItem).toHaveBeenCalledTimes(1);
|
|
expect(window.localStorage.setItem).toHaveBeenCalledWith("theme", value);
|
|
});
|
|
|
|
it("setTheme light test", () => {
|
|
setup();
|
|
|
|
setTheme("light", props);
|
|
expect(window.localStorage.setItem).toHaveBeenCalledTimes(2);
|
|
expect(window.localStorage.setItem).toHaveBeenCalledWith(
|
|
"light-theme",
|
|
JSON.stringify(props),
|
|
);
|
|
expect(window.location.reload).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("setTheme dark test", () => {
|
|
setup();
|
|
|
|
setTheme("dark", props);
|
|
expect(window.localStorage.setItem).toHaveBeenCalledTimes(2);
|
|
expect(window.localStorage.setItem).toHaveBeenCalledWith(
|
|
"dark-theme",
|
|
JSON.stringify(props),
|
|
);
|
|
expect(window.location.reload).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it("Tests getTheme", () => {
|
|
setup();
|
|
|
|
let themeTest = getTheme();
|
|
expect(themeTest).toEqual(props);
|
|
});
|
|
|
|
it("Tests getTheme with empty parameters", () => {
|
|
localStorage.setItem("theme", "");
|
|
expect(getTheme()).toEqual({});
|
|
});
|
|
});
|