Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Haga lo que hicimos en aula

MedicoControllerTest

package med.voll.api.controller;

import med.voll.api.domain.direccion.DatosDireccion;
import med.voll.api.domain.direccion.DireccionJPA;
import med.voll.api.domain.medico.*;
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.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.bean.override.mockito.MockitoBean;
import org.springframework.test.web.servlet.MockMvc;

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;

@SpringBootTest
@AutoConfigureMockMvc
@AutoConfigureJsonTesters
@WithMockUser
class MedicoControllerTest {

private final MockMvc mockMvc;

@MockitoBean
private MedicoRepository repository;

@Autowired
private JacksonTester<DatosRegistroMedico> datosRegistroMedicoJson;

@Autowired
private JacksonTester<DatosDetalleMedico> datosDetalleMedicoJson;

@Autowired
MedicoControllerTest(MockMvc mockMvc) {
    this.mockMvc = mockMvc;
}

@Test
void registrarMedicoSinBodyRespondeStatus400() throws Exception {
    var resp = mockMvc.perform(post("/medicos")).andReturn().getResponse();

    assertThat(resp.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST.value());
}

@Test
void registrarMedicoConBodyValidoRespondeStatus200() throws Exception {
    var datosDireccion = datosDireccion();
    var medico = new MedicoJPA(
            null, true, "Médico01", "medico01@mail.com", "3008882121",
            "1897000", Especialidad.CARDIOLOGIA, new DireccionJPA(datosDireccion)
    );
    when(repository.save(any())).thenReturn(medico);

    var response = mockMvc.perform(post("/medicos")
                    .contentType(MediaType.APPLICATION_JSON)
                    .content(datosRegistroMedicoJson
                            .write(new DatosRegistroMedico("Médico01", "medico01@mail.com",
                                    "3008882121", "1897000", Especialidad.CARDIOLOGIA,
                                    datosDireccion))
                            .getJson()))
            .andReturn()
            .getResponse();
    var jsonEsperado = datosDetalleMedicoJson.write(new DatosDetalleMedico(medico)).getJson();

    assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED.value());
    assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);
}

private DatosDireccion datosDireccion() {
    return new DatosDireccion(
            "Calle Mariano Carranza",
            "32156",
            "Complemento",
            "Barrio",
            "Ciudad"
    );
}

}

1 respuesta

¡Hola Wilder, espero que estés bien!

Parece que estás trabajando en la implementación de pruebas para el método registrar de tu clase MedicoController. A partir del código que compartiste, parece que ya has avanzado bastante. Aquí te dejo algunos consejos para asegurarte de que estás siguiendo los pasos correctos:

  1. Prueba sin cuerpo de solicitud: Ya has implementado una prueba que verifica que, al enviar una solicitud POST a /medicos sin cuerpo, el sistema responde con un estado 400 (BAD_REQUEST). Esto es importante para asegurar que tu API maneja adecuadamente las solicitudes incorrectas.

  2. Prueba con cuerpo válido: También has implementado una prueba para verificar que, al enviar un cuerpo de solicitud válido, el sistema responde con un estado 200 (OK) y devuelve el JSON esperado. Asegúrate de que el JSON esperado (jsonEsperado) se alinea con el formato de respuesta de tu API.

  3. Uso de Mockito: Estás usando Mockito para simular el comportamiento de MedicoRepository. Esto es excelente para aislar la lógica de tu controlador y asegurarte de que las pruebas no dependan de la base de datos real.

  4. Verificación de la respuesta: Estás comparando el estado de la respuesta y el contenido JSON, lo cual es una buena práctica para asegurarte de que tu API no solo responde con el estado correcto, sino también con los datos correctos.

Si estás replicando lo que se hizo en clase, asegúrate de que todos los métodos y configuraciones estén alineados con lo que se mostró. Si encuentras algún error específico, revisa los mensajes de error para obtener pistas sobre qué podría estar fallando.

Espero que estos consejos te sean útiles. ¡Bons estudios!