diff --git a/src/main/java/hs/fulda/de/ci/exam/project/FrontDeskOfficer.java b/src/main/java/hs/fulda/de/ci/exam/project/FrontDeskOfficer.java new file mode 100644 index 0000000..941be16 --- /dev/null +++ b/src/main/java/hs/fulda/de/ci/exam/project/FrontDeskOfficer.java @@ -0,0 +1,42 @@ +package hs.fulda.de.ci.exam.project; + +import java.util.Collection; +import java.util.Date; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class FrontDeskOfficer extends Person{ + + Map itineraryList = new ConcurrentHashMap(); + + public FrontDeskOfficer(String name, Address address, String email, String phone) { + super(name, address, email, phone); + } + + public void createItinerary(Airport start_airport, Airport final_airport, Date date){ + Itinerary itinerary = new Itinerary(start_airport, final_airport, date); + validateItinerary(itinerary); + checkIfItineraryAlreadyExist(itinerary); + itineraryList.put(generateKey(itinerary), itinerary); + } + + public Collection getAllItineraries() { + return itineraryList.values(); + } + + private void checkIfItineraryAlreadyExist(Itinerary itinerary){ + if(itineraryList.containsKey(generateKey(itinerary))){ + throw new RuntimeException("Itinerary Already Exists"); + } + } + + private String generateKey(Itinerary itinerary) { + return String.format("%s-%s", itinerary.getStart_airport(), itinerary.getFinal_airport()); + } + + public void validateItinerary(Itinerary itinerary){ + itinerary.validateStartAirport(); + itinerary.validateFinalAirport(); + itinerary.validateCreationDate(); + } +} diff --git a/src/main/java/hs/fulda/de/ci/exam/project/Itinerary.java b/src/main/java/hs/fulda/de/ci/exam/project/Itinerary.java index d91c9fe..00f9b5a 100644 --- a/src/main/java/hs/fulda/de/ci/exam/project/Itinerary.java +++ b/src/main/java/hs/fulda/de/ci/exam/project/Itinerary.java @@ -73,5 +73,18 @@ public class Itinerary { this.start_airport = start_airport; } + public void validateStartAirport() { + if(this.start_airport.getName().isBlank()) + throw new RuntimeException(("Starting Airport Cannot be null or empty")); + } + + public void validateFinalAirport() { + if(this.final_airport.getName().isBlank()) + throw new RuntimeException(("Destination Airport Cannot be null or empty")); + } + public void validateCreationDate() { + if(this.creationDate.equals(null)) + throw new RuntimeException(("Creation Date should not be null or empty")); + } } diff --git a/src/test/java/hs/fulda/de/ci/exam/project/FrontDeskOfficerTest.java b/src/test/java/hs/fulda/de/ci/exam/project/FrontDeskOfficerTest.java new file mode 100644 index 0000000..cfb742c --- /dev/null +++ b/src/test/java/hs/fulda/de/ci/exam/project/FrontDeskOfficerTest.java @@ -0,0 +1,53 @@ +package hs.fulda.de.ci.exam.project; + +import org.junit.Before; +import org.junit.jupiter.api.*; +import org.mockito.InjectMocks; + +import java.util.Date; + +import static org.junit.jupiter.api.Assertions.*; + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +public class FrontDeskOfficerTest { + + Address address1; + Airport airport_fr; + Airport airport_be; + FrontDeskOfficer frontDeskOfficer; + + @BeforeAll + public void setupAll(){ + System.out.println("Should Print Before All Tests"); + } + @BeforeEach + public void setup(){ + address1 = new Address("Fuldaer str", "Fulda", "Hessen", "36037", "Germany"); + airport_fr = new Airport("Fraport", address1, "1234"); + airport_be = new Airport("Berlin", address1, "5678"); + frontDeskOfficer = new FrontDeskOfficer("John", address1, "example@email.com", "0151238967"); + } + @Test + public void shouldCreateItinerary() { + frontDeskOfficer.createItinerary(airport_fr, airport_be, new Date()); + assertFalse(frontDeskOfficer.getAllItineraries().isEmpty()); + assertEquals(1, frontDeskOfficer.getAllItineraries().size()); + assertTrue(frontDeskOfficer.getAllItineraries().stream().filter(itinerary -> itinerary.getStart_airport().equals(airport_fr) && + itinerary.getFinal_airport().equals(airport_be)).findAny().isPresent()); + } + @Test + @DisplayName("Should Not Create Itinerary when Starting Airport is null") + public void shouldThrowRuntimeExceptionWhenStartAirportIsNull(){ + assertThrows(RuntimeException.class, () -> { + frontDeskOfficer.createItinerary(null, airport_be, new Date()); + }); + } + + @Test + @DisplayName("Should Not Create Itinerary when Destination Airport is null") + public void shouldThrowRuntimeExceptionWhenFinalAirportIsNull(){ + assertThrows(RuntimeException.class, () -> { + frontDeskOfficer.createItinerary(airport_fr, airport_be, null); + }); + } +}