Mi ejercicio, sin dar una fecha especifica.
package med.voll.api.domain.consulta.validaciones;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.time.LocalDateTime;
import jakarta.validation.ValidationException;
import med.voll.api.domain.consulta.dto.DatosAgendarConsulta;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
class HorarioDeFuncionamientoClinicaTest {
private HorarioDeFuncionamientoClinica validador;
private DatosAgendarConsulta datos;
@BeforeEach
void setup() {
validador = new HorarioDeFuncionamientoClinica();
datos = mock(DatosAgendarConsulta.class); // Mockeamos el DTO de entrada
}
@Test
@DisplayName("Debería permitir agendar consulta en horario válido")
void validarEscenarioExitoso() {
// Lunes a las 10:00
var proximoLunes = LocalDateTime.now().with(java.time.temporal.TemporalAdjusters.next(java.time.DayOfWeek.MONDAY)).withHour(10);
when(datos.fecha()).thenReturn(proximoLunes);
assertDoesNotThrow(() -> validador.validar(datos));
}
@Test
@DisplayName("Debería lanzar excepción si es domingo")
void validarEscenarioDomingo() {
// Un domingo cualquiera
var proximoDomingo = LocalDateTime.now().with(java.time.temporal.TemporalAdjusters.next(java.time.DayOfWeek.SUNDAY));
when(datos.fecha()).thenReturn(proximoDomingo);
var exception = assertThrows(ValidationException.class, () -> validador.validar(datos));
assertEquals("El horario de atención de la clínica es de lunes a sábado, de 07:00 a 19:00 horas", exception.getMessage());
}
@Test
@DisplayName("Debería lanzar excepción antes de las 7:00 AM")
void validarEscenarioAntesApertura() {
var lunesMuyTemprano = LocalDateTime.now().with(java.time.temporal.TemporalAdjusters.next(java.time.DayOfWeek.MONDAY)).withHour(6);
when(datos.fecha()).thenReturn(lunesMuyTemprano);
assertThrows(ValidationException.class, () -> validador.validar(datos));
}
@Test
@DisplayName("Debería lanzar excepción después de las 7:00 PM")
void validarEscenarioDespuesCierre() {
var lunesMuyTarde = LocalDateTime.now().with(java.time.temporal.TemporalAdjusters.next(java.time.DayOfWeek.MONDAY)).withHour(20);
when(datos.fecha()).thenReturn(lunesMuyTarde);
assertThrows(ValidationException.class, () -> validador.validar(datos));
}
}