Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Erro

Não sei qual o erro quanto menos onde ele esta, pode me ajudar nem sei como consigo ver onde está o erro em qual linha está. Sei que é no "med.voll.api.controller.ConsultaControllerTest", pois é a última coisa que modifiquei no meu código. Meu código no github.

https://github.com/brunoffraga/apiRepository/tree/master/api

8 respostas

Oi!

Acho que o problema é no seu record DadosDetalhamentoatualizaConsulta.

Apague o arquivo e crie novamente.

Criei e não funcionou do mesmo jeito.

package med.voll.api.domain.consulta;

import java.time.LocalDateTime;

public record DadosDetalhamentoAtualizaConsulta(Long id, Long idMedico, Long idPaciente, LocalDateTime data) {

}

E qual problema está acontecendo agora?

Erro inesperado.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Manda aqui o código completo da sua classe de teste.

package med.voll.api.controller;

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.domain.consulta.AgendaDeConsulta;
import med.voll.api.domain.consulta.DadosAgendamentoConsulta;
import med.voll.api.domain.consulta.DadosDetalhamentoConsulta;
import med.voll.api.domain.medico.Especialidade;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;

import java.time.LocalDateTime;

//está dando um erro inesperado, ao inves de dar um erro 200 está dando erro 400

@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureJsonTesters
public class ConsultaControllerTest {

    @Autowired
    private MockMvc mvc;

    @Autowired
    private JacksonTester<DadosAgendamentoConsulta> dadosAgendamentoConsultaJoson;

    @Autowired
    private JacksonTester<DadosDetalhamentoConsulta> dadosDetalhamentoConsultaJson;

    @MockBean
    private AgendaDeConsulta agendaDeConsultas;

    @Test
    @DisplayName("Deveria devolver codigo http 200 quando informações estão validas")
    @WithMockUser
    void agendar_cenario1() 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(dadosAgendamentoConsultaJoson.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);
    }

}
solução!

O teste falhou com erro 404, porque você está chamando a url /consultas, mas no seu controller você mapeou como /consulta

Era bem isso mesmo, obrigado.