Este é um projeto de aprendizado que demonstra como usar o GitHub Copilot com TDD (Test-Driven Development) para construir uma API de produtos. O objetivo é desenvolver uma API REST completa com operações CRUD para gerenciamento de produtos, utilizando dados mockados e seguindo as melhores práticas de desenvolvimento orientado por testes.
Construir uma API de Produtos com as seguintes características:
- CRUD completo: Criar, listar, buscar, atualizar e remover produtos
- Dados mockados: Utilizar dados em memória para simular um banco de dados
- TDD: Desenvolver seguindo o ciclo Red-Green-Refactor
- GitHub Copilot: Acelerar o desenvolvimento com IA
- Testes abrangentes: Cobertura completa dos endpoints e funcionalidades
- Validação de dados: Garantir integridade dos dados de entrada
- Node.js (versão 16 ou superior)
- npm ou yarn
- GitHub Copilot habilitado no seu editor
- VS Code (recomendado)
# Clone o repositório
git clone https://github.com/dev-pods/github-copilot-with-tdd-project.git
# Entre no diretório
cd github-copilot-with-tdd-project
# Instale as dependências
npm install
# Executar todos os testes
npm test
# Executar testes em modo watch (desenvolvimento)
npm run test:watch
# Executar testes com coverage
npm run test:coverage
# Modo desenvolvimento (com nodemon)
npm run dev
# Modo produção
npm start
A API estará disponível em http://localhost:3000
src/
├── index.js # Servidor Express principal
tests/
├── api.test.js # Testes dos endpoints da API
package.json # Configurações e dependências
- Express.js: Framework web para Node.js
- Jest: Framework de testes
- Supertest: Biblioteca para testes de API
- Nodemon: Reinicialização automática durante desenvolvimento
Endpoint de boas-vindas que retorna informações sobre a API.
Resposta:
{
"message": "API is running successfully"
}
Lista todos os produtos.
Busca um produto específico por ID.
Cria um novo produto. Body:
{
"name": "Nome do Produto",
"description": "Descrição do produto",
"price": 99.99,
"category": "Categoria",
"stock": 10
}
Atualiza um produto existente.
Remove um produto.
{
"id": "string", // UUID único do produto
"name": "string", // Nome do produto (obrigatório)
"description": "string", // Descrição detalhada
"price": "number", // Preço em reais (obrigatório)
"category": "string", // Categoria do produto
"stock": "number", // Quantidade em estoque
"createdAt": "string", // Data de criação (ISO 8601)
"updatedAt": "string" // Data da última atualização (ISO 8601)
}
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "Smartphone XYZ",
"description": "Smartphone com 128GB de armazenamento e câmera de 48MP",
"price": 899.99,
"category": "Eletrônicos",
"stock": 25,
"createdAt": "2025-09-18T10:30:00.000Z",
"updatedAt": "2025-09-18T10:30:00.000Z"
}
Este projeto demonstra o ciclo TDD:
- Red: Escreva um teste que falha
- Green: Escreva o código mínimo para fazer o teste passar
- Refactor: Melhore o código mantendo os testes passando
- Red: Escrever teste para endpoint
GET /products
- Green: Implementar o endpoint básico para fazer o teste passar
- Refactor: Melhorar a estrutura do código, extrair para controladores
Os testes demonstram como testar:
- Endpoints de API (GET, POST, PUT, DELETE)
- Validação de dados de entrada
- Respostas de sucesso e erro
- Estrutura de dados dos produtos
- Casos extremos e validações
- Escreva os testes primeiro: O Copilot entende melhor o contexto quando vê os testes
- Use comentários descritivos: Ajudam o Copilot a gerar código mais preciso
- Nomeação clara: Funções e variáveis bem nomeadas geram sugestões melhores
- Iteração: Use o Copilot para refatorar e melhorar o código existente
- Configuração inicial do projeto
- Setup de testes com Jest
- Servidor Express básico
- Modelo de dados para produtos - Criar estrutura de dados mockados
- GET /products - Listar todos os produtos
- GET /products/:id - Buscar produto por ID
- POST /products - Criar novo produto
- PUT /products/:id - Atualizar produto
- DELETE /products/:id - Remover produto
- Validação de dados de entrada
- Tratamento de erros específicos
- Filtros e paginação para listagem
- Busca por nome/categoria
- Validação avançada de campos
- Middleware de logs
- Documentação com Swagger
- Containerização com Docker
Este projeto está sob a licença ISC.