public ScheduledFlightSummary CalculateSummary(IEnumerable <Passenger> passengers, FlightRoute flightRoute) { var scheduledFlightSummary = new ScheduledFlightSummary(); foreach (var passenger in passengers) { scheduledFlightSummary.SeatsTaken++; scheduledFlightSummary.CostOfFlight += flightRoute.BaseCost; scheduledFlightSummary.SalesPerPassengerType[passenger.Type]++; var passengerProcessorContext = _passengerProcessorContextProvider.GetPassengerProcessorContext(passenger, flightRoute); var processor = _passengerProcessorFactory.GetProcessor(passenger.Type); var passengerFlightLogistics = processor.Process(passengerProcessorContext); scheduledFlightSummary.RevenueFromFlight += passengerFlightLogistics.ProfitFromFlight; scheduledFlightSummary.TotalLoyaltyPointsRedeemed += passengerFlightLogistics.LoyaltyPointsRedeemed; scheduledFlightSummary.TotalLoyaltyPointsAccrued += passengerFlightLogistics.LoyaltyPointsAccrued; scheduledFlightSummary.TotalExpectedBaggage += passengerFlightLogistics.ExpectedBaggage; } return(scheduledFlightSummary); }
public bool RuleEvaluationReturnsExpectedResultWhen(int numberOfSeats, int airlineEmployeesSeatsTaken, double minTakeOffPercentage) { var scheduledFlightSummary = new ScheduledFlightSummary(); scheduledFlightSummary.SalesPerPassengerType[PassengerType.AirlineEmployee] = airlineEmployeesSeatsTaken; var ruleContext = new ScheduledFlightContext() { Aircraft = AnyAircraft(numberOfSeats), ScheduledFlightSummary = scheduledFlightSummary, FlightRoute = AnyFlightRoute(minTakeOffPercentage) }; var result = _rule.Apply(ruleContext); return(result.IsSuccess); }