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

[Proyecto] Haga lo que hicimos en aula

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadEste segundo test toco crear un record DatosDetalleMedico

package med.voll2.api.dominio.medico;

import com.fasterxml.jackson.annotation.JsonProperty; import med.voll2.api.dominio.direccion.Direccion;

public record DatosDetalleMedico( Long id, String nombre, String email, String telefono, String documento, @JsonProperty("especialidad") Especialidad especialidad, Direccion direccion ) { // Constructor adicional que inicializa el record desde un objeto Medico public DatosDetalleMedico(Medico medico) { this(medico.getId(), medico.getNombre(), medico.getEmail(), medico.getTelefono(), medico.getDocumento(), medico.getEspecialidad(), medico.getDireccion()); }

} y ajustar medico controller @Autowired//no recomendable pr testing se usa por private MedicoRepository medicoRepository;

@PostMapping//conección con insomnia @RequestBody muestra el body de insomnia
public ResponseEntity<DatosRespuestaMedico> registrarMedico(@RequestBody @Valid DatosRegistroMedico datosRegistroMedico, UriComponentsBuilder uriComponentsBuilder){
    Medico medico =medicoRepository.save(new Medico(datosRegistroMedico));
    DatosRespuestaMedico datosRespuestaMedico = new DatosRespuestaMedico(medico.getId(), medico.getNombre(), medico.getEmail(),
            medico.getTelefono(),medico.getDocumento(),medico.getEspecialidad().toString(),
            new DatosDireccion(medico.getDireccion().getCalle(),medico.getDireccion().getDistrito(),
                    medico.getDireccion().getCiudad(),medico.getDireccion().getNumero(),
                    medico.getDireccion().getComplemento()));
   // URI url = "http://localhost:8080/medico/" + medico.getId();
    URI url = uriComponentsBuilder.path("/medico/{id}").buildAndExpand(medico.getId()).toUri();

    return ResponseEntity.created(url).body(datosRespuestaMedico);

} y el test @Test @DisplayName("Debería devolver código http 200 cuando las informaciones son válidas") @WithMockUser void registrar_escenario2() throws Exception { // Crear los datos requeridos var datosRegistro = new DatosRegistroMedico( "Juan Probando", // nombre "juan@gamil.com", // email "3052107548", // teléfono (10 dígitos) "45869561", // documento (4 a 9 dígitos) Especialidad.ORTOPEDIA, // especialidad datosDireccion() // dirección válida );

    // Simula el comportamiento del repositorio
    when(repository.save(any())).thenAnswer(invocation -> {
        Medico medico = invocation.getArgument(0);
        medico.setId(1L);
        return medico;
    });


    // Realizar la solicitud POST
    var response = mvc
            .perform(post("/medico")
                    .contentType(MediaType.APPLICATION_JSON)
                    .content(datosRegistroMedicoJson.write(datosRegistro).getJson()))
            .andReturn().getResponse();

    // Crear el objeto Medico simulado
    Medico medicoGuardado = new Medico(datosRegistro);
    medicoGuardado.setId(1L); // Simula que el ID fue asignado después de guardar en el repositorio

    // Crear el objeto esperado
    var datosDetalle = new DatosDetalleMedico(
            medicoGuardado.getId(),
            medicoGuardado.getNombre(),
            medicoGuardado.getEmail(),
            medicoGuardado.getTelefono(),
            medicoGuardado.getDocumento(), // Debe ser el número de documento
            medicoGuardado.getEspecialidad(),
            medicoGuardado.getDireccion()
    );

    var jsonEsperado = datosDetalleMedicoJson.write(datosDetalle).getJson();
    System.out.println("JSON esperado: " + jsonEsperado);
    System.out.println("JSON real: " + response.getContentAsString());

    // Validar el resultado
    assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED.value());
    assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);

}

private DatosDireccion datosDireccion() {
    return new DatosDireccion(
            "calle x",
            "distrito y",
            "ciudad z",
            "123",
            "i"
    );
}

logrado

1 respuesta

Hola DIego! ¿Cómo estás?

Gracias por tu aporte en el foro. Su contribución es esencial para el crecimiento de nuestra comunidad en Alura.

Sigue así y no dudes en volver al foro si tienes alguna pregunta o dificultad.

Abrazos y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!