Este 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