public async Task <FlightPurchaseDto> Handle(CreateFlightPurchaseCommand request, CancellationToken cancellationToken)
        {
            var flightPurchase = new FlightPurchase();

            flightPurchase.DepartureDateTime = request.Flight.DepartureDateTime;
            flightPurchase.Price             = request.Flight.Price;
            flightPurchase.Tenant            = _context.Tenants.First(x => x.Id == request.TenantId);
            flightPurchase.Flight            = _context.Flights.First(x => x.FlightId.Segment1 == request.Flight.FlightId.Segment1 &&
                                                                      x.FlightId.Segment2 == request.Flight.FlightId.Segment2 &&
                                                                      x.FlightId.Segment3 == request.Flight.FlightId.Segment3);

            _context.FlightPurchases.Add(flightPurchase);
            await _context.SaveChangesAsync(cancellationToken);

            return(_mapper.Map <FlightPurchaseDto>(flightPurchase));
        }
示例#2
0
        public async Task ShouldApplyOnThursdayToAfricaAndSaveIt()
        {
            var tenant = new Tenant
            {
                TenantGroup = Domain.Enums.TenantGroup.A
            };

            Context.Tenants.Add(tenant);

            // lot w urodziny tenanta
            var priceDiscount1 = new PriceDiscount();

            priceDiscount1.Rules.Add(new PriceDiscountRule
            {
                FieldName = "IsOnTenantBirthday",
                Value     = "True"
            });
            // lot w czwartek do Afryki
            var priceDiscount2 = new PriceDiscount();

            priceDiscount2.Rules.Add(new PriceDiscountRule
            {
                FieldName = "To",
                Value     = "Africa"
            });
            priceDiscount2.Rules.Add(new PriceDiscountRule
            {
                FieldName = "IsOnThursday",
                Value     = "True"
            });

            Context.PriceDiscounts.AddRange(priceDiscount1, priceDiscount2);

            var flight = new Flight
            {
                DefaultPrice = 25,
                To           = "Africa",
                CreatedBy    = tenant,
                Thursday     = true
            };

            Context.Flights.Add(flight);

            var flightPurchase = new FlightPurchase
            {
                DepartureDateTime = DateTimeOffset.Parse("2021-02-11T10:00:00Z"), // czwartek
                Flight            = flight,
                Price             = 25,
                Tenant            = tenant
            };

            Context.FlightPurchases.Add(flightPurchase);
            Context.SaveChanges();

            var applyDiscountCommandHandler = new ApplyPriceDiscountCommandHandler(Context);
            var newPrice = await applyDiscountCommandHandler.Handle(new ApplyPriceDiscountCommand {
                FlightPurchase = _mapper.Map <FlightPurchaseDto>(flightPurchase)
            }, CancellationToken.None);

            // jedna zniżka uwzględniona
            Assert.AreEqual(20, newPrice);
            // zniżka zapisana dla tenanta grupy A
            Assert.IsTrue(Context.FlightPurchases.First().Discounts.Count > 0);
        }