test: add unit tests for useSendShortcut hook and @testing-library/react
This commit is contained in:
58
src/hooks/__tests__/useSendShortcut.test.ts
Normal file
58
src/hooks/__tests__/useSendShortcut.test.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
/**
|
||||
* @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);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user