fullstack-form-app-sinclqir
Version:
Application de gestion des utilisateurs avec authentification JWT - Frontend React + Backend Python FastAPI
57 lines (45 loc) • 2.51 kB
JSX
process.env.VITE_API_URL = 'http://localhost:8000';
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
import RegistrationForm from '../pages/Home/components/RegistrationForm';
import axios from 'axios';
jest.mock('axios');
describe('RegistrationForm', () => {
const fillAndSubmitForm = async () => {
fireEvent.change(screen.getByLabelText(/^nom/i), { target: { value: 'Doe' } });
fireEvent.change(screen.getByLabelText(/^prénom/i), { target: { value: 'John' } });
fireEvent.change(screen.getByLabelText(/^email/i), { target: { value: 'john.doe@example.com' } });
fireEvent.change(screen.getByLabelText(/mot de passe/i), { target: { value: 'password123' } });
fireEvent.change(screen.getByLabelText(/date de naissance/i), { target: { value: '1990-01-01' } });
fireEvent.change(screen.getByLabelText(/^ville/i), { target: { value: 'Paris' } });
fireEvent.change(screen.getByLabelText(/code postal/i), { target: { value: '75001' } });
fireEvent.click(screen.getByRole('button', { name: /s'inscrire/i }));
};
it('renders all input fields', () => {
render(<RegistrationForm />);
expect(screen.getByLabelText(/^nom/i)).toBeInTheDocument();
expect(screen.getByLabelText(/^prénom/i)).toBeInTheDocument();
expect(screen.getByLabelText(/^email/i)).toBeInTheDocument();
expect(screen.getByLabelText(/mot de passe/i)).toBeInTheDocument();
expect(screen.getByLabelText(/date de naissance/i)).toBeInTheDocument();
expect(screen.getByLabelText(/^ville/i)).toBeInTheDocument();
expect(screen.getByLabelText(/code postal/i)).toBeInTheDocument();
});
it('calls API and triggers onRegistrationSuccess on successful submit', async () => {
axios.post.mockResolvedValueOnce({ data: {} });
const onRegistrationSuccess = jest.fn();
render(<RegistrationForm onRegistrationSuccess={onRegistrationSuccess} />);
await fillAndSubmitForm();
await waitFor(() => {
expect(onRegistrationSuccess).toHaveBeenCalled();
expect(screen.getByText(/inscription réussie/i)).toBeInTheDocument();
});
});
it('shows error message on API failure', async () => {
axios.post.mockRejectedValueOnce({ response: { data: { detail: 'Erreur spécifique' } } });
render(<RegistrationForm />);
await fillAndSubmitForm();
await waitFor(() => {
expect(screen.getByText(/erreur spécifique/i)).toBeInTheDocument();
});
});
});