public async Task SetsCorrectCacheEntry_WhenOptimizeRouteResultIsSuccess_AndRequestOrderIsUpdated()
        {
            var optimizeRouteService = new Mock <IOptimizeRouteService>();

            optimizeRouteService.Setup(x => x.OptimizeRoute(It.IsAny <OptimizeRouteCriteria>()))
            .ReturnsAsync(new OptimizeRouteResult {
                Distance = 10, Duration = 10, RequestIds = new List <Guid> {
                    Request4Id, Request1Id
                }
            });

            var cache = new MemoryCache(new MemoryCacheOptions());

            var sut = new OptimizeRouteCommandHandler(Context, optimizeRouteService.Object, cache);

            await sut.Handle(new OptimizeRouteCommand { ItineraryId = 1, UserId = "123" });

            var expectedCacheKey = CacheKeyBuilder.BuildOptimizeRouteCacheKey("123", 1);

            OptimizeRouteResultStatus cachedStatus = null;
            var keyExists = cache.TryGetValue(expectedCacheKey, out cachedStatus);

            keyExists.ShouldBeTrue();
            cachedStatus.IsSuccess.ShouldBeTrue();
            cachedStatus.StatusMessage.ShouldBe(OptimizeRouteStatusMessages.OptimizeSucess);
        }
        private void SetOptimizeCache(string userId, int itineraryId, OptimizeRouteResultStatus message)
        {
            if (!string.IsNullOrEmpty(userId))
            {
                var cacheEntryOptions = new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(1));

                _cache.Set(CacheKeyBuilder.BuildOptimizeRouteCacheKey(userId, itineraryId), message, cacheEntryOptions);
            }
        }
        public async Task SetsCorrectCacheEntry_WhenOptimizeRouteResultIsNotSuccess()
        {
            const string statusMsg = "failure";

            var optimizeRouteService = new Mock <IOptimizeRouteService>();

            optimizeRouteService.Setup(x => x.OptimizeRoute(It.IsAny <OptimizeRouteCriteria>()))
            .ReturnsAsync(OptimizeRouteResult.FailedOptimizeRouteResult(statusMsg));

            var cache = new MemoryCache(new MemoryCacheOptions());

            var sut = new OptimizeRouteCommandHandler(Context, optimizeRouteService.Object, cache);

            await sut.Handle(new OptimizeRouteCommand { ItineraryId = 1, UserId = "123" });

            var expectedCacheKey = CacheKeyBuilder.BuildOptimizeRouteCacheKey("123", 1);

            OptimizeRouteResultStatus cachedStatus = null;
            var keyExists = cache.TryGetValue(expectedCacheKey, out cachedStatus);

            keyExists.ShouldBeTrue();
            cachedStatus.IsSuccess.ShouldBeFalse();
            cachedStatus.StatusMessage.ShouldBe(statusMsg);
        }