package oving5.ticket; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.time.LocalDateTime; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; public class PeriodTicketTest { @Test @DisplayName("Check that the ticket is valid within the period") public void testIsValidWhenWithinPeriod() { LocalDateTime start = LocalDateTime.now().minusDays(1); LocalDateTime end = LocalDateTime.now().plusDays(1); PeriodTicket ticket = new PeriodTicket(start, end); assertTrue(ticket.scan(), "The ticket should be valid within the period"); } @Test @DisplayName("Check that the ticket is not valid before the period") public void testIsNotValidWhenBeforePeriod() { LocalDateTime start = LocalDateTime.now().plusDays(1); LocalDateTime end = LocalDateTime.now().plusDays(2); PeriodTicket ticket = new PeriodTicket(start, end); assertFalse(ticket.scan(), "The ticket should not be valid before the period"); } @Test @DisplayName("Check that the ticket is not valid after the period") public void testIsNotValidWhenAfterPeriod() { LocalDateTime start = LocalDateTime.now().minusDays(2); LocalDateTime end = LocalDateTime.now().minusDays(1); PeriodTicket ticket = new PeriodTicket(start, end); assertFalse(ticket.scan(), "The ticket should not be valid after the period"); } @Test @DisplayName("Check that the ticket throws IllegalArgumentException when the start date is " + "after the end date") public void testThrowsExceptionWhenStartIsAfterEnd() { LocalDateTime start = LocalDateTime.now().plusDays(1); LocalDateTime end = LocalDateTime.now().minusDays(1); assertThrows(IllegalArgumentException.class, () -> { new PeriodTicket(start, end); }, "The ticket should throw IllegalArgumentException when the start date is after the " + "end date"); } }