public async void Handle_ShouldReturnMetricsFromRepository_WhenRefreshCacheTrue()
        {
            // ARRANGE
            var rideRepositoryMock = new Mock <IRideRepository>();
            var memoryCache        = new MemoryCache(new MemoryCacheOptions());
            var loggerMock         = new Mock <ILogger>();

            rideRepositoryMock
            .Setup(x => x.GetOverviewRideMetrics(It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <DateTime>(),
                                                 It.IsAny <DateTime>())).ReturnsAsync(new RideMetrics());

            var datePeriod = PeriodSelectionEnum.ThisYear;
            var dateRange  = DatePeriodHelper.GetDateRangeFromPeriodSelection(datePeriod);
            var cacheKey   = $"ride-{dateRange.StartDate.ToString()}-{dateRange.EndDate.ToString()}";

            memoryCache.Set(cacheKey, new RideMetrics());

            var handler = new GetRideMetricsByPeriodSelectionQueryHandler(
                rideRepositoryMock.Object,
                loggerMock.Object,
                memoryCache
                );

            // ACT
            var response = await handler.Handle(new GetRideMetricsByPeriodSelectionQuery()
            {
                DatePeriod = datePeriod, RefreshCache = true
            }, new CancellationToken());


            // ASSERT
            Assert.Equal(QueryResultTypeEnum.Success, response.Type);
            rideRepositoryMock.Verify(x => x.GetOverviewRideMetrics(It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <DateTime>()), Times.Once);
        }
        public async Task <QueryResult <RecruitmentMessageMetrics> > Handle(GetRecruitmentMessageMetricsByPeriodSelectionQuery request, CancellationToken cancellationToken)
        {
            var dateRange = DatePeriodHelper.GetDateRangeFromPeriodSelection(request.DatePeriod);
            var cacheKey  = $"recruitment-message-{dateRange.StartDate.ToString()}-{dateRange.EndDate.ToString()}";

            if (request.RefreshCache)
            {
                _cache.Remove(cacheKey);
            }

            var metrics = await _cache.GetOrCreateAsync(cacheKey, async entry =>
            {
                entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(23);

                return(await _recruitmentMessageRepository.GetOverviewRecruitmentMessageMetrics(dateRange.StartDate,
                                                                                                dateRange.EndDate,
                                                                                                dateRange.PreviousPeriodStartDate,
                                                                                                dateRange.PreviousPeriodEndDate));
            });

            metrics.CurrentPeriodLabel = dateRange.CurrentPeriodLabel;
            metrics.PriorPeriodLabel   = dateRange.PriorPeriodLabel;

            return(new QueryResult <RecruitmentMessageMetrics>(result: metrics, type: QueryResultTypeEnum.Success));
        }
Exemplo n.º 3
0
        public async void Handle_ShouldReturnMetricsFromCache_WhenDatePeriodIsCached()
        {
            // ARRANGE
            var recruitmentMessageRepositoryMock = new Mock <IRecruitmentMessageRepository>();
            var memoryCache = new MemoryCache(new MemoryCacheOptions());
            var loggerMock  = new Mock <ILogger>();

            var datePeriod = PeriodSelectionEnum.ThisYear;
            var dateRange  = DatePeriodHelper.GetDateRangeFromPeriodSelection(datePeriod);
            var cacheKey   = $"recruitment-message-{dateRange.StartDate.ToString()}-{dateRange.EndDate.ToString()}";

            memoryCache.Set(cacheKey, new RecruitmentMessageMetrics());

            var handler = new GetRecruitmentMessageMetricsByPeriodSelectionQueryHandler(
                recruitmentMessageRepositoryMock.Object,
                loggerMock.Object,
                memoryCache
                );

            // ACT
            var response = await handler.Handle(new GetRecruitmentMessageMetricsByPeriodSelectionQuery()
            {
                DatePeriod = datePeriod
            }, new CancellationToken());


            // ASSERT
            Assert.Equal(QueryResultTypeEnum.Success, response.Type);
            recruitmentMessageRepositoryMock.Verify(x => x.GetOverviewRecruitmentMessageMetrics(It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <DateTime>(), It.IsAny <DateTime>()), Times.Never);
        }
Exemplo n.º 4
0
        public void GetDateRangeFromPeriodSelection_For_All_Time_Should_Return_Successful()
        {
            var result = DatePeriodHelper.GetDateRangeFromPeriodSelection(PeriodSelectionEnum.AllTime);

            Assert.Equal(null, result.StartDate);
            Assert.Equal(new DateTime(2100, 1, 1), result.EndDate);

            Assert.Equal(null, result.PreviousPeriodStartDate);
            Assert.Equal(null, result.PreviousPeriodEndDate);

            Assert.Equal("All Time", result.CurrentPeriodLabel);
            Assert.Equal(null, result.PriorPeriodLabel);
        }
