test: add unit tests for useSendShortcut hook and @testing-library/react

This commit is contained in:
Nicolas Varrot
2026-02-21 21:03:55 +00:00
parent a9da9407d4
commit 3c51e46cbb
3 changed files with 264 additions and 2 deletions

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