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

[Sugerencia] Test registrar medico

package com.med.voll.api.controller;

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

import java.time.LocalDateTime;

import static org.assertj.core.api.Assertions.assertThat;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;


@SpringBootTest
@AutoConfigureMockMvc
@ActiveProfiles("test")
@AutoConfigureJsonTesters
class MedicoControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private JacksonTester<DatosRegistroMedico> datosRegistroMedicoJson;

    @Autowired
    private JacksonTester<DatosDetalleMedico> datosDetalleMedicoJson;

    @MockitoBean 
    private IMedicoRepository repository;

    @Test
    @DisplayName("Deberia devolver http 400 cuando request esta vacia")
    @WithMockUser
    void registrar_escenario1() throws Exception {

        var response = mockMvc.perform(post("/medicos"))
                .andReturn().getResponse();

        assertThat(response.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST.value());

    }

    @Test
    @DisplayName("Deberia devolver http 201 cuando request reciba un json valido!")
    @WithMockUser
    void registrar_escenario2() throws Exception {

// 1. GIVEN: Preparamos los datos
        var direccion = new DatosDireccion("Calle x", "123", "z", "El Sol", "1234", "Villa Dolores", "Cordoba");
        var datosRegistro = new DatosRegistroMedico("Medico Test", "test@med.com", "1234598766", "11200233", Especialidad.CARDIOLOGIA, direccion);

// Datos que esperamos que el Service/Repository devuelva (Response)
        var datosDetalle = new DatosDetalleMedico(
                null, // El ID suele ser null antes de persistir o generado por el mock
                true,
                datosRegistro.nombre(),
                datosRegistro.email(),
                datosRegistro.documento(),
                datosRegistro.telefono(),
                datosRegistro.especialidad(),
                new Direccion(direccion));

//        var medicoSimulado = new Medico(datosRegistro);
        var response = mockMvc.perform(post("/medicos")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(datosRegistroMedicoJson.write(datosRegistro).getJson()
                        )
                )
                .andReturn().getResponse();

        // Un POST exitoso suele ser 201 Created
        assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED.value());
        var jsonEsperado = datosDetalleMedicoJson.write(datosDetalle).getJson();
        assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);
    }
}
1 respuesta

¡Hola Christian, espero que estés bien!

Gracias por compartir tu código. Parece que estás en el camino correcto para crear pruebas automatizadas para el método registrar de tu clase MedicoController. Vamos a revisar algunos puntos clave que podrían ayudarte a mejorar o ajustar tus pruebas.

  1. Prueba de solicitud vacía: Tu prueba registrar_escenario1 parece estar bien configurada para verificar que una solicitud vacía devuelve un estado HTTP 400. Esto es importante para asegurarte de que tu API maneje adecuadamente las solicitudes incorrectas.

  2. Prueba de solicitud válida: En la prueba registrar_escenario2, estás simulando una solicitud válida y verificando que el estado HTTP 201 sea devuelto, lo cual es correcto para una operación de creación exitosa. Además, estás comparando la respuesta JSON con lo que esperas que devuelva el servicio.

  3. Uso de MockitoBean: Veo que estás utilizando @MockitoBean para el repositorio IMedicoRepository. Asegúrate de que el comportamiento esperado del repositorio esté correctamente simulado para devolver los datos que esperas durante la prueba. Esto es crucial para que la prueba se ejecute como se espera.

  4. Verificación de contenido de respuesta: Estás comparando el JSON de la respuesta con el JSON esperado. Esto es excelente para asegurarte de que no solo el estado HTTP sea correcto, sino que el contenido de la respuesta también sea el esperado.

  5. Consideraciones adicionales: Si encuentras que las pruebas no se comportan como esperas, verifica que las configuraciones de seguridad y los perfiles de prueba estén correctamente configurados. A veces, las configuraciones de seguridad pueden interferir con las pruebas de controladores.

Espero que estas sugerencias te sean útiles. ¡Sigue adelante con tus pruebas y buena suerte con el desarrollo de tu API!

Espero ter ayudado y bons estudos!