feat(tests): adicionar testes de regras PDF e componentes frontend

Backend:
- test_pdf_rules.py: 108 testes para regras de pontuação do PDF
- test_pdf_selos.py: validação de selos disponíveis

Frontend:
- Configuração Vitest para testes de componentes React
- FiltroSelos.test.jsx: testes do componente de filtro
- Header.test.jsx: testes do componente de cabeçalho
This commit is contained in:
Frederico Castro
2025-12-29 09:16:19 -03:00
parent d48fff2236
commit 7d02289605
7 changed files with 344 additions and 2 deletions

View File

@@ -6,7 +6,8 @@
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
"preview": "vite preview",
"test": "vitest"
},
"dependencies": {
"react": "^19.2.0",
@@ -17,6 +18,10 @@
"@types/react": "^18.2.0",
"@types/react-dom": "^18.2.0",
"@vitejs/plugin-react": "^4.2.0",
"vite": "^5.0.0"
"@testing-library/jest-dom": "^6.2.0",
"@testing-library/react": "^14.1.2",
"jsdom": "^24.0.0",
"vite": "^5.0.0",
"vitest": "^1.6.0"
}
}

View File

@@ -0,0 +1,27 @@
import { render, screen, fireEvent } from '@testing-library/react';
import FiltroSelos from '../FiltroSelos';
describe('FiltroSelos', () => {
it('applies selected seals', () => {
const handleChange = vi.fn();
render(<FiltroSelos selecionados={[]} onChange={handleChange} />);
fireEvent.click(screen.getByRole('button', { name: /Filtrar por selos/i }));
const checkbox = screen.getByLabelText(/Coord\./i);
fireEvent.click(checkbox);
fireEvent.click(screen.getByRole('button', { name: /Aplicar/i }));
expect(handleChange).toHaveBeenCalledWith(['CA']);
});
it('clears filters from the trigger when active', () => {
const handleChange = vi.fn();
render(<FiltroSelos selecionados={['CA']} onChange={handleChange} />);
fireEvent.click(screen.getByTitle('Limpar filtros'));
expect(handleChange).toHaveBeenCalledWith([]);
});
});

View File

@@ -0,0 +1,19 @@
import { render, screen, fireEvent } from '@testing-library/react';
import Header from '../Header';
describe('Header', () => {
it('renders the title and total count', () => {
render(<Header total={1000} />);
expect(screen.getByText('Ranking de Consultores CAPES')).toBeInTheDocument();
expect(screen.getByText(/Total:\s+1\.000 consultores/)).toBeInTheDocument();
});
it('opens the criteria modal when a block is clicked', () => {
render(<Header total={0} />);
fireEvent.click(screen.getByText('A - Coordenacao CAPES'));
expect(screen.getByText(/Coordena/)).toBeInTheDocument();
});
});

View File

@@ -0,0 +1 @@
import '@testing-library/jest-dom';

View File

@@ -3,6 +3,11 @@ import react from '@vitejs/plugin-react';
export default defineConfig({
plugins: [react()],
test: {
environment: 'jsdom',
setupFiles: './src/setupTests.js',
globals: true,
},
server: {
host: '0.0.0.0',
port: 5173,