Files
PinchChat/src/hooks/__tests__/useSendShortcut.test.ts

59 lines
1.8 KiB
TypeScript

/**
* @vitest-environment jsdom
*/
import { describe, it, expect, beforeEach } from 'vitest';
import { renderHook, act } from '@testing-library/react';
import { useSendShortcut } from '../useSendShortcut';
const STORAGE_KEY = 'pinchchat-send-on-enter';
describe('useSendShortcut', () => {
beforeEach(() => {
localStorage.clear();
});
it('defaults to true when no stored preference', () => {
const { result } = renderHook(() => useSendShortcut());
expect(result.current.sendOnEnter).toBe(true);
});
it('reads stored "true" preference', () => {
localStorage.setItem(STORAGE_KEY, 'true');
const { result } = renderHook(() => useSendShortcut());
expect(result.current.sendOnEnter).toBe(true);
});
it('reads stored "false" preference', () => {
localStorage.setItem(STORAGE_KEY, 'false');
const { result } = renderHook(() => useSendShortcut());
expect(result.current.sendOnEnter).toBe(false);
});
it('toggles from true to false and persists', () => {
const { result } = renderHook(() => useSendShortcut());
expect(result.current.sendOnEnter).toBe(true);
act(() => result.current.toggle());
expect(result.current.sendOnEnter).toBe(false);
expect(localStorage.getItem(STORAGE_KEY)).toBe('false');
});
it('toggles from false to true and persists', () => {
localStorage.setItem(STORAGE_KEY, 'false');
const { result } = renderHook(() => useSendShortcut());
act(() => result.current.toggle());
expect(result.current.sendOnEnter).toBe(true);
expect(localStorage.getItem(STORAGE_KEY)).toBe('true');
});
it('toggle is stable across renders', () => {
const { result, rerender } = renderHook(() => useSendShortcut());
const firstToggle = result.current.toggle;
rerender();
expect(result.current.toggle).toBe(firstToggle);
});
});