Browse Source

Merge commit '92b8141bd63863c2294269dc0689d2b087480e40' into HEAD

dev
JenkinsSonaImron 3 years ago
parent
commit
fda030cbd5
  1. 8
      src/main/java/hs/fulda/de/ci/exam/project/Admin.java
  2. 4
      src/main/java/hs/fulda/de/ci/exam/project/Airport.java
  3. 4
      src/main/java/hs/fulda/de/ci/exam/project/Customer.java
  4. 4
      src/main/java/hs/fulda/de/ci/exam/project/Flight.java
  5. 20
      src/main/java/hs/fulda/de/ci/exam/project/FlightRepository.java
  6. 1
      src/main/java/hs/fulda/de/ci/exam/project/FlightReservation.java
  7. 36
      src/main/java/hs/fulda/de/ci/exam/project/FlightReservationRepository.java
  8. 32
      src/main/java/hs/fulda/de/ci/exam/project/Itinerary.java
  9. 36
      src/main/java/hs/fulda/de/ci/exam/project/Passenger.java
  10. 23
      src/main/java/hs/fulda/de/ci/exam/project/Person.java
  11. 7
      src/test/java/hs/fulda/de/ci/exam/project/AdminTest.java
  12. 77
      src/test/java/hs/fulda/de/ci/exam/project/ItineraryTest.java
  13. 38
      src/test/java/hs/fulda/de/ci/exam/project/PersonTest.java

8
src/main/java/hs/fulda/de/ci/exam/project/Admin.java

@ -28,14 +28,6 @@ public class Admin extends Person{
return aircraftDetails; return aircraftDetails;
} }
public String searchFlights(String flightNumber){
String flightDetails = flightRepository.findFlightByFlightNumber(flightNumber);
if(flightDetails.isBlank()){
throw new RuntimeException("Flight does not exist.");
}
return flightDetails;
}
public Flight addFlight(String flightNumber, Airport departure, Airport arrival, int durationInMinutes ) throws IOException { public Flight addFlight(String flightNumber, Airport departure, Airport arrival, int durationInMinutes ) throws IOException {
if(flightNumber.isBlank()) throw new RuntimeException("FlightNumber cannot be null or empty"); if(flightNumber.isBlank()) throw new RuntimeException("FlightNumber cannot be null or empty");
if(departure.equals(null)) throw new RuntimeException("Departure cannot be null or empty"); if(departure.equals(null)) throw new RuntimeException("Departure cannot be null or empty");

4
src/main/java/hs/fulda/de/ci/exam/project/Airport.java

@ -15,6 +15,10 @@ public class Airport {
this.code = code; this.code = code;
} }
public Airport() {
}
public String getName() { public String getName() {
return this.name; return this.name;
} }

4
src/main/java/hs/fulda/de/ci/exam/project/Customer.java

@ -6,7 +6,6 @@ import java.util.ArrayList;
public class Customer extends Person{ public class Customer extends Person{
private String frequentFlyerNumber; private String frequentFlyerNumber;
private ItineraryRepository itineraryRepository;
@ -22,7 +21,4 @@ public class Customer extends Person{
return frequentFlyerNumber; return frequentFlyerNumber;
} }
public ArrayList<Itinerary> getItineraries() {
return itineraryRepository.findAll();
}
} }

4
src/main/java/hs/fulda/de/ci/exam/project/Flight.java

@ -18,6 +18,10 @@ public class Flight {
this.durationInMinutes = durationInMinutes; this.durationInMinutes = durationInMinutes;
} }
public Flight() {
}
public HashSet<FlightInstance> getInstances() { public HashSet<FlightInstance> getInstances() {
return this.flightInstances; return this.flightInstances;
} }

20
src/main/java/hs/fulda/de/ci/exam/project/FlightRepository.java

@ -1,6 +1,7 @@
package hs.fulda.de.ci.exam.project; package hs.fulda.de.ci.exam.project;
import java.io.*; import java.io.*;
import java.util.ArrayList;
import java.util.Scanner; import java.util.Scanner;
public class FlightRepository { public class FlightRepository {
@ -29,4 +30,23 @@ public class FlightRepository {
} }
return ""; return "";
} }
public ArrayList<String> findbyDepartureArrival(Airport departure, Airport arrival) {
ArrayList<String> flights = new ArrayList<>();
File file = new File("flights.txt");
try {
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if(line.matches("(.*)"+departure+"(.*)") && line.matches("(.*)"+arrival+"(.*)")) {
flights.add(line);
}
}
} catch(FileNotFoundException e) {
System.out.println("There are no flights added yet. Please add a flight");
}
return flights;
}
} }

