Issue406Test.java

package com.cronutils;

import com.cronutils.model.CronType;
import com.cronutils.model.definition.CronDefinition;
import com.cronutils.model.definition.CronDefinitionBuilder;
import com.cronutils.model.time.ExecutionTime;
import com.cronutils.parser.CronParser;
import org.junit.jupiter.api.Test;

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Optional;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class Issue406Test {
    @Test
    public void testDayOfWeekIsCorrectlyApplied() {
        // GIVEN a spring cron operating at 1AM every weekday
        final CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(CronType.SPRING);
        final CronParser parser = new CronParser(cronDefinition);
        final ExecutionTime execTime = ExecutionTime.forCron(parser.parse("0 0 1 * * MON-FRI"));

        // WHEN I get the next execution at 3AM on Saturday
        final ZonedDateTime threeAmFifthJanuary2019 = ZonedDateTime.of(
            LocalDate.of(2019, 1, 5),
            LocalTime.of(3, 0),
            ZoneId.systemDefault()
        );
        final Optional<ZonedDateTime> nextExecution = execTime.nextExecution(threeAmFifthJanuary2019);
        
        // THEN the result is 1AM on Monday
        assertEquals(
            Optional.of(
                    ZonedDateTime.of(
                    LocalDate.of(2019, 1, 7),
                    LocalTime.of(1, 0),
                    ZoneId.systemDefault()
                )
            ),
            nextExecution
        );
    }
}