package hs.fulda.de.ci.exam.project; import org.junit.Assert; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.mockito.InjectMocks; import org.mockito.Mock; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; import org.mockito.junit.jupiter.MockitoExtension; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @ExtendWith(MockitoExtension.class) public class ItineraryTest { final Address address1 = new Address("Fuldaer str", "Fulda", "Hessen", "36037", "Germany"); final Airport airport_fr = new Airport("Fraport", address1, "1234"); final Airport airport_be = new Airport("Berlin", address1, "5678"); final Itinerary item2 = new Itinerary(airport_be, airport_fr, new Date()); @InjectMocks final Customer person1 = new Customer("Max Mustermann", address1, "max.mustermann@gmail.com", "015147890206"); final Itinerary item1 = new Itinerary(airport_fr, airport_be, new Date()); @Mock private ItineraryRepository itineraryRepo; @Mock private FlightReservationRepository flightReservationRepository; @Test public void test_makePayment() { ArrayList itineraries = new ArrayList<>(); itineraries.add(item1); itineraries.add(item2); when(person1.getItineraries()).thenReturn(itineraries); boolean actualWithCredit = item1.makePayment(new FlightReservation(),"Credit", person1, 450); boolean actualWithCash = item1.makePayment(new FlightReservation(), "Cash", person1, 450); boolean actualWithCheck = item1.makePayment(new FlightReservation(), "Check", person1, 450); boolean actualEmpty = item1.makePayment(new FlightReservation(), " ", person1, 450); assertEquals(true, actualWithCash, "The Payment method is successfully chosen"); assertEquals(true, actualWithCash, "The Payment method is successfully chosen"); assertEquals(true, actualWithCredit, "The Payment method is successfully chosen"); assertEquals(true, actualWithCheck, "The Payment method is successfully chosen"); assertEquals(false, actualEmpty, "The Payment method is wrong"); } @Test public void test_makePaymentStatus(){ FlightReservation flightReservation = new FlightReservation(); item1.makePayment(flightReservation,"Credit", person1, 450); assertEquals(flightReservation.getStatus(), ReservationStatus.Pending); } @Test @DisplayName("Should Not Make Reservation when Passenger name is null") public void shouldThrowRuntimeExceptionWhenNameIsNull() { String msg = null; try { item1.makeReservation(new FlightSeat(1000.0, "5"), new Passenger("", "Ab", new Date())); } catch (Exception e) { msg = e.getMessage(); } assertEquals("Name cannot be null or empty", msg); } @DisplayName("Should Not Make Reservation when Passenger passport number is invalid") @ParameterizedTest @MethodSource("passportNumberList") public void shouldThrowRuntimeExceptionWhenPhoneNumberIsNull(String passportNumber) { String msg = null; try { item1.makeReservation(new FlightSeat(1000.0, "5"), new Passenger("John", passportNumber, new Date())); } catch (Exception e) { msg = e.getMessage(); } assertEquals("Passport number cannot be null or empty", msg); } private static List passportNumberList() { return Arrays.asList("A2", "000000", "AB231837%8"); } @Test @DisplayName("Should Not Make Reservation when Passenger Birthdate is null") public void shouldThrowRuntimeExceptionWhenDateIsNull() { assertThrows(RuntimeException.class, () -> { item1.makeReservation(new FlightSeat(1000.0, "5"), new Passenger("John", "AB127389", null)); }); } @Test public void test_makeReservation() { FlightReservation flightreservation = item2.makeReservation(new FlightSeat(1000.0, "5"), new Passenger("John", "AB2389", new Date())); assertNotNull(flightreservation); assertEquals(flightreservation.getStatus(), ReservationStatus.Requested); } }