1
src/main/java/hs/fulda/de/ci/exam/project/FlightReservation.java

@ -24,7 +24,6 @@ public class FlightReservation {
} }
public String getReservationNumber() { public String getReservationNumber() {
return reservationNumber; return reservationNumber;
} }

36
src/main/java/hs/fulda/de/ci/exam/project/FlightReservationRepository.java

@ -1,8 +1,36 @@
package hs.fulda.de.ci.exam.project; package hs.fulda.de.ci.exam.project;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class FlightReservationRepository {
Map<String, FlightReservation> flightReservationList = new ConcurrentHashMap<String, FlightReservation>();
public boolean checkIfFlightAlreadyExist(FlightReservation flightReservation){
if(flightReservationList.containsKey(generateKey(flightReservation))){
return true;
}
return false;
}
FlightReservation findById(String id){
FlightReservation flightReservation = flightReservationList.get(id);
return flightReservation;
}
private String generateKey(FlightReservation flightReservation) {
return String.format("%s", flightReservation.getReservationNumber());
}
public Collection<FlightReservation> findAll() {
return flightReservationList.values();
}
public boolean save(FlightReservation flightReservation){
flightReservationList.put(generateKey(flightReservation), flightReservation);
return true;
}
public void delete(FlightReservation flightReservation) {
flightReservationList.remove(generateKey(flightReservation));
}
public interface FlightReservationRepository {
ArrayList<FlightReservation> findAll();
void save(FlightReservation flightReservation);
} }

32
src/main/java/hs/fulda/de/ci/exam/project/Itinerary.java

@ -1,6 +1,7 @@
package hs.fulda.de.ci.exam.project; package hs.fulda.de.ci.exam.project;
import java.util.Date; import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
public class Itinerary { public class Itinerary {
@ -15,38 +16,35 @@ public class Itinerary {
this.creationDate = creationDate; this.creationDate = creationDate;
} }
public List<FlightReservation> getReservations(){
return flightReservationRepository.findAll();
}
public float makeDiscount(float fare, float discountRate){ public float makeDiscount(float fare, float discountRate){
fare = fare - (fare * discountRate/100); fare = fare - (fare * discountRate/100);
return fare; return fare;
} }
public boolean makePayment(String transactionType, Customer customer, float fare){
public boolean makePayment(FlightReservation flightReservation, String transactionType, Customer customer, float fare){
if(customer.getItineraries().size() >= 2) { if(customer.getItineraries().size() >= 2) {
fare = makeDiscount(fare, 10); fare = makeDiscount(fare, 10);
if (transactionType == "Credit") { if (transactionType == "Credit") {
fare = makeDiscount(fare, 15); fare = makeDiscount(fare, 15);
System.out.println("Your discount rate is 15%. The total amount of: " + fare + "Euro"); System.out.println("Your discount rate is 15%. The total amount of: " + fare + "Euro");
return true; return true;
}
else if(transactionType == "Cash" || transactionType == "Check") {
} else if (transactionType == "Cash" || transactionType == "Check") {
System.out.println("Your discount rate is 10%. The total amount of: " + fare + "Euro"); System.out.println("Your discount rate is 10%. The total amount of: " + fare + "Euro");
return true; return true;
} }
} }
flightReservation.setStatus(ReservationStatus.Pending);
return false; return false;
} }
public boolean makeReservation(Passenger passenger){
List<FlightReservation> flightReservations = getReservations();
public FlightReservation makeReservation(FlightSeat flightSeat, Passenger passenger){
HashMap<Passenger, FlightSeat> seatHashMap= new HashMap<Passenger, FlightSeat>();
seatHashMap.put(passenger, flightSeat);
validatePassengerDetails(passenger);
FlightReservation flight = new FlightReservation(); FlightReservation flight = new FlightReservation();
flightReservationRepository.save(flight);
return false;
flight.setSeatMap(seatHashMap);
flight.setStatus(ReservationStatus.Requested);
return flight;
} }
public Airport getFinal_airport() { public Airport getFinal_airport() {
@ -86,5 +84,13 @@ public class Itinerary {
if(this.creationDate.equals(null)) if(this.creationDate.equals(null))
throw new RuntimeException(("Creation Date should not be null or empty")); throw new RuntimeException(("Creation Date should not be null or empty"));
} }
public void validatePassengerDetails(Passenger passenger){
passenger.validateName();
passenger.validatePassportNumber();
passenger.validateDate();
}
} }

