Opa, Marcos!
Acho que houve uma pequena confusão, esse método era o que eu havia passado para você no primeiro momento, mas estava causando o erro que você compartilhou e não cobria corretamente todo o controller. Com isso, você pode retirá-lo, os outros dois testes já fazem toda a tarefa que faltava para cobrir Controller Tutor.
Sua classe de testes deve estar assim:
package br.com.alura.adopet.api.controller;
import br.com.alura.adopet.api.dto.AtualizacaoTutorDto;
import br.com.alura.adopet.api.dto.CadastroTutorDto;
import br.com.alura.adopet.api.exception.ValidacaoException;
import br.com.alura.adopet.api.service.TutorService;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.MockitoAnnotations;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.web.servlet.MockMvc;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.doThrow;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
@SpringBootTest
@AutoConfigureMockMvc
class TutorControllerTest {
@InjectMocks
private TutorController tutorController;
@BeforeEach
public void setUp() {
MockitoAnnotations.openMocks(this);
}
@MockBean
private TutorService service;
@Autowired
private MockMvc mockMvc;
@Test
void deveriaDevolverCodigo200ParaRequisicaoDeCadastrarTutor() throws Exception {
//Arrange
String json = """
{
"nome": "Rodrigo",
"telefone": "(21)0000-9090",
"email": "email@example.com.br"
}
""";
//Act
MockHttpServletResponse response = mockMvc.perform(
post("/tutores")
.content(json)
.contentType(MediaType.APPLICATION_JSON)
).andReturn().getResponse();
//Assert
assertEquals(200,response.getStatus());
}
@Test()
void deveriaDevolverCodigo400ParaRequisicaoCadastrarTutorDadosInvalidos() throws Exception {
// Arrange
CadastroTutorDto cadastroDto = new CadastroTutorDto(null, null, null);
doThrow(new ValidacaoException("Erro de validação")).when(service).cadastrar(cadastroDto);
// Act
ResponseEntity<String> response = tutorController.cadastrar(cadastroDto);
// Assert
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
assertEquals("Erro de validação", response.getBody());
}
@Test
void deveriaDevolverCodigo200ParaRequisicaoDeAtualizarTutor() throws Exception {
//Arrange
String json = """
{
"id" : "1",
"nome": "Rodrigo",
"telefone": "(21)0000-9090",
"email": "email@example.com"
}
""";
//Act
MockHttpServletResponse response = mockMvc.perform(
put("/tutores")
.content(json)
.contentType(MediaType.APPLICATION_JSON)
).andReturn().getResponse();
//Assert
assertEquals(200,response.getStatus());
}
@Test
void deveriaDevolverCodigo400ParaRequisicaoDeAtualizarTutor() throws Exception {
// Arrange
AtualizacaoTutorDto atualizacaoDto = new AtualizacaoTutorDto(null, null, null, null);
doThrow(new ValidacaoException("Erro de validação")).when(service).atualizar(atualizacaoDto);
// Act
ResponseEntity<String> response = tutorController.atualizar(atualizacaoDto);
// Assert
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
assertEquals("Erro de validação", response.getBody());
}
}
Se tiver mais algum problema estarei aqui!