@WebMvcTest(MedicoController.class)
@AutoConfigureJsonTesters
@WithMockUser
class MedicoControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private MedicoRepository repository;
@Autowired
private JacksonTester<DatosRegistroMedico> registroJson;
@Autowired
private JacksonTester<DatosDetalleMedico> detalleJson;
@Test
void registrar_medico_sin_body_retorna_400() throws Exception {
mockMvc.perform(post("/medicos"))
.andExpect(status().isBadRequest());
}
@Test
void registrar_medico_con_body_valido_retorna_201_y_json() throws Exception {
DatosDireccion direccion = datosDireccion();
MedicoJPA medico = new MedicoJPA(
null,
true,
"Médico01",
"medico01@mail.com",
"3008882121",
"1897000",
Especialidad.CARDIOLOGIA,
new DireccionJPA(direccion)
);
when(repository.save(any())).thenReturn(medico);
var requestBody = registroJson.write(
new DatosRegistroMedico(
"Médico01",
"medico01@mail.com",
"3008882121",
"1897000",
Especialidad.CARDIOLOGIA,
direccion
)
).getJson();
var response = mockMvc.perform(post("/medicos")
.contentType(MediaType.APPLICATION_JSON)
.content(requestBody))
.andExpect(status().isCreated())
.andReturn()
.getResponse();
var jsonEsperado = detalleJson.write(new DatosDetalleMedico(medico)).getJson();
assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);
}