Esempio n. 1
0
        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);
        }