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

[Sugerencia] Sobre Test

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));
    }
}