Barazo default frontend barazo.forum
at main 45 lines 1.6 kB view raw
1import { describe, it, expect, vi, beforeEach } from 'vitest' 2import { renderHook } from '@testing-library/react' 3import { useThreadIndent } from './use-thread-indent' 4 5vi.mock('./use-media-query', () => ({ 6 useMediaQuery: vi.fn(), 7})) 8 9import { useMediaQuery } from './use-media-query' 10const mockUseMediaQuery = vi.mocked(useMediaQuery) 11 12describe('useThreadIndent', () => { 13 beforeEach(() => { 14 mockUseMediaQuery.mockReset() 15 }) 16 17 it('returns desktop indent step for wide viewports', () => { 18 mockUseMediaQuery.mockImplementation((q: string) => { 19 if (q === '(min-width: 768px)') return true 20 if (q === '(min-width: 481px)') return true 21 return false 22 }) 23 const { result } = renderHook(() => useThreadIndent()) 24 expect(result.current.indentStep).toBe(22) 25 expect(result.current.showChevron).toBe(true) 26 }) 27 28 it('returns tablet indent step for medium viewports', () => { 29 mockUseMediaQuery.mockImplementation((q: string) => { 30 if (q === '(min-width: 768px)') return false 31 if (q === '(min-width: 481px)') return true 32 return false 33 }) 34 const { result } = renderHook(() => useThreadIndent()) 35 expect(result.current.indentStep).toBe(16) 36 expect(result.current.showChevron).toBe(true) 37 }) 38 39 it('returns mobile indent step and hides chevron for narrow viewports', () => { 40 mockUseMediaQuery.mockImplementation(() => false) 41 const { result } = renderHook(() => useThreadIndent()) 42 expect(result.current.indentStep).toBe(8) 43 expect(result.current.showChevron).toBe(false) 44 }) 45})