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); }
public async Task <List <Reservation> > BrowseReservationAsync(BrowseReservationsParameters parameters) { return(await reservationRep.BrowseReservationAsync(parameters)); }