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); } }