0
0
mirror of https://github.com/sp-tarkov/db-website.git synced 2025-02-08 05:10:46 -05:00
db-website/frontend/cypress/e2e/dark-mode-toggle.cy.ts
TheSparta d19412a794 frontend update and rewrite
- Updated to React 18
- Switched from CRA to vite
- reworked some components
- reworked most stores
2024-04-07 22:18:55 +01:00

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");
});
});
});
});