Issue394Test.java

package com.cronutils;

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.DayOfWeek;
import java.time.ZonedDateTime;
import java.util.Optional;

import static com.cronutils.model.CronType.SPRING;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class Issue394Test {

    @Test
    public void testEveryMondayAt0900hours() {
        String cron = "0 0 9 * * MON";

        CronDefinition cronDefinition = CronDefinitionBuilder.instanceDefinitionFor(SPRING);
        CronParser parser = new CronParser(cronDefinition);
        ExecutionTime executionTime = ExecutionTime.forCron(parser.parse(cron));
        ZonedDateTime now = ZonedDateTime.now();
        Optional<ZonedDateTime> nextExecution = executionTime.nextExecution(now);
        assertTrue(nextExecution.isPresent());
        // Should be the next Monday at 0900 hours
        assertEquals(DayOfWeek.MONDAY, nextExecution.get().getDayOfWeek());
        assertEquals(9, nextExecution.get().getHour());
        // The next execution after that should also be a Monday at 0900 hours, the following week
        ZonedDateTime nextExpectedExecution = nextExecution.get().plusWeeks(1);
        nextExecution = executionTime.nextExecution(nextExecution.get());
        assertTrue(nextExecution.isPresent());
        assertEquals(DayOfWeek.MONDAY, nextExecution.get().getDayOfWeek());
        assertEquals(9, nextExecution.get().getHour());
        assertEquals(nextExpectedExecution, nextExecution.get());
    }
}