Issue363Test.java

package com.cronutils;

import com.cronutils.model.CronType;
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.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Optional;

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

public class Issue363Test {

    @Test
    public void everySecondOfMinute01Test() {
        // every second of the first minute of every hour/day/year
        String cronExpression = "* 1 * * * ?";
        CronParser parser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ));
        ExecutionTime executionTime = ExecutionTime.forCron(parser.parse(cronExpression));

        ZonedDateTime now = ZonedDateTime.of(2019, 1, 1, 0, 0, 0, 0, ZoneOffset.UTC);
        Optional<ZonedDateTime> nextExecution = executionTime.nextExecution(now);

        assertTrue(nextExecution.isPresent());
        // First match should be 2019-01-01T00:01:00Z
        ZonedDateTime expectedTime = ZonedDateTime.of(2019, 1, 1, 0, 1, 0, 0, ZoneOffset.UTC);
        assertEquals(expectedTime, nextExecution.get());

        // Should also match the next 59 seconds
        for (int i = 1; i <= 59; i++) {
            nextExecution = executionTime.nextExecution(nextExecution.get());
            assertTrue(nextExecution.isPresent());
            assertEquals(expectedTime.plusSeconds(i), nextExecution.get());
        }

        // After the every second of 00:01, it the next execution should be at 01:01:00Z
        nextExecution = executionTime.nextExecution(ZonedDateTime.of(2019, 1, 1, 0, 1, 59, 0, ZoneOffset.UTC));
        assertTrue(nextExecution.isPresent());
        expectedTime = ZonedDateTime.of(2019, 1, 1, 1, 1, 0, 0, ZoneOffset.UTC);
        assertEquals(expectedTime, nextExecution.get());
    }

    @Test
    public void everyMinute01Test() {
        // every minute 1 of every hour/day/year
        String cronExpression = "0 1 * * * ?";
        ZonedDateTime now = ZonedDateTime.of(2019, 1, 1, 0, 1, 0, 0, ZoneOffset.UTC);
        CronParser parser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ));

        Optional<ZonedDateTime> nextExecution = ExecutionTime.forCron(parser.parse(cronExpression)).nextExecution(now);

        assertTrue(nextExecution.isPresent());

        ZonedDateTime expectedTime = ZonedDateTime.of(2019, 1, 1, 1, 1, 0, 0, ZoneOffset.UTC);
        assertEquals(expectedTime, nextExecution.get());
    }
}