Criei a função "agendar_cenario2" do mesmo jeito que está no repositório do github, mas continua dando este erro:
org.opentest4j.AssertionFailedError:
expected: "{"id":null,"idMedico":2,"idPaciente":5,"data":"2024-02-13T22:53:45.7402564"}"
but was: "{"idMedico":2,"idPaciente":5,"data":"2024-02-13T22:53:45.7402564","especialidade":"CARDIOLOGIA"}"
Ele fala que esperava receber um json, mas recebeu outro. Só que não sei o que fazer já que os dois DTOs usados nessa função tem uma estrutura diferente. Minha classe de teste está assim:
package med.voll.api.controllers;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.ArgumentMatchers.*;
import static org.mockito.Mockito.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import java.time.LocalDateTime;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.json.AutoConfigureJsonTesters;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.json.JacksonTester;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.web.servlet.MockMvc;
import med.voll.api.dtos.consulta.DadosAgendamentoConsulta;
import med.voll.api.dtos.consulta.DadosDetalhamentoConsulta;
import med.voll.api.enums.Especialidade;
import med.voll.api.services.AgendaDeConsultas;
@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureJsonTesters
public class ConsultaControllerTest {
@Autowired
private MockMvc mvc;
@Autowired
private JacksonTester<DadosAgendamentoConsulta> dadosAgendamentoConsultaJson;
@Autowired
private JacksonTester<DadosDetalhamentoConsulta> dadosDetalhamentoConsultaJson;
@MockBean
private AgendaDeConsultas agendaDeConsultas;
@Test
@DisplayName("Deveria devolver codigo http 400 quando informacoes estao invalidas")
@WithMockUser
void agendar_cenario1() throws Exception {
var response = mvc.perform(post("/consultas"))
.andReturn()
.getResponse();
assertThat(response.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST.value());
}
@Test
@DisplayName("Deveria devolver codigo http 200 quando informacoes estao validas")
@WithMockUser
void agendar_cenario2() throws Exception {
var data = LocalDateTime.now().plusHours(1);
var especialidade = Especialidade.CARDIOLOGIA;
var dadosDetalhamento = new DadosDetalhamentoConsulta(null, 2l, 5l, data);
when(agendaDeConsultas.agendar(any())).thenReturn(dadosDetalhamento);
var response = mvc
.perform(
post("/consultas")
.contentType(MediaType.APPLICATION_JSON)
.content(dadosAgendamentoConsultaJson.write(
new DadosAgendamentoConsulta(2l, 5l, data, especialidade)
).getJson())
)
.andReturn().getResponse();
assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
var jsonEsperado = dadosDetalhamentoConsultaJson.write(
dadosDetalhamento
).getJson();
assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);
}
}