You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.9 KiB
68 lines
1.9 KiB
import { act, renderHook } from "@testing-library/react";
|
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
import { usePinnedItems } from "./usePinnedItems.ts";
|
|
|
|
const mockSetPinnedItems = vi.fn();
|
|
const mockUseLocalStorage = vi.fn();
|
|
|
|
vi.mock("@core/hooks/useLocalStorage.ts", () => ({
|
|
default: (...args: any[]) => mockUseLocalStorage(...args),
|
|
}));
|
|
|
|
describe("usePinnedItems", () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it("returns default pinnedItems and togglePinnedItem", () => {
|
|
mockUseLocalStorage.mockReturnValue([[], mockSetPinnedItems]);
|
|
|
|
const { result } = renderHook(() =>
|
|
usePinnedItems({ storageName: "test-storage" })
|
|
);
|
|
|
|
expect(result.current.pinnedItems).toEqual([]);
|
|
expect(typeof result.current.togglePinnedItem).toBe("function");
|
|
});
|
|
|
|
it("adds an item if it's not already pinned", () => {
|
|
mockUseLocalStorage.mockReturnValue([["item1"], mockSetPinnedItems]);
|
|
|
|
const { result } = renderHook(() =>
|
|
usePinnedItems({ storageName: "test-storage" })
|
|
);
|
|
|
|
act(() => {
|
|
result.current.togglePinnedItem("item2");
|
|
});
|
|
|
|
expect(mockSetPinnedItems).toHaveBeenCalledWith(expect.any(Function));
|
|
|
|
const updater = mockSetPinnedItems.mock.calls[0][0];
|
|
const updated = updater(["item1"]);
|
|
|
|
expect(updated).toEqual(["item1", "item2"]);
|
|
});
|
|
|
|
it("removes an item if it's already pinned", () => {
|
|
mockUseLocalStorage.mockReturnValue([
|
|
["item1", "item2"],
|
|
mockSetPinnedItems,
|
|
]);
|
|
|
|
const { result } = renderHook(() =>
|
|
usePinnedItems({ storageName: "test-storage" })
|
|
);
|
|
|
|
act(() => {
|
|
result.current.togglePinnedItem("item1");
|
|
});
|
|
|
|
expect(mockSetPinnedItems).toHaveBeenCalledWith(expect.any(Function));
|
|
|
|
const updater = mockSetPinnedItems.mock.calls[0][0];
|
|
const updated = updater(["item1", "item2"]);
|
|
|
|
expect(updated).toEqual(["item2"]);
|
|
});
|
|
});
|
|
|