Files
syndarix/frontend/tests/components/auth/AuthInitializer.test.tsx
Felipe Cardoso a460e0e4f2 Add unit tests for core components and layouts
- **ThemeToggle:** Introduce comprehensive tests to validate button functionality, dropdown options, and active theme indicators.
- **ThemeProvider:** Add tests for theme management, localStorage persistence, system preferences, and DOM updates.
- **Header & Footer:** Verify header rendering, user menu functionality, and footer content consistency.
- **AuthInitializer:** Ensure authentication state is correctly loaded from storage on mount.
2025-11-02 07:35:45 +01:00

59 lines
1.6 KiB
TypeScript

/**
* Tests for AuthInitializer
* Verifies authentication state is loaded from storage on mount
*/
import { render, waitFor } from '@testing-library/react';
import { AuthInitializer } from '@/components/auth/AuthInitializer';
import { useAuthStore } from '@/stores/authStore';
// Mock the auth store
jest.mock('@/stores/authStore', () => ({
useAuthStore: jest.fn(),
}));
describe('AuthInitializer', () => {
const mockLoadAuthFromStorage = jest.fn();
beforeEach(() => {
jest.clearAllMocks();
(useAuthStore as unknown as jest.Mock).mockImplementation((selector: any) => {
const state = {
loadAuthFromStorage: mockLoadAuthFromStorage,
};
return selector(state);
});
});
describe('Initialization', () => {
it('renders nothing (null)', () => {
const { container } = render(<AuthInitializer />);
expect(container.firstChild).toBeNull();
});
it('calls loadAuthFromStorage on mount', async () => {
render(<AuthInitializer />);
await waitFor(() => {
expect(mockLoadAuthFromStorage).toHaveBeenCalledTimes(1);
});
});
it('does not call loadAuthFromStorage again on re-render', async () => {
const { rerender } = render(<AuthInitializer />);
await waitFor(() => {
expect(mockLoadAuthFromStorage).toHaveBeenCalledTimes(1);
});
// Force re-render
rerender(<AuthInitializer />);
// Should still only be called once (useEffect dependencies prevent re-call)
expect(mockLoadAuthFromStorage).toHaveBeenCalledTimes(1);
});
});
});