feat(worker): auth gate, Dutch login screen, router and 3-tab shell
This commit is contained in:
45
apps/worker/src/App.test.tsx
Normal file
45
apps/worker/src/App.test.tsx
Normal file
@@ -0,0 +1,45 @@
|
||||
import { render, screen, within } from '@testing-library/react';
|
||||
import { afterEach, describe, expect, it, vi } from 'vitest';
|
||||
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
||||
import App from './App';
|
||||
import { clearToken, setToken } from './lib/auth-storage';
|
||||
|
||||
// Stub the network layer so stub screens render without real requests.
|
||||
vi.mock('./lib/api', async () => {
|
||||
const actual = await vi.importActual<typeof import('./lib/api')>('./lib/api');
|
||||
return {
|
||||
...actual,
|
||||
apiFetch: vi.fn().mockResolvedValue([]),
|
||||
};
|
||||
});
|
||||
|
||||
function renderApp() {
|
||||
const queryClient = new QueryClient({ defaultOptions: { queries: { retry: false } } });
|
||||
return render(
|
||||
<QueryClientProvider client={queryClient}>
|
||||
<App />
|
||||
</QueryClientProvider>,
|
||||
);
|
||||
}
|
||||
|
||||
describe('App', () => {
|
||||
afterEach(() => {
|
||||
clearToken();
|
||||
});
|
||||
|
||||
it('shows the login screen when there is no token', () => {
|
||||
clearToken();
|
||||
renderApp();
|
||||
expect(screen.getByText('E-mailadres')).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: 'Inloggen' })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('shows the tab bar when a token is present', () => {
|
||||
setToken('tok');
|
||||
renderApp();
|
||||
const tabbar = within(screen.getByRole('navigation'));
|
||||
expect(tabbar.getByText('Stopwatch')).toBeInTheDocument();
|
||||
expect(tabbar.getByText('Geschiedenis')).toBeInTheDocument();
|
||||
expect(tabbar.getByText('Instellingen')).toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user