Пример #1
0
        public async Task <List <Reservation> > BrowseReservationAsync(BrowseReservationsParameters parameters)
        {
            var reservations =
                ctx.Reservations
                .Include(r => r.Client)
                .Include(r => r.ClientAccount)
                .Include(r => r.Car)
                .ThenInclude(c => c.Type) as IQueryable <Reservation>;

            if (!String.IsNullOrWhiteSpace(parameters.ClientFullName))
            {
                reservations = reservations.Where(r => parameters.ClientFullName == r.Client.FullName);
            }
            if (!String.IsNullOrWhiteSpace(parameters.ClientEmail))
            {
                reservations = reservations.Where(r => parameters.ClientEmail == r.Client.Email);
            }
            if (!String.IsNullOrWhiteSpace(parameters.ClientPhoneNumber))
            {
                reservations = reservations.Where(r => parameters.ClientPhoneNumber == r.Client.PhoneNumber);
            }
            if (parameters.PickedUpDateTimeFrom != null)
            {
                reservations = reservations.Where(r => parameters.PickedUpDateTimeFrom <= r.PickUpDateTime);
            }
            if (parameters.PickedUpDateTimeTo != null)
            {
                reservations = reservations.Where(r => parameters.PickedUpDateTimeTo >= r.PickUpDateTime);
            }
            if (parameters.ReservationState != null)
            {
                reservations = reservations.Where(r => parameters.ReservationState == r.State);
            }

            return(await reservations.ToListAsync());

            /*  Pretty version but i'm not sure about performances on many data
             *  return await ctx.Reservations
             *  .Include(r => r.Client)
             *  .Include(r => r.ClientAccount)
             *  .Include(r => r.Car)
             *  .ThenInclude(c => c.Type)
             *  .Where(r =>
             *      (parameters.ClientFullName == null || parameters.ClientFullName == r.Client.FullName)
             *      && (parameters.ClientEmail == null || parameters.ClientEmail == r.Client.Email)
             *      && (parameters.ClientPhoneNumber == null || parameters.ClientPhoneNumber == r.Client.PhoneNumber)
             *      && (parameters.PickedUpDateTimeFrom == null || parameters.PickedUpDateTimeFrom < r.PickUpDateTime)
             *      && (parameters.PickedUpDateTimeTo == null || parameters.PickedUpDateTimeTo > r.PickUpDateTime)
             *      && (parameters.ReservationState == null || parameters.ReservationState == r.State))
             *  .ToListAsync();
             */
        }
        public async Task BrowseReservationAsync_Behaviour(BrowseReservationsParameters parameters, long[] reservationsIdsExpected)
        {
            //Arrange
            var ctx = GetMockedDbContext();

            ctx.Reservations.AddRange(
                BuildReservation(1, new DateTime(2018, 01, 01, 10, 10, 10), ReservationState.PickedUp, 1, "Test 1", "*****@*****.**", "0804590101"),
                BuildReservation(2, new DateTime(2019, 01, 01, 10, 10, 10), ReservationState.PickedUp, 2, "Test 1", "*****@*****.**", "0804590101"),
                BuildReservation(3, new DateTime(2019, 01, 01, 10, 10, 10), ReservationState.Booked, 3, "Test 2", "*****@*****.**", "0804590202")
                );
            await ctx.SaveChangesAsync();

            var rep = new RepositoryReservation(ctx);

            //Act
            var reservations = await rep.BrowseReservationAsync(parameters);

            var reservationsIds = reservations.Select(r => r.Id);

            //Assert
            Assert.Equal(reservationsIdsExpected, reservationsIds);
        }
Пример #3
0
 public async Task <List <Reservation> > BrowseReservationAsync(BrowseReservationsParameters parameters)
 {
     return(await reservationRep.BrowseReservationAsync(parameters));
 }