74 lines
1.9 KiB
TypeScript
74 lines
1.9 KiB
TypeScript
import { renderHook, act } from '@testing-library/react';
|
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
import { useTranslation } from './useTranslation';
|
|
|
|
// Mock react-i18next
|
|
const mockT = vi.fn((key: string) => key);
|
|
const mockChangeLanguage = vi.fn();
|
|
const mockI18n = {
|
|
changeLanguage: mockChangeLanguage,
|
|
isInitialized: true,
|
|
};
|
|
|
|
vi.mock('react-i18next', () => ({
|
|
useTranslation: () => ({
|
|
i18n: mockI18n,
|
|
t: mockT,
|
|
}),
|
|
}));
|
|
|
|
// Mock UI store
|
|
const mockSetLanguage = vi.fn();
|
|
vi.mock('@/stores/ui', () => ({
|
|
useUIStore: () => ({
|
|
language: 'en',
|
|
setLanguage: mockSetLanguage,
|
|
}),
|
|
}));
|
|
|
|
describe('useTranslation', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it('should return translation hook', () => {
|
|
const { result } = renderHook(() => useTranslation());
|
|
|
|
expect(result.current).toBeDefined();
|
|
expect(result.current).toHaveProperty('t');
|
|
expect(result.current).toHaveProperty('language');
|
|
expect(result.current).toHaveProperty('changeLanguage');
|
|
expect(result.current).toHaveProperty('isReady');
|
|
});
|
|
|
|
it('should translate text', () => {
|
|
const { result } = renderHook(() => useTranslation());
|
|
|
|
result.current.t('test.key');
|
|
|
|
expect(mockT).toHaveBeenCalledWith('test.key');
|
|
});
|
|
|
|
it('should change language', () => {
|
|
const { result } = renderHook(() => useTranslation());
|
|
|
|
act(() => {
|
|
result.current.changeLanguage('fr');
|
|
});
|
|
|
|
expect(mockChangeLanguage).toHaveBeenCalledWith('fr');
|
|
expect(mockSetLanguage).toHaveBeenCalledWith('fr');
|
|
});
|
|
|
|
it('should return current language', () => {
|
|
const { result } = renderHook(() => useTranslation());
|
|
|
|
expect(result.current.language).toBe('en');
|
|
});
|
|
|
|
it('should return isReady status', () => {
|
|
const { result } = renderHook(() => useTranslation());
|
|
|
|
expect(result.current.isReady).toBe(true);
|
|
});
|
|
});
|