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)); }
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); }