MedicoControllerTest
package med.voll.api.controller;
import med.voll.api.domain.direccion.DatosDireccion;
import med.voll.api.domain.direccion.DireccionJPA;
import med.voll.api.domain.medico.*;
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.bean.override.mockito.MockitoBean;
import org.springframework.test.web.servlet.MockMvc;
import static org.assertj.core.api.Assertions.assertThat;
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
@WithMockUser
class MedicoControllerTest {
private final MockMvc mockMvc;
@MockitoBean
private MedicoRepository repository;
@Autowired
private JacksonTester<DatosRegistroMedico> datosRegistroMedicoJson;
@Autowired
private JacksonTester<DatosDetalleMedico> datosDetalleMedicoJson;
@Autowired
MedicoControllerTest(MockMvc mockMvc) {
this.mockMvc = mockMvc;
}
@Test
void registrarMedicoSinBodyRespondeStatus400() throws Exception {
var resp = mockMvc.perform(post("/medicos")).andReturn().getResponse();
assertThat(resp.getStatus()).isEqualTo(HttpStatus.BAD_REQUEST.value());
}
@Test
void registrarMedicoConBodyValidoRespondeStatus200() throws Exception {
var datosDireccion = datosDireccion();
var medico = new MedicoJPA(
null, true, "Médico01", "medico01@mail.com", "3008882121",
"1897000", Especialidad.CARDIOLOGIA, new DireccionJPA(datosDireccion)
);
when(repository.save(any())).thenReturn(medico);
var response = mockMvc.perform(post("/medicos")
.contentType(MediaType.APPLICATION_JSON)
.content(datosRegistroMedicoJson
.write(new DatosRegistroMedico("Médico01", "medico01@mail.com",
"3008882121", "1897000", Especialidad.CARDIOLOGIA,
datosDireccion))
.getJson()))
.andReturn()
.getResponse();
var jsonEsperado = datosDetalleMedicoJson.write(new DatosDetalleMedico(medico)).getJson();
assertThat(response.getStatus()).isEqualTo(HttpStatus.CREATED.value());
assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);
}
private DatosDireccion datosDireccion() {
return new DatosDireccion(
"Calle Mariano Carranza",
"32156",
"Complemento",
"Barrio",
"Ciudad"
);
}
}