Skip to content

Commit

Permalink
Update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mayank1513 committed Jun 13, 2024
1 parent 27683ba commit a97d162
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 7 deletions.
13 changes: 10 additions & 3 deletions lib/src/client/core/core.test.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { act, cleanup, fireEvent, render, renderHook } from "@testing-library/react";
import { afterEach, beforeEach, describe, test } from "vitest";
import { ServerTarget } from "../../server";
import { Core } from "./core";
import { useMode } from "../../hooks";
import { COOKIE_KEY, DARK, LIGHT, SYSTEM } from "../../constants";
import { COOKIE_KEY, DARK, LIGHT, MEDIA } from "../../constants";

describe("theme-switcher", () => {
afterEach(cleanup);
Expand Down Expand Up @@ -35,5 +34,13 @@ describe("theme-switcher", () => {
expect(hook.result.current.mode).toBe(DARK);
});

test.todo("test media change event -- not supported by fireEvent");
test("test media change event", async ({ expect }) => {
const hook = renderHook(() => useMode());
await act(() => {
// globalThis.window.media = LIGHT as ResolvedScheme;
// @ts-expect-error -- ok
matchMedia(MEDIA).onchange?.();
});
expect(hook.result.current.mode).toBe(DARK);
});
});
3 changes: 2 additions & 1 deletion lib/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ const DEFAULT_STORE_VAL: Store = {
export const useStore = () =>
useRGS<Store>("ndm", () =>
typeof localStorage === "undefined"
? DEFAULT_STORE_VAL
? /* v8 ignore next */
DEFAULT_STORE_VAL
: {
m: (localStorage.getItem(COOKIE_KEY) ?? SYSTEM) as ColorSchemePreference,
s: (matchMedia(MEDIA).matches ? DARK : LIGHT) as ResolvedScheme,
Expand Down
10 changes: 7 additions & 3 deletions lib/vitest.setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,13 @@ Object.defineProperty(window, "matchMedia", {
value: vi.fn().mockImplementation((query: string) => ({
matches: query.includes(window.media),
media: query,
onchange: () => mediaListeners.forEach(listener => listener()),
addEventListener: (listener: () => void) => mediaListeners.push(listener),
removeEventListener: vi.fn(),
onchange() {
this.matches = query.includes(window.media);
mediaListeners.forEach(listener => listener());
},
addEventListener: (_: string, listener: () => void) => mediaListeners.push(listener),
removeEventListener: (_: string, listener: () => void) =>
mediaListeners.splice(mediaListeners.indexOf(listener), 1),
dispatchEvent: vi.fn(),
})),
});
Expand Down

0 comments on commit a97d162

Please sign in to comment.