Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
0
respuestas

Haga lo que aprendimos

package med.voll.api.domain.consulta.validaciones;

import jakarta.validation.ValidationException; import med.voll.api.domain.consulta.dto.DatosAgendarConsulta; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mockito;

import java.time.LocalDateTime;

import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertThrows;

class HorarioDeFuncionamientoClinicaTest {

private HorarioDeFuncionamientoClinica validador;
private DatosAgendarConsulta datosMock;

@BeforeEach
void setUp() {
    validador = new HorarioDeFuncionamientoClinica();
    datosMock = Mockito.mock(DatosAgendarConsulta.class); // Crear el mock una sola vez
}

@Test
void validar_citaDentroDelHorario_noLanzaExcepcion() {
    // Arrange
    Mockito.when(datosMock.fecha()).thenReturn(LocalDateTime.of(2025, 1, 15, 10, 0)); // Miércoles 10:00 AM

    // Act & Assert
    assertDoesNotThrow(() -> validador.validar(datosMock), 
        "Una cita dentro del horario de atención no debería lanzar una excepción.");
}

@Test
void validar_citaAntesDeApertura_lanzaExcepcion() {
    // Arrange
    Mockito.when(datosMock.fecha()).thenReturn(LocalDateTime.of(2025, 1, 15, 6, 0)); // Miércoles 6:00 AM

    // Act & Assert
    assertThrows(ValidationException.class, () -> validador.validar(datosMock), 
        "Una cita antes de la hora de apertura debería lanzar una excepción.");
}

@Test
void validar_citaDespuesDeCierre_lanzaExcepcion() {
    // Arrange
    Mockito.when(datosMock.fecha()).thenReturn(LocalDateTime.of(2025, 1, 15, 20, 0)); // Miércoles 8:00 PM

    // Act & Assert
    assertThrows(ValidationException.class, () -> validador.validar(datosMock), 
        "Una cita después de la hora de cierre debería lanzar una excepción.");
}

@Test
void validar_citaEnDomingo_lanzaExcepcion() {
    // Arrange
    Mockito.when(datosMock.fecha()).thenReturn(LocalDateTime.of(2025, 1, 19, 10, 0)); // Domingo 10:00 AM

    // Act & Assert
    assertThrows(ValidationException.class, () -> validador.validar(datosMock), 
        "Una cita en domingo debería lanzar una excepción.");
}

@Test
void validar_fechaNula_lanzaExcepcion() {
    // Arrange
    Mockito.when(datosMock.fecha()).thenReturn(null);

    // Act & Assert
    assertThrows(ValidationException.class, () -> validador.validar(datosMock), 
        "Una cita con fecha nula debería lanzar una excepción.");
}

@Test
void validar_citaExactamenteHoraDeApertura_noLanzaExcepcion() {
    // Arrange
    Mockito.when(datosMock.fecha()).thenReturn(LocalDateTime.of(2025, 1, 15, 7, 0)); // Miércoles 7:00 AM

    // Act & Assert
    assertDoesNotThrow(() -> validador.validar(datosMock), 
        "Una cita a la hora exacta de apertura no debería lanzar una excepción.");
}

@Test
void validar_citaExactamenteHoraDeCierre_noLanzaExcepcion() {
    // Arrange
    Mockito.when(datosMock.fecha()).thenReturn(LocalDateTime.of(2025, 1, 15, 19, 0)); // Miércoles 7:00 PM

    // Act & Assert
    assertDoesNotThrow(() -> validador.validar(datosMock), 
        "Una cita a la hora exacta de cierre no debería lanzar una excepción.");
}

@Test
void validar_citaEnElPasado_noLanzaExcepcion() {
    // Arrange
    Mockito.when(datosMock.fecha()).thenReturn(LocalDateTime.of(2020, 1, 15, 10, 0)); // Miércoles en el pasado

    // Act & Assert
    assertDoesNotThrow(() -> validador.validar(datosMock), 
        "Una cita en el pasado no debería lanzar una excepción según las reglas actuales.");
}

@Test
void validar_citaInmediatamenteDespuesDeApertura_noLanzaExcepcion() {
    // Arrange
    Mockito.when(datosMock.fecha()).thenReturn(LocalDateTime.of(2025, 1, 15, 7, 1)); // Miércoles 7:01 AM

    // Act & Assert
    assertDoesNotThrow(() -> validador.validar(datosMock), 
        "Una cita justo después de la hora de apertura no debería lanzar una excepción.");
}

@Test
void validar_citaInmediatamenteDespuesDeCierre_lanzaExcepcion() {
    // Arrange
    Mockito.when(datosMock.fecha()).thenReturn(LocalDateTime.of(2025, 1, 15, 19, 1)); // Miércoles 7:01 PM

    // Act & Assert
    assertThrows(ValidationException.class, () -> validador.validar(datosMock), 
        "Una cita justo después de la hora de cierre debería lanzar una excepción.");
}

}