Problema 3: Deletar produto
Implemente os testes de API usando MockMvc para deleção de produto (método DELETE do ProductController), considerando os seguintes cenários. Lembre-se de inserir o token no cabeçalho da requisição.
Como o delete é por ID, não precisamos passar o ProductDTO no corpo. Portanto, não precisa usar o jsonBody e o ".content e contentType".
deleta produto existente quando logado como admin
@Test
public void deleteShouldDoNothingWhenLoggedAsAdminAndProductExists() throws Exception {
ResultActions result =
mockMvc.perform(delete("/products/{id}", existingId)
.header("Authorization", "Bearer " + adminToken)
.accept(MediaType.APPLICATION_JSON));
result.andExpect(status().isNoContent());
}
404 para produto inexistente quando logado como admin
@Test
public void deleteShouldReturnNotFoundWhenLoggedAsAdminAndProductDoesnotExists() throws Exception {
ResultActions result =
mockMvc.perform(delete("/products/{id}", nonExistingId)
.header("Authorization", "Bearer " + adminToken)
.accept(MediaType.APPLICATION_JSON));
result.andExpect(status().isNotFound());
}
400 para produto dependente quando logado como admin
Nesse caso específico, precisamos colocar o @Transactional
@Test
@org.springframework.transaction.annotation.Transactional(propagation = Propagation.SUPPORTS)
public void deleteShouldReturnBadRequestWhenLoggedAsAdminAndProductIdIsDependent() throws Exception {
ResultActions result =
mockMvc.perform(delete("/products/{id}", dependentId)
.header("Authorization", "Bearer " + adminToken)
.accept(MediaType.APPLICATION_JSON));
result.andExpect(status().isBadRequest());
}
403 quando logado como cliente
@Test
public void deleteShouldReturnForbiddenWhenLoggedAsClient() throws Exception {
ResultActions result =
mockMvc.perform(delete("/products/{id}", existingId)
.header("Authorization", "Bearer " + clientToken)
.accept(MediaType.APPLICATION_JSON));
result.andExpect(status().isForbidden());
}
401 quando não logado como admin ou cliente
@Test
public void deleteShouldReturnUnauthorizedWhenLoggedAsClient() throws Exception {
ResultActions result =
mockMvc.perform(delete("/products/{id}", existingId)
.header("Authorization", "Bearer " + invalidToken)
.accept(MediaType.APPLICATION_JSON));
result.andExpect(status().isUnauthorized());
}
Anterior401 quando não logado como admin ou cliente (token inválido)PróximoProblema 4: Consultar pedido por id
Atualizado