60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import { renderHook, act } from '@testing-library/react';
|
|
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
import { ThemeProvider, useTheme } from './ThemeContext';
|
|
import { ReactNode } from 'react';
|
|
import { ThemeVariant } from '@/types';
|
|
|
|
const wrapper = ({ children }: { children: ReactNode }) => (
|
|
<ThemeProvider>{children}</ThemeProvider>
|
|
);
|
|
|
|
describe('ThemeContext', () => {
|
|
beforeEach(() => {
|
|
vi.clearAllMocks();
|
|
localStorage.clear();
|
|
});
|
|
|
|
it('should provide theme context', () => {
|
|
const { result } = renderHook(() => useTheme(), { wrapper });
|
|
|
|
expect(result.current).toBeDefined();
|
|
expect(result.current).toHaveProperty('theme');
|
|
expect(result.current).toHaveProperty('setTheme');
|
|
});
|
|
|
|
it('should have default theme', () => {
|
|
const { result } = renderHook(() => useTheme(), { wrapper });
|
|
|
|
expect(result.current.theme).toBeDefined();
|
|
});
|
|
|
|
it('should change theme', () => {
|
|
const { result } = renderHook(() => useTheme(), { wrapper });
|
|
|
|
const initialTheme = result.current.theme;
|
|
|
|
act(() => {
|
|
result.current.setTheme(ThemeVariant.GAMING);
|
|
});
|
|
|
|
expect(result.current.theme).toBe(ThemeVariant.GAMING);
|
|
expect(result.current.theme).not.toBe(initialTheme);
|
|
});
|
|
|
|
it('should toggle theme', () => {
|
|
const { result } = renderHook(() => useTheme(), { wrapper });
|
|
|
|
const initialTheme = result.current.theme;
|
|
|
|
act(() => {
|
|
if (result.current.toggleTheme) {
|
|
result.current.toggleTheme();
|
|
}
|
|
});
|
|
|
|
// Le thème devrait changer si toggleTheme existe
|
|
if (result.current.toggleTheme) {
|
|
expect(result.current.theme).not.toBe(initialTheme);
|
|
}
|
|
});
|
|
});
|