Exemplo n.º 5
0
        public void GetDateRangeFromPeriodSelection_For_Rolling_30_Should_Return_Successful()
        {
            var result           = DatePeriodHelper.GetDateRangeFromPeriodSelection(PeriodSelectionEnum.Rolling30);
            var daysBetweenDates = (new DateTime(DateTime.Now.AddDays(1).Year, DateTime.Now.AddDays(1).Month, DateTime.Now.AddDays(1).Day) - new DateTime(DateTime.Now.AddDays(-30).Year, DateTime.Now.AddDays(-30).Month, DateTime.Now.AddDays(-30).Day)).TotalDays * -1;

            Assert.Equal(new DateTime(DateTime.Now.AddDays(-30).Year, DateTime.Now.AddDays(-30).Month, DateTime.Now.AddDays(-30).Day), result.StartDate);
            Assert.Equal(new DateTime(DateTime.Now.AddDays(1).Year, DateTime.Now.AddDays(1).Month, DateTime.Now.AddDays(1).Day), result.EndDate);

            Assert.Equal(new DateTime(DateTime.Now.AddDays(-30).Year, DateTime.Now.AddDays(-30).Month, DateTime.Now.AddDays(-30).Day).AddDays(daysBetweenDates), result.PreviousPeriodStartDate);
            Assert.Equal(new DateTime(DateTime.Now.AddDays(1).Year, DateTime.Now.AddDays(1).Month, DateTime.Now.AddDays(1).Day).AddDays(daysBetweenDates), result.PreviousPeriodEndDate);

            Assert.Equal($"{new DateTime(DateTime.Now.AddDays(-30).Year, DateTime.Now.AddDays(-30).Month, DateTime.Now.AddDays(-30).Day).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)} - {new DateTime(DateTime.Now.AddDays(1).Year, DateTime.Now.AddDays(1).Month, DateTime.Now.AddDays(1).Day).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}", result.CurrentPeriodLabel);
            Assert.Equal($"{new DateTime(DateTime.Now.AddDays(-30).Year, DateTime.Now.AddDays(-30).Month, DateTime.Now.AddDays(-30).Day).AddDays(daysBetweenDates).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)} - {new DateTime(DateTime.Now.AddDays(1).Year, DateTime.Now.AddDays(1).Month, DateTime.Now.AddDays(1).Day).AddDays(daysBetweenDates).ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}", result.PriorPeriodLabel);
        }
Exemplo n.º 6
0
        public void GetDateRangeFromPeriodSelection_For_This_Month_Should_Return_Successful()
        {
            var result           = DatePeriodHelper.GetDateRangeFromPeriodSelection(PeriodSelectionEnum.ThisMonth);
            var daysBetweenDates = (new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1) - new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1)).TotalDays * -1;

            Assert.Equal(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1), result.StartDate);
            Assert.Equal(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1), result.EndDate);

            Assert.Equal(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddDays(daysBetweenDates), result.PreviousPeriodStartDate);
            Assert.Equal(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1).AddDays(daysBetweenDates), result.PreviousPeriodEndDate);

            Assert.Equal(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToString("MMM yyyy", CultureInfo.InvariantCulture), result.PriorPeriodLabel);
            Assert.Equal(new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddMonths(1).ToString("MMM yyyy", CultureInfo.InvariantCulture), result.CurrentPeriodLabel);
        }
Exemplo n.º 7
0
        public void GetDateRangeFromPeriodSelection_For_This_Year_Should_Return_Successful()
        {
            var result           = DatePeriodHelper.GetDateRangeFromPeriodSelection(PeriodSelectionEnum.ThisYear);
            var daysBetweenDates = (new DateTime(DateTime.Now.Year + 1, 1, 1) - new DateTime(DateTime.Now.Year, 1, 1)).TotalDays * -1;

            Assert.Equal(new DateTime(DateTime.Now.Year, 1, 1), result.StartDate);
            Assert.Equal(new DateTime(DateTime.Now.Year + 1, 1, 1), result.EndDate);

            Assert.Equal(new DateTime(DateTime.Now.Year, 1, 1).AddDays(daysBetweenDates), result.PreviousPeriodStartDate);
            Assert.Equal(new DateTime(DateTime.Now.Year + 1, 1, 1).AddDays(daysBetweenDates), result.PreviousPeriodEndDate);

            Assert.Equal((DateTime.Now.Year - 1).ToString(), result.PriorPeriodLabel);
            Assert.Equal((DateTime.Now.Year).ToString(), result.CurrentPeriodLabel);
        }