/// <summary>
        /// Creates a new <see cref="ICacheFetchRequest"/> with a valid start date but no End.  To hydrate end you should use a <see cref="ICacheFetchRequestProvider"/>
        /// </summary>
        /// <returns></returns>
        public virtual ICacheFetchRequest CreateInitialRequest()
        {
            var lp = CacheProgress.LoadProgress;

            // Figure out when to start loading from
            DateTime startDate;

            if (CacheProgress.CacheFillProgress.HasValue)
            {
                startDate = CacheProgress.CacheFillProgress.Value;
            }
            else if (lp.OriginDate.HasValue)
            {
                startDate = lp.OriginDate.Value;
            }
            else
            {
                throw new Exception("Don't know when to begin loading the cache from. Neither CacheProgress or LoadProgress has a relevant date.");
            }

            var initialFetchRequest = new CacheFetchRequest(CacheProgress.Repository)
            {
                CacheProgress    = CacheProgress,
                ChunkPeriod      = CacheProgress.ChunkPeriod,
                PermissionWindow = this.PermissionWindow,
                Start            = startDate
            };

            return(initialFetchRequest);
        }
        public void FailedCacheFetchRequest_SavesPreviousFailure()
        {
            var previousFailure = GetFailureMock();

            var cacheProgress = Mock.Of <ICacheProgress>(c => c.PermissionWindow == Mock.Of <IPermissionWindow>());

            var request = new CacheFetchRequest(previousFailure.Object, cacheProgress);

            request.RequestFailed(new Exception());

            previousFailure.Verify();
        }
        public void FailedCacheFetchRequest_ResolveCalled()
        {
            var previousFailure = GetFailureMock();

            var cacheProgress = Mock.Of <ICacheProgress>(c => c.PermissionWindow == Mock.Of <IPermissionWindow>());

            var request = new CacheFetchRequest(previousFailure.Object, cacheProgress);

            request.RequestSucceeded();

            previousFailure.Verify();
        }