|
|
|
# Qualidade
|
|
|
|
|
|
|
|
Este documento descreve a estratégia de testes e ferramentas de qualidade implementadas na aplicação para vendas de doces com backend em Java/Spring Boot e frontend em React/TypeScript.
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
## Visão geral da qualidade
|
|
|
|
|
|
|
|
O projeto implementa uma estratégia robusta de qualidade de código com:
|
|
|
|
|
|
|
|
- **Cobertura de testes automatizados** para backend e frontend
|
|
|
|
- **Análise estática de código** com ESLint e ferramentas Java
|
|
|
|
- **Formatação padronizada** com Prettier
|
|
|
|
- **Integração contínua** com GitHub Actions
|
|
|
|
- **Hooks de Git** para validação antes dos commits
|
|
|
|
- **Relatórios de cobertura** automatizados
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
## Backend - Java/Spring Boot
|
|
|
|
|
|
|
|
### Framework de Testes
|
|
|
|
|
|
|
|
- **JUnit 5** - Framework principal para testes unitários
|
|
|
|
- **Spring Boot Test** - Testes de integração com Spring
|
|
|
|
- **Mockito** - Mocking para testes isolados
|
|
|
|
- **MockMvc** - Testes de controllers web
|
|
|
|
- **H2 Database** - Banco em memória para testes
|
|
|
|
|
|
|
|
### 🎯 Tipos de Testes Implementados
|
|
|
|
|
|
|
|
#### 1. **Testes de Controller**
|
|
|
|
- **Localização:** `src/test/java/com/sedocefosse/backend/controller/`
|
|
|
|
- **Anotações:** `@WebMvcTest`, `@MockBean`
|
|
|
|
- **Cobertura:** Endpoints REST, validações, responses HTTP
|
|
|
|
|
|
|
|
**Exemplo - ProductControllerTest:**
|
|
|
|
```java
|
|
|
|
@WebMvcTest(ProductController.class)
|
|
|
|
class ProductControllerTest {
|
|
|
|
|
|
|
|
@Test
|
|
|
|
void getProductBySku_shouldReturnProduct_whenSkuExists() throws Exception {
|
|
|
|
// Testa busca de produto por SKU
|
|
|
|
mockMvc.perform(get("/products/SKU-CHOCO-01"))
|
|
|
|
.andExpect(status().isOk())
|
|
|
|
.andExpect(jsonPath("$.nome").value("Cookie de Chocolate"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
### Cobertura de Código
|
|
|
|
|
|
|
|
- **Plugin:** JaCoCo Maven Plugin v0.8.11
|
|
|
|
- **Relatórios:** HTML, XML
|
|
|
|
- **Configuração automática** para execução em `mvn test`
|
|
|
|
|
|
|
|
### Execução de Testes
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# Executar todos os testes
|
|
|
|
./mvnw test
|
|
|
|
|
|
|
|
# Executar testes com relatório de cobertura
|
|
|
|
./mvnw test jacoco:report
|
|
|
|
|
|
|
|
# Compilar e testar
|
|
|
|
./mvnw clean install
|
|
|
|
```
|
|
|
|
|
|
|
|
### Ferramentas de qualidade backend
|
|
|
|
|
|
|
|
- **Maven Compiler Plugin** - Compilação com Java
|
|
|
|
- **Spring Boot DevTools** - Hot reload em desenvolvimento
|
|
|
|
- **Lombok** - Redução de boilerplate code
|
|
|
|
- **Validação Bean** - Validações automáticas de entrada
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
## Frontend - React/TypeScript
|
|
|
|
|
|
|
|
### Framework de Testes
|
|
|
|
|
|
|
|
- **Jest** - Framework de testes principal
|
|
|
|
- **React Testing Library** - Testes focados no usuário
|
|
|
|
- **jsdom** - Ambiente DOM simulado
|
|
|
|
- **ts-jest** - Suporte a TypeScript
|
|
|
|
|
|
|
|
### Tipos de Testes Implementados
|
|
|
|
|
|
|
|
#### 1. **Testes de Componentes**
|
|
|
|
- **Cobertura:** Componentes UI, interações, estado
|
|
|
|
|
|
|
|
**Exemplo - CartContext.test.tsx:**
|
|
|
|
```tsx
|
|
|
|
describe('CartContext', () => {
|
|
|
|
it('adiciona produto ao carrinho', () => {
|
|
|
|
const { getByText } = render(
|
|
|
|
<CartProvider>
|
|
|
|
<TestComponent />
|
|
|
|
</CartProvider>
|
|
|
|
);
|
|
|
|
|
|
|
|
fireEvent.click(getByText('add'));
|
|
|
|
expect(screen.getByTestId('quantity')).toHaveTextContent('2');
|
|
|
|
});
|
|
|
|
});
|
|
|
|
```
|
|
|
|
|
|
|
|
#### 2. **Testes de Páginas**
|
|
|
|
- `Home.test.tsx` - Página inicial
|
|
|
|
- `Login.test.tsx` - Autenticação
|
|
|
|
- `Produtos.test.tsx` - Listagem de produtos
|
|
|
|
- `ProdutosAdmin.test.tsx` - Área administrativa
|
|
|
|
|
|
|
|
#### 3. **Testes de Contexto**
|
|
|
|
- `CartContext.test.tsx` - Gerenciamento do carrinho
|
|
|
|
|
|
|
|
### Cobertura de Código
|
|
|
|
|
|
|
|
- **Relatórios:** Text, LCOV, HTML
|
|
|
|
- **Diretório:** `coverage/`
|
|
|
|
- **Exclusões:** Arquivos de tipo, main.tsx, configurações
|
|
|
|
|
|
|
|
### Execução de Testes
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# Executar todos os testes
|
|
|
|
npm run test
|
|
|
|
|
|
|
|
# Testes em modo watch
|
|
|
|
npm run test:watch
|
|
|
|
|
|
|
|
# Testes com cobertura
|
|
|
|
npm run test:coverage
|
|
|
|
```
|
|
|
|
|
|
|
|
### Ferramentas de qualidade frontend
|
|
|
|
|
|
|
|
#### **ESLint** - Análise Estática
|
|
|
|
|
|
|
|
#### **Prettier** - Formatação de Código
|
|
|
|
|
|
|
|
#### **TypeScript** - Tipagem Estática
|
|
|
|
- Configurações específicas para app, testes e node
|
|
|
|
- Strict mode habilitado
|
|
|
|
- Verificações de tipo em build
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
## Integração Contínua (CI/CD)
|
|
|
|
|
|
|
|
### Backend Pipeline
|
|
|
|
|
|
|
|
### Frontend Pipeline
|
|
|
|
|
|
|
|
|
|
|
|
### Triggers de CI
|
|
|
|
|
|
|
|
- **Pull Requests** para `main` e `develop`
|
|
|
|
- **Push** para `main`
|
|
|
|
- **Validação completa** em cada PR
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
## Git Hooks e Qualidade
|
|
|
|
|
|
|
|
### 🔧 Backend Hooks
|
|
|
|
|
|
|
|
- **pre-commit:** Validação de nomenclatura de branches
|
|
|
|
- **Script:** `validate-branch-name.sh`
|
|
|
|
|
|
|
|
### Frontend Hooks
|
|
|
|
|
|
|
|
- **lint-staged:** Formatação automática
|
|
|
|
- **pre-commit:** ESLint + Prettier nos arquivos modificados
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# .husky/pre-commit
|
|
|
|
npx lint-staged
|
|
|
|
```
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
### Automação
|
|
|
|
|
|
|
|
- CI/CD automatizado com GitHub Actions
|
|
|
|
- Hooks de Git para validação local
|
|
|
|
- Relatórios de cobertura automatizados
|
|
|
|
- Validação de branch naming
|
|
|
|
- Formatação automática no commit
|
|
|
|
|
|
|
|
---
|
|
|
|
|