public async Task Should_return_14_by_hour_when_2_access_requests_today()
        {
            var moq = new Mock <IAccessRequestService>();

            moq.Setup(x => x.GetApprovedOrPendingAccessRequestsByFloor(It.IsAny <Guid>()))
            .ReturnsAsync(() => new AccessRequest[]
            {
                new AccessRequest
                {
                    StartTime = new DateTime(2020, 01, 01).AddHours(10),
                    EndTime   = new DateTime(2020, 01, 01).AddHours(10).AddMinutes(59),
                    Visitors  = Enumerable.Range(0, 10).Select(x => new Contact {
                    }).ToList()
                },
                new AccessRequest
                {
                    StartTime = new DateTime(2020, 01, 01).AddHours(10),
                    EndTime   = new DateTime(2020, 01, 01).AddHours(10).AddMinutes(59),
                    Visitors  = Enumerable.Range(0, 2).Select(x => new Contact {
                    }).ToList()
                },
                new AccessRequest
                {
                    StartTime = new DateTime(2020, 01, 02).AddHours(12),
                    EndTime   = new DateTime(2020, 01, 02).AddHours(12).AddMinutes(59)
                }
            });

            var mockLocationService = new Mock <ILocationService>();

            mockLocationService.Setup(x => x.GetCapacityByFloorAsync(It.IsAny <Guid>()))
            .ReturnsAsync(20);

            var request = new GetSpotsAvailablePerHourQuery {
                FloorId = Guid.NewGuid(), SelectedDay = new DateTime(2020, 01, 01)
            };
            var handler = new GetSpotsAvailablePerHourQueryHandler(moq.Object, mockLocationService.Object);

            var result = await handler.Handle(request, CancellationToken.None);

            for (int i = 0; i < 24; i++)
            {
                if (i == 10)
                {
                    Assert.Equal(14, result.First(x => x.Hour == i).SpotsReserved);
                    continue;
                }

                Assert.Equal(0, result.First(x => x.Hour == i).SpotsReserved);
            }
        }
        public async Task Should_return_0_when_no_access_requests()
        {
            var moq = new Mock <IAccessRequestService>();

            moq.Setup(x => x.GetApprovedOrPendingAccessRequestsByFloor(It.IsAny <Guid>()))
            .ReturnsAsync(() => new AccessRequest[0]);

            var mockLocationService = new Mock <ILocationService>();

            mockLocationService.Setup(x => x.GetCapacityByFloorAsync(It.IsAny <Guid>()))
            .ReturnsAsync(20);

            var request = new GetSpotsAvailablePerHourQuery {
                FloorId = Guid.NewGuid(), SelectedDay = new DateTime(2020, 01, 01)
            };
            var handler = new GetSpotsAvailablePerHourQueryHandler(moq.Object, mockLocationService.Object);

            var result = await handler.Handle(request, CancellationToken.None);

            for (int i = 0; i < 24; i++)
            {
                Assert.Equal(0, result.First(x => x.Hour == i).SpotsReserved);
            }
        }