public async Task ShouldReturnOneFlightWithCustomPrice()
        {
            var from   = DateTimeOffset.Parse("2021-02-02T10:00:00Z");
            var tenant = new Tenant
            {
                Id          = 1,
                Name        = "test",
                TenantGroup = Domain.Enums.TenantGroup.A
            };

            Context.Tenants.Add(tenant);
            Context.Flights.Add(new Flight
            {
                FlightId     = FlightId.From("KLM 12345 BCA"),
                Monday       = true,
                DefaultPrice = 24,
                From         = "Europe",
                To           = "Africa",
                Hour         = 10,
                Minute       = 30,
                CreatedBy    = tenant,
                CustomPrices = new List <FlightPrice>
                {
                    new FlightPrice
                    {
                        From  = from,
                        To    = from.AddDays(10),
                        Value = 30
                    }
                }
            });

            Context.SaveChanges();

            var availableFlightsQuery = new GetAvailableFlightQueryHandler(Context, _mapper);
            var result = await availableFlightsQuery.Handle(new GetAvailableFlightQuery
            {
                FlightId = FlightId.From("KLM 12345 BCA"),
                From     = from,
                To       = from.AddDays(7)
            }, CancellationToken.None);

            Assert.True(result.Count == 1);
            Assert.AreEqual("2021-02-08 10:30:00", result.First().DepartureDateTime.ToString("yyyy-MM-dd HH:mm:ss"));
            Assert.AreEqual(30, result.First().Price);
        }
        public async Task ShouldPersistNewFlightPurchaseInDbContext()
        {
            var tenant = new Tenant
            {
                Id          = 1,
                Name        = "test",
                TenantGroup = Domain.Enums.TenantGroup.A
            };

            Context.Tenants.Add(tenant);
            Context.Flights.Add(new Flight
            {
                FlightId     = FlightId.From("KLM 12345 BCA"),
                Monday       = true,
                DefaultPrice = 24,
                From         = "Europe",
                To           = "Africa",
                Hour         = 10,
                Minute       = 30,
                CreatedBy    = tenant
            });

            Context.SaveChanges();

            var from = DateTimeOffset.Parse("2021-02-02T10:00:00Z");

            var availableFlightsQuery = new GetAvailableFlightQueryHandler(Context, _mapper);
            var result = await availableFlightsQuery.Handle(new GetAvailableFlightQuery
            {
                FlightId = FlightId.From("KLM 12345 BCA"),
                From     = from,
                To       = from.AddDays(7)
            }, CancellationToken.None);

            var createFlightPurchaseCommand = new CreateFlightPurchaseCommandHandler(Context, _mapper);
            var purchase = await createFlightPurchaseCommand.Handle(new CreateFlightPurchaseCommand
            {
                Flight   = result.First(),
                TenantId = 1
            }, CancellationToken.None);

            //assert
            Assert.IsTrue(Context.FlightPurchases.Count() == 1);
        }
        public async Task ShouldReturnZeroResults()
        {
            var tenant = new Tenant
            {
                Id          = 1,
                Name        = "test",
                TenantGroup = Domain.Enums.TenantGroup.A
            };

            Context.Tenants.Add(tenant);
            Context.Flights.Add(new Flight
            {
                FlightId     = FlightId.From("KLM 12345 BCA"),
                Monday       = true,
                DefaultPrice = 24,
                From         = "Europe",
                To           = "Africa",
                Hour         = 10,
                Minute       = 30,
                CreatedBy    = tenant
            });

            Context.SaveChanges();

            var from = DateTimeOffset.Parse("2021-02-02T10:00:00Z");

            var availableFlightsQuery = new GetAvailableFlightQueryHandler(Context, _mapper);
            var result = await availableFlightsQuery.Handle(new GetAvailableFlightQuery
            {
                FlightId = FlightId.From("KLM 12345 BCA"),
                From     = from,
                To       = from.AddDays(4)
            }, CancellationToken.None);

            Assert.True(result.Count == 0);
        }