package com.cronutils;

import com.cronutils.model.Cron;
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.Assertions;
import org.junit.jupiter.api.Test;

import java.time.ZonedDateTime;
import java.util.Optional;

class Issue528Test {

    static final CronDefinition REBOOT_CRON_DEFINITION = CronDefinitionBuilder.defineCron()
            .withSupportedNicknameReboot()
            .instance();

    @Test
    void testRebootExecutionTime() {
        Cron cron = new CronParser(REBOOT_CRON_DEFINITION).parse("@reboot");
        ExecutionTime executionTime = ExecutionTime.forCron(cron);
        Assertions.assertEquals(Optional.empty(), executionTime.nextExecution(ZonedDateTime.now()));
        Assertions.assertEquals(Optional.empty(), executionTime.lastExecution(ZonedDateTime.now()));
    }
}

package com.cronutils;

import com.cronutils.descriptor.CronDescriptor;
import com.cronutils.mapper.CronMapper;
import com.cronutils.model.Cron;
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.Assertions;
import org.junit.jupiter.api.Test;

import java.time.ZonedDateTime;
import java.util.Locale;
import java.util.Optional;

class Issue528Test {

    static final CronDefinition REBOOT_CRON_DEFINITION = CronDefinitionBuilder.defineCron()
            .withSupportedNicknameReboot()
            .instance();

    @Test
    void testRebootExecutionTime() {
        Cron cron = new CronParser(REBOOT_CRON_DEFINITION).parse("@reboot");
        ExecutionTime executionTime = ExecutionTime.forCron(cron);
        Assertions.assertEquals(Optional.empty(), executionTime.nextExecution(ZonedDateTime.now()));
        Assertions.assertEquals(Optional.empty(), executionTime.lastExecution(ZonedDateTime.now()));
    }

    @Test
    void testCronDescriptor() {
        Cron cron = new CronParser(REBOOT_CRON_DEFINITION).parse("@reboot");
        String description = CronDescriptor.instance(Locale.UK).describe(cron);
        Assertions.assertEquals("on reboot", description);
    }


    @Test
    void testCronMapper() {
        Cron cron = new CronParser(REBOOT_CRON_DEFINITION).parse("@reboot");
        CronDefinition unix = CronDefinitionBuilder.defineCron()
                .withMinutes().withValidRange(0, 59).withStrictRange().and()
                .withHours().withValidRange(0, 23).withStrictRange().and()
                .withDayOfMonth().withValidRange(1, 31).withStrictRange().and()
                .withMonth().withValidRange(1, 12).withStrictRange().and()
                .withDayOfWeek().withValidRange(0, 7).withMondayDoWValue(1).withIntMapping(7, 0).withStrictRange().and()
                .withSupportedNicknameReboot()
                .instance();
        Cron mapped = CronMapper.sameCron(unix).map(cron);
        Assertions.assertEquals(cron.asString(), mapped.asString());
    }
}

Add unit tests for CronDescriptor & CronMapper