public GetAvailableBookingTermsQuery(Guid facilityId, Guid offerId, DateTime dateFrom, DateTime dateTo, BookingRulesData bookingRules) { FacilityId = facilityId; OfferId = offerId; DateFrom = dateFrom; DateTo = dateTo; BookingRules = bookingRules; }
public async Task GetAvailableBookingDatesHandle_SchedulesAndBookingsExist_ReturnsCorrectTerms( int offerDuration, DateTime dateFrom, DateTime dateTo, BookingRulesData bookingRulesData, List <EmployeeAvailability> availabilities, List <BookedTerm> bookedTerms, List <AvailableBookingTermDto> expected) { var scheduleRepoMock = new Mock <IScheduleQueryRepository>(); var bookingRepoMock = new Mock <IBookingQueryRepository>(); var offerRepoMock = new Mock <IOfferQueryRepository>(); scheduleRepoMock.Setup(s => s.GetAllAvailabilities(It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <Guid>())).ReturnsAsync(availabilities); bookingRepoMock.Setup(b => b.GetBookedTerms(It.IsAny <Guid>(), It.IsAny <DateTime>(), It.IsAny <DateTime>())).ReturnsAsync(bookedTerms); offerRepoMock.Setup(o => o.GetOfferDuration(It.IsAny <Guid>(), It.IsAny <Guid>())).ReturnsAsync((short)offerDuration); var result = await new GetAvailableBookingTermsQueryHandler(scheduleRepoMock.Object, bookingRepoMock.Object, offerRepoMock.Object) .Handle(new GetAvailableBookingTermsQuery( Guid.NewGuid(), Guid.NewGuid(), dateFrom, dateTo, bookingRulesData), new System.Threading.CancellationToken()); Assert.Equal(expected.Count, result.Count()); for (int i = 0; i < expected.Count; i++) { var expectedAvailability = expected[i]; var resultAvailability = result.ElementAt(i); Assert.Equal(expectedAvailability.Date, resultAvailability.Date); Assert.Equal(expectedAvailability.AvailableEmployeeIds.Count(), resultAvailability.AvailableEmployeeIds.Count()); foreach (var expectedEmployeeId in expectedAvailability.AvailableEmployeeIds) { Assert.Contains(expectedEmployeeId, resultAvailability.AvailableEmployeeIds); } Assert.Equal(expectedAvailability.UnavailableEmployees.Count(), resultAvailability.UnavailableEmployees.Count()); foreach (var expectedUnavailability in expectedAvailability.UnavailableEmployees) { Assert.Contains(expectedUnavailability.EmployeeId, resultAvailability.UnavailableEmployees.Select(u => u.EmployeeId)); } } }