Skip to content

lucaschr21/junitest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

  • Java 25
  • Spring Boot 4.0.3
  • Spring Web, Spring Data JPA, Validation
  • H2
  • JUnit 6.0.3 + Mockito + AssertJ

backend/src/main/java

  • br/com/teste/backend/BackendApplication.java
    • Classe principal da aplicacao Spring Boot.
  • br/com/teste/backend/core/PersistenceConfig.java
    • Configuracao de persistencia/JPA.
  • br/com/teste/backend/models/Produto.java
    • Entidade JPA que representa a tabela produtos.
    • Contem validacoes de dominio (nome obrigatorio, preco e estoque nao negativos).
  • br/com/teste/backend/repositories/ProdutoRepository.java
    • Interface de acesso a dados (JpaRepository).
    • Inclui existsByNome para validacao de duplicidade.
  • br/com/teste/backend/services/ProdutoService.java
    • Regras de negocio da API.
    • Implementa salvar, buscar, listar, atualizar, deletar e baixar estoque.
  • br/com/teste/backend/controllers/ProdutoController.java
    • Camada HTTP/REST.
    • Expone os endpoints de CRUD e baixa de estoque em /api/produtos.
  • br/com/teste/backend/exceptions/ProdutoNaoEncontradoException.java
    • Excecao para produto inexistente (retorno HTTP 404).
  • br/com/teste/backend/exceptions/ProdutoJaCadastradoException.java
    • Excecao para tentativa de duplicidade por nome (retorno HTTP 409).
  • br/com/teste/backend/exceptions/EstoqueInsuficienteException.java
    • Excecao para baixa de estoque invalida (retorno HTTP 400).

backend/src/test/java

  • br/com/teste/backend/BackendApplicationTests.java
    • Teste de contexto da aplicacao (verifica se o Spring sobe corretamente).
  • br/com/teste/backend/services/ProdutoServiceTest.java
    • Testes unitarios da camada de negocio com Mockito (sem banco real).
  • br/com/teste/backend/controllers/ProdutoControllerIT.java
    • Testes de integracao da API com MockMvc + Spring context + banco em memoria.

Endpoints da API

Base: /api/produtos

  • GET /api/produtos -> lista todos
  • GET /api/produtos/{id} -> busca por id
  • POST /api/produtos -> cria produto
  • PUT /api/produtos/{id} -> atualiza produto
  • DELETE /api/produtos/{id} -> remove produto
  • PATCH /api/produtos/{id}/estoque -> baixa estoque

Exemplo PATCH body:

{
  "quantidadeParaRemover": 3
}

Swagger e H2

  • Swagger UI: http://localhost:8080/swagger-ui/index.html
  • OpenAPI JSON: http://localhost:8080/v3/api-docs
  • H2 Console: http://localhost:8080/h2-console

Rodar normalmente

1) Rodar aplicacao

Na pasta backend:

./mvnw spring-boot:run

Como rodar testes

Na pasta backend:

  • Todos os testes:
./mvnw test
  • Visualizacao detalhada por metodo, com identificacao de unitario/integracao:
./mvnw -q test-compile exec:java@test-tree

O que cada teste valida (e resultado esperado)

Unitarios - ProdutoServiceTest

  • deveSalvarProdutoComSucesso
    • Valida: salva quando nao existe nome duplicado.
    • Esperado: produto salvo e repository.save chamado.
  • deveLancarExcecaoAoSalvarProdutoComNomeDuplicado
    • Valida: bloqueia cadastro com mesmo nome.
    • Esperado: lancar ProdutoJaCadastradoException e nao chamar save.
  • deveLancarExcecaoAoBuscarProdutoInexistente
    • Valida: busca por id inexistente.
    • Esperado: lancar ProdutoNaoEncontradoException.
  • deveRemoverEstoqueComSucesso
    • Valida: baixa estoque no caminho feliz.
    • Esperado: estoque reduzido corretamente e save chamado.
  • deveLancarExcecaoPorEstoqueInsuficiente
    • Valida: baixa maior que estoque disponivel.
    • Esperado: lancar EstoqueInsuficienteException e nao chamar save.
  • deveDeletarProdutoComSucesso
    • Valida: exclusao de produto existente.
    • Esperado: repository.delete(produto) chamado.

Integracao - ProdutoControllerIT

  • deveCriarProdutoEArmazenarNoBanco
    • Valida: POST completo da API ate persistencia.
    • Esperado: HTTP 201, retorno com id, registro no banco.
  • deveListarProdutosIntegradoComBanco
    • Valida: GET lista refletindo dados persistidos.
    • Esperado: HTTP 200 e item retornado no JSON.
  • deveRetornar404AoBuscarProdutoQueNaoExiste
    • Valida: tratamento de id inexistente na API.
    • Esperado: HTTP 404.
  • deveDarBaixaNoEstoqueComSucessoIntegrado
    • Valida: PATCH de estoque e persistencia da alteracao.
    • Esperado: HTTP 200 e estoque final atualizado (ex.: 10 -> 7).

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages