Exemple #1
0
        public void Process(ZipCode zipCode)
        {
            Logger.LogInfo("Processing", nameof(zipCode), zipCode.Zip);

            Logger.LogInfo("Downloading Stores", nameof(zipCode), zipCode.Zip);

            StoreInfo[] stores;
            try
            {
                stores = _downloader.Download(zipCode).ToArray();
                Logger.LogInfo("Stores Data Downloaded", "storesCount", stores.Length, nameof(zipCode), zipCode.Zip);
            }
            catch (WebException ex)
            {
                if (_webExceptionHandler.ShouldBubbleUpException(ex))
                {
                    throw;
                }

                LogFailure(zipCode);
                return;
            }

            _storesPersistor.Persist(stores);

            _zipCodeDataService.UpdateZipCode(zipCode.Zip);

            LogSuccess(zipCode);

            _deadlockDetector.UpdateStatus();
        }
        public void PersistsMultipleStores()
        {
            var allStoreNumbers = StoreNumberFactory.Create(10).ToArray();
            var stores          = allStoreNumbers.Select(StoreInfoFactory.Create).ToArray();

            var recentlyPersistedNumbers = new[] { allStoreNumbers[1], allStoreNumbers[3] };

            foreach (var storeNumber in recentlyPersistedNumbers)
            {
                _persistenceCalculator.WasPersistedRecently(storeNumber).Returns(true);
            }

            var numbersToPersist           = allStoreNumbers.Except(recentlyPersistedNumbers).ToArray();
            var numbersThatNeedToBeUpdated = new[] { numbersToPersist[0], numbersToPersist[1], numbersToPersist[2] };

            _dataService.ContainsStore(Arg.Is <IEnumerable <StoreNumber> >(_ => _.SequenceEqual(numbersToPersist)))
            .Returns(numbersThatNeedToBeUpdated);

            var numbersThatNeedToBeCreated = numbersToPersist.Except(numbersThatNeedToBeUpdated).ToArray();


            _storesPersistor.Persist(stores);


            _dataService.Received(1)
            .ContainsStore(Arg.Is <IEnumerable <StoreNumber> >(_ => _.SequenceEqual(numbersToPersist)));
            _dataService.Received(1)
            .Update(Arg.Is <IEnumerable <StoreInfo> >(_ => _.Select(s => s.StoreNumber).SequenceEqual(numbersThatNeedToBeUpdated)));
            _dataService.Received(1)
            .CreateNew(Arg.Is <IEnumerable <StoreInfo> >(_ => _.Select(s => s.StoreNumber).SequenceEqual(numbersThatNeedToBeCreated)));

            foreach (var storeNumber in allStoreNumbers)
            {
                _persistenceCalculator.Received(1).WasPersistedRecently(storeNumber);
            }
            foreach (var storeNumber in numbersToPersist)
            {
                _persistenceCalculator.Received(1).PreventFuturePersistence(storeNumber);
            }
            foreach (var storeNumber in recentlyPersistedNumbers)
            {
                _persistenceCalculator.DidNotReceive().PreventFuturePersistence(storeNumber);
            }
        }