36
src/main/java/hs/fulda/de/ci/exam/project/Passenger.java

@ -1,4 +1,40 @@
package hs.fulda.de.ci.exam.project; package hs.fulda.de.ci.exam.project;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Passenger { public class Passenger {
private String name;
private String passportNumber;
private Date dateOfBirth;
public Passenger(String name, String passportNumber, Date dateOfBirth) {
this.name = name;
this.passportNumber = passportNumber;
this.dateOfBirth = dateOfBirth;
}
public void validateName() {
if(name.isBlank()) {
throw new RuntimeException(("Name cannot be null or empty"));
}
}
public void validatePassportNumber() {
Pattern pattern = Pattern.compile("^(?!^0+$)[a-zA-Z0-9]{3,20}$");
Matcher matcher = pattern.matcher(this.passportNumber);
if(passportNumber.isBlank()){
throw new RuntimeException("Passport number cannot be blank");
}
if(!matcher.matches()){
throw new RuntimeException("Passport number cannot be null or empty");
}
}
public void validateDate() {
if(dateOfBirth.equals(null)) {
throw new RuntimeException("Birthdate cannot be null");
}
}
} }

23
src/main/java/hs/fulda/de/ci/exam/project/Person.java

@ -1,5 +1,6 @@
package hs.fulda.de.ci.exam.project; package hs.fulda.de.ci.exam.project;
import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -9,6 +10,8 @@ public class Person {
private Address address; private Address address;
private String email; private String email;
private String phone; private String phone;
private FlightRepository flightRepository;
private ItineraryRepository itineraryRepository;
public Person(String name, Address address, String email, String phone) { public Person(String name, Address address, String email, String phone) {
this.name = name; this.name = name;
@ -67,4 +70,24 @@ public class Person {
throw new RuntimeException("Phone Number should start with 0"); throw new RuntimeException("Phone Number should start with 0");
} }
} }
public String searchFlights(String flightNumber){
String flightDetails = flightRepository.findFlightByFlightNumber(flightNumber);
if(flightDetails.isBlank()){
throw new RuntimeException("Flight does not exist.");
}
return flightDetails;
}
public ArrayList<String> searchAllFlightsByCriteria(Airport departure, Airport arrival){
ArrayList<String> flights = flightRepository.findbyDepartureArrival(departure, arrival);
if(flights.isEmpty()){
throw new RuntimeException("Flights do not exist.");
}
return flights;
}
public ArrayList<Itinerary> getItineraries() {
return itineraryRepository.findAll();
}
} }

7
src/test/java/hs/fulda/de/ci/exam/project/AdminTest.java

@ -98,13 +98,6 @@ public class AdminTest {
}); });
} }
@Test
public void test_searchFlight(){
when(flightRepository.findFlightByFlightNumber(any(String.class))).thenReturn(flight1.toString());
assertNotNull(admin.searchFlights("1"));
assertEquals(admin.searchFlights("1"), flight1.toString());
}
@Test @Test
public void test_searchFlightThrowsExceptionWhenBlank(){ public void test_searchFlightThrowsExceptionWhenBlank(){
when(flightRepository.findFlightByFlightNumber(any(String.class))).thenReturn(""); when(flightRepository.findFlightByFlightNumber(any(String.class))).thenReturn("");

77
src/test/java/hs/fulda/de/ci/exam/project/ItineraryTest.java

@ -1,15 +1,25 @@
package hs.fulda.de.ci.exam.project; 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.Test;
import org.junit.jupiter.api.extension.ExtendWith; 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.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date; import java.util.Date;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
public class ItineraryTest { public class ItineraryTest {
@ -17,14 +27,16 @@ public class ItineraryTest {
final Address address1 = new Address("Fuldaer str", "Fulda", "Hessen", "36037", "Germany"); final Address address1 = new Address("Fuldaer str", "Fulda", "Hessen", "36037", "Germany");
final Airport airport_fr = new Airport("Fraport", address1, "1234"); final Airport airport_fr = new Airport("Fraport", address1, "1234");
final Airport airport_be = new Airport("Berlin", address1, "5678"); final Airport airport_be = new Airport("Berlin", address1, "5678");
final Itinerary item2 = new Itinerary(airport_be, airport_fr, new Date());
@InjectMocks @InjectMocks
final Customer person1 = new Customer("Max Mustermann", address1, "max.mustermann@gmail.com", "015147890206"); final Customer person1 = new Customer("Max Mustermann", address1, "max.mustermann@gmail.com", "015147890206");
final Itinerary item1 = new Itinerary(airport_fr, airport_be, new Date()); final Itinerary item1 = new Itinerary(airport_fr, airport_be, new Date());
final Itinerary item2 = new Itinerary(airport_be, airport_fr, new Date());
@Mock @Mock
private ItineraryRepository itineraryRepo; private ItineraryRepository itineraryRepo;
@Mock
private FlightReservationRepository flightReservationRepository;
@Test @Test
public void test_makePayment() { public void test_makePayment() {
@ -35,10 +47,10 @@ public class ItineraryTest {
when(person1.getItineraries()).thenReturn(itineraries); when(person1.getItineraries()).thenReturn(itineraries);
boolean actualWithCredit = item1.makePayment("Credit", person1, 450);
boolean actualWithCash = item1.makePayment("Cash", person1, 450);
boolean actualWithCheck = item1.makePayment("Check", person1, 450);
boolean actualEmpty = item1.makePayment(" ", person1, 450);
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, actualWithCash, "The Payment method is successfully chosen"); assertEquals(true, actualWithCash, "The Payment method is successfully chosen");
@ -46,4 +58,55 @@ public class ItineraryTest {
assertEquals(true, actualWithCheck, "The Payment method is successfully chosen"); assertEquals(true, actualWithCheck, "The Payment method is successfully chosen");
assertEquals(false, actualEmpty, "The Payment method is wrong"); 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<String> 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);
}
} }

38
src/test/java/hs/fulda/de/ci/exam/project/PersonTest.java

@ -2,15 +2,37 @@ package hs.fulda.de.ci.exam.project;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource; import org.junit.jupiter.params.provider.ValueSource;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.ArrayList;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class)
public class PersonTest { public class PersonTest {
Address address_fr = new Address("Frankfurt str", "Frankfurt", "Hessen", "63023", "Germany");
Airport airport_fr = new Airport("Fraport", address_fr, "1234");
Address address1_ist = new Address("Istanbul str", "Istanbul", "Fatih", "9019", "Turkey");
Airport airport1_ist = new Airport("Istanbul", address1_ist, "5678");
Address address1 = new Address("Fuldaer str", "Fulda", "Hessen", "36037", "Germany"); Address address1 = new Address("Fuldaer str", "Fulda", "Hessen", "36037", "Germany");
@InjectMocks
Person person1 = new Person("Max Mustermann", address1, "max.mustermann@gmail.com", "015147890206"); Person person1 = new Person("Max Mustermann", address1, "max.mustermann@gmail.com", "015147890206");
@Mock
private FlightRepository flightRepository;
@Test @Test
void test_getName() { void test_getName() {
assertThat(person1.getName()).describedAs("get person name").isEqualTo("Max Mustermann"); assertThat(person1.getName()).describedAs("get person name").isEqualTo("Max Mustermann");
@ -29,4 +51,20 @@ public class PersonTest {
void test_getPhone() { void test_getPhone() {
assertThat(person1.getPhone()).describedAs("get person phone").isEqualTo("015147890206"); assertThat(person1.getPhone()).describedAs("get person phone").isEqualTo("015147890206");
} }
@Test
public void test_searchAllFlightsByCriteria(){
ArrayList<String> flights = new ArrayList<>();
flights.add("Flight1");
when(flightRepository.findbyDepartureArrival(airport_fr, airport1_ist)).thenReturn(flights);
assertNotNull(person1.searchAllFlightsByCriteria(airport_fr, airport1_ist));
}
@Test
public void test_searchFlight(){
Flight flight1 = new Flight("1", airport_fr, airport1_ist, 140);
when(flightRepository.findFlightByFlightNumber(any(String.class))).thenReturn(flight1.toString());
assertNotNull(person1.searchFlights("1"));
assertEquals(person1.searchFlights("1"), flight1.toString());
}
} }
Loading…
Cancel
Save