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