🏡 index : quine-global/quintodrome.git

import { renderHook } from '@testing-library/react-hooks'
import { describe, it, expect, beforeEach, vi } from 'vitest'
import { useDateLocale } from './useDateLocale'

vi.mock('react-admin', () => ({
  useLocale: vi.fn(),
}))

describe('useDateLocale', () => {
  beforeEach(() => {
    vi.clearAllMocks()
    localStorage.removeItem('dateFormat')
  })

  const renderWith = async (locale, browserLocales) => {
    const { useLocale } = await import('react-admin')
    vi.mocked(useLocale).mockReturnValue(locale)
    vi.spyOn(navigator, 'languages', 'get').mockReturnValue(browserLocales)
    return renderHook(() => useDateLocale()).result
  }

  it('adds the region from the browser when the language has none', async () => {
    const result = await renderWith('en', ['en-GB', 'fr-FR'])
    expect(result.current).toEqual('en-GB')
  })

  it('falls back to the language when no browser entry matches', async () => {
    const result = await renderWith('de', ['en-US', 'fr-FR'])
    expect(result.current).toEqual('de')
  })

  it('keeps a language that already carries a region or script', async () => {
    expect((await renderWith('pt-br', ['pt-PT'])).current).toEqual('pt-br')
    expect((await renderWith('zh-Hans', ['zh-TW'])).current).toEqual('zh-Hans')
  })

  it('matches the browser language case-insensitively', async () => {
    const result = await renderWith('pt', ['PT-PT'])
    expect(result.current).toEqual('PT-PT')
  })

  it('returns undefined when there is no language', async () => {
    const result = await renderWith(undefined, ['en-GB'])
    expect(result.current).toBeUndefined()
  })

  it('returns undefined to use the browser locale when set to browser', async () => {
    localStorage.setItem('dateFormat', 'browser')
    const result = await renderWith('en', ['fr-FR'])
    expect(result.current).toBeUndefined()
  })
})