mirror of
https://github.com/sp-tarkov/db-website.git
synced 2025-02-08 08:10:47 -05:00
169 lines
4.8 KiB
TypeScript
169 lines
4.8 KiB
TypeScript
|
import { useThemeStore } from "@src/store/theme";
|
||
|
|
||
|
describe("Dark Mode Toggle", () => {
|
||
|
beforeEach(() => {
|
||
|
cy.window()
|
||
|
.its("sessionStorage")
|
||
|
.invoke("removeItem", "locales");
|
||
|
|
||
|
cy.intercept("**/api/locales", { middleware: true }, (req) => {
|
||
|
req.on("before:response", (res) => {
|
||
|
// force all API responses to not be cached
|
||
|
res.headers["cache-control"] = "no-store";
|
||
|
});
|
||
|
}).as("getLocaleList");
|
||
|
|
||
|
cy.intercept("GET", "**/api/locales", { body: [] }).as("getLocaleListWithoutData");
|
||
|
});
|
||
|
|
||
|
afterEach(() => {
|
||
|
cy.clearLocalStorage();
|
||
|
});
|
||
|
|
||
|
describe("Theme Initializer", () => {
|
||
|
describe("when local storage is not set", () => {
|
||
|
it("should match dark theme when prefers-color-scheme is dark", () => {
|
||
|
cy.visit("/", {
|
||
|
onBeforeLoad: (window) => {
|
||
|
window.localStorage.removeItem("theme");
|
||
|
cy.stub(window, "matchMedia")
|
||
|
.withArgs("(prefers-color-scheme: dark)")
|
||
|
.returns({
|
||
|
matches: true,
|
||
|
addListener: () => {},
|
||
|
removeListener: () => {}
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
cy.get("#themeToggleContainer")
|
||
|
.should("be.visible")
|
||
|
.should("have.text", "dark mode");
|
||
|
|
||
|
cy.get("[data-testid=\"Brightness7Icon\"]")
|
||
|
.should("be.visible");
|
||
|
});
|
||
|
|
||
|
it("should match light theme when prefers-color-scheme is light", () => {
|
||
|
cy.visit("/", {
|
||
|
onBeforeLoad: (window) => {
|
||
|
window.localStorage.removeItem("theme");
|
||
|
cy.stub(window, "matchMedia")
|
||
|
.withArgs("(prefers-color-scheme: dark)")
|
||
|
.returns({
|
||
|
matches: false,
|
||
|
addListener: () => {},
|
||
|
removeListener: () => {}
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
cy.get("#themeToggleContainer")
|
||
|
.should("be.visible")
|
||
|
.should("have.text", "light mode");
|
||
|
|
||
|
cy.get("[data-testid=\"Brightness4Icon\"]")
|
||
|
.should("be.visible");
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("when local storage is set", () => {
|
||
|
it("should match dark if theme is set to dark", () => {
|
||
|
cy.visit("/", {
|
||
|
onBeforeLoad: () => {
|
||
|
useThemeStore.getState().setCheckedPreferredColorScheme();
|
||
|
useThemeStore.getState().setThemeMode("dark");
|
||
|
}
|
||
|
});
|
||
|
|
||
|
cy.get("#themeToggleContainer")
|
||
|
.should("be.visible")
|
||
|
.should("have.text", "dark mode");
|
||
|
|
||
|
cy.get("[data-testid=\"Brightness7Icon\"]")
|
||
|
.should("be.visible");
|
||
|
});
|
||
|
|
||
|
it("should match light if theme is set to light", () => {
|
||
|
cy.visit("/", {
|
||
|
onBeforeLoad: () => {
|
||
|
useThemeStore.getState().setCheckedPreferredColorScheme();
|
||
|
useThemeStore.getState().setThemeMode("light");
|
||
|
}
|
||
|
});
|
||
|
|
||
|
cy.get("#themeToggleContainer")
|
||
|
.should("be.visible")
|
||
|
.should("have.text", "light mode");
|
||
|
|
||
|
cy.get("[data-testid=\"Brightness4Icon\"]")
|
||
|
.should("be.visible");
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("Theme Toggle", () => {
|
||
|
describe("toggle from dark to light", () => {
|
||
|
beforeEach(() => {
|
||
|
cy.visit("/", {
|
||
|
onBeforeLoad: () => {
|
||
|
useThemeStore.getState().setCheckedPreferredColorScheme();
|
||
|
useThemeStore.getState().setThemeMode("dark");
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it("should be visible and functional", () => {
|
||
|
cy.get("#themeToggleContainer")
|
||
|
.should("be.visible")
|
||
|
.should("have.text", "dark mode");
|
||
|
|
||
|
cy.get("[data-testid=\"Brightness7Icon\"]")
|
||
|
.should("be.visible");
|
||
|
|
||
|
cy.get("#modeToggleButton")
|
||
|
.should("be.visible")
|
||
|
.click({ force: true });
|
||
|
|
||
|
cy.get("#themeToggleContainer")
|
||
|
.should("be.visible")
|
||
|
.should("have.text", "light mode");
|
||
|
|
||
|
cy.get("[data-testid=\"Brightness4Icon\"]")
|
||
|
.should("be.visible");
|
||
|
});
|
||
|
});
|
||
|
|
||
|
describe("toggle from light to dark", () => {
|
||
|
beforeEach(() => {
|
||
|
cy.visit("/", {
|
||
|
onBeforeLoad: () => {
|
||
|
useThemeStore.getState().setCheckedPreferredColorScheme();
|
||
|
useThemeStore.getState().setThemeMode("light");
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
|
||
|
it("should be visible and functional", () => {
|
||
|
cy.get("#themeToggleContainer")
|
||
|
.should("be.visible")
|
||
|
.should("have.text", "light mode");
|
||
|
|
||
|
cy.get("[data-testid=\"Brightness4Icon\"]")
|
||
|
.should("be.visible");
|
||
|
|
||
|
cy.get("#modeToggleButton")
|
||
|
.should("be.visible")
|
||
|
.click({ force: true });
|
||
|
|
||
|
cy.get("#themeToggleContainer")
|
||
|
.should("be.visible")
|
||
|
.should("have.text", "dark mode");
|
||
|
|
||
|
cy.get("[data-testid=\"Brightness7Icon\"]")
|
||
|
.should("be.visible");
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
});
|