Hola buen día, tengo una duda del proyecto del repo, no tengo "DatosDetalleMedico" en su lugar tengo "DatosRespuestaMedico", mi pregunta es si debo crear un constructor nuevo?
package med.voll.api.domain.medico;
import med.voll.api.domain.direccion.DatosDireccion;
public record DatosRespuestaMedico(Long id, String nombre, String email, String telefono, String documento,
DatosDireccion direccion) {
}
package med.voll.api.controller;
import med.voll.api.domain.direccion.DatosDireccion;
import med.voll.api.domain.direccion.Direccion;
import 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.web.servlet.MockMvc;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
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
class MedicoControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private JacksonTester<DatosRegistroMedico> datosRegistroMedicoJson;
@Autowired
private JacksonTester<DatosRespuestaMedico> datosRespuestaMedicoJson;
@Autowired
private MedicoRepository medicoRepository;
@Test
@DisplayName("Deberia devolver codigo http 400 cuando las informaciones son invalidas")
@WithMockUser
void registrarMedico_escenario1() throws Exception {
var response = mockMvc.perform(post("/medicos"))
.andReturn().getResponse();
assertThat(response.getStatus())
.isEqualTo(HttpStatus.BAD_REQUEST.value());
}
@Test
@DisplayName("Deberia devolver codigo http 200 cuando las informaciones son validas")
@WithMockUser
void registrarMedico_escenario2() throws Exception {
var datosRegistro = new DatosRegistroMedico(
"medico",
"medico@gmail.com",
"456789",
"765432",
Especialidad.CARDIOLOGIA,
datosDireccion());
when(medicoRepository.save(any())).thenReturn(new Medico(datosRegistro));
var response = mockMvc.perform(post("/medicos")
.contentType(MediaType.APPLICATION_JSON)
.content(datosRegistroMedicoJson.write(datosRegistro).getJson()))
.andReturn().getResponse();
var datosRespuesta = new DatosRespuestaMedico(
datosRegistro.nombre(),
datosRegistro.email(),
datosRegistro.documento(),
datosRegistro.telefono(),
datosRegistro.especialidad(),
new Direccion(datosRegistro.direccion())
);
var jsonEsperado = datosRespuestaMedicoJson.write(datosRespuesta).getJson();
assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED.value());
assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);
}
private DatosDireccion datosDireccion() {
return new DatosDireccion(
"calle Entre Rios",
"distrito",
"Santa Fe",
"321",
"complemento"
);
}
}
El primer test pasa, pero el segundo me marca error (rojo)" datosRegistro.nombre()," " datosRegistro.especialidad(), new Direccion(datosRegistro.direccion())"