public void Test_Cancelled( ) { Mock <IRecordImporter> mockImporter = new Mock <IRecordImporter>(MockBehavior.Strict); Mock <IObjectsReader> mockReader = new Mock <IObjectsReader>(MockBehavior.Strict); Mock <ICancellationWatcher> mockCancellation = new Mock <ICancellationWatcher>(MockBehavior.Loose); IList <IObjectReader> readers; readers = Enumerable.Range(0, 10).Select(i => new Mock <IObjectReader>( ).Object).ToList( ); mockReader.Setup(reader => reader.GetObjects( )).Returns(() => readers); mockCancellation.Setup(c => c.IsCancellationRequested).Returns(true); BatchRunner batchRunner = new BatchRunner { RecordImporter = mockImporter.Object, ObjectsReader = mockReader.Object, CancellationWatcher = mockCancellation.Object }; batchRunner.ProcessAll( ); mockReader.VerifyAll( ); mockImporter.VerifyAll( ); }
public void Test_Runs(int sampleSize, int call1, int call2) { Mock <IRecordImporter> mockImporter = new Mock <IRecordImporter>(MockBehavior.Strict); Mock <IObjectsReader> mockReader = new Mock <IObjectsReader>(MockBehavior.Strict); Mock <ICancellationWatcher> mockCancellation = new Mock <ICancellationWatcher>(MockBehavior.Loose); IList <IObjectReader> readers; readers = Enumerable.Range(0, sampleSize).Select(i => new Mock <IObjectReader>( ).Object).ToList( ); mockReader.Setup(reader => reader.GetObjects( )).Returns(() => readers); mockImporter.Setup(importer => importer.ImportRecords(It.Is <IEnumerable <IObjectReader> >(list => list.Count( ) == call1 && list.First() == readers[0]))); if (call2 > 0) { mockImporter.Setup(importer => importer.ImportRecords(It.Is <IEnumerable <IObjectReader> >(list => list.Count( ) == call2 && list.First( ) == readers [call1]))); } mockCancellation.Setup(c => c.IsCancellationRequested).Returns(false); BatchRunner batchRunner = new BatchRunner { RecordImporter = mockImporter.Object, ObjectsReader = mockReader.Object, CancellationWatcher = mockCancellation.Object }; batchRunner.ProcessAll( ); mockReader.VerifyAll( ); mockImporter.VerifyAll( ); }
public void Test_RecordImporter_NotSet( ) { BatchRunner batchRunner = new BatchRunner( ); batchRunner.ObjectsReader = new Mock <IObjectsReader>( ).Object; Assert.Throws <InvalidOperationException>(() => batchRunner.ProcessAll( )); }
public void Test_BatchSize_OutOfRange(int batchSize) { BatchRunner batchRunner = new BatchRunner( ); batchRunner.RecordImporter = new Mock <IRecordImporter>( ).Object; batchRunner.ObjectsReader = new Mock <IObjectsReader>( ).Object; batchRunner.BatchSize = batchSize; Assert.Throws <InvalidOperationException>(() => batchRunner.ProcessAll( )); }
/// <summary> /// Start processing an import run, after checking has been performed. /// </summary> /// <param name="importRun">A writable import run entity. Caller will save.</param> internal void StartImportSafe(ImportRun importRun) { ImportConfig importConfig = importRun.ImportConfigUsed; if (importConfig == null) { throw new ConnectorConfigException("Import configuration could not be loaded."); } if (importConfig.ImportConfigMapping == null) { throw new ConnectorConfigException("Import configuration has no mapping."); } IObjectsReader recordsReader = null; IReaderToEntityAdapter entityAdapter; IImportReporter importRunReporter; IRecordImporter recordImporter; ICancellationWatcher cancellationWatcher; BatchRunner batchRunner; try { // Reads records out of the file to count recordsReader = GetRecordsReader(importRun, importConfig); importRun.ImportRecordsTotal = recordsReader.GetObjects( ).Count( ); importRun.Save( ); // Re-reads records out of the file for importing recordsReader = GetRecordsReader(importRun, importConfig); // Writes records into entities entityAdapter = GetEntityAdapter(importConfig); // Create a reporter to process progress notifications importRunReporter = new ImportRunReporter(importRun); // Create a reporter to process progress notifications cancellationWatcher = new ImportRunCancellationWatcher(importRun); // Activate record impoter bool testRun = importRun.ImportTestRun == true; recordImporter = _recordImporterActivator(entityAdapter, importRunReporter, importConfig.ImportConfigMapping, testRun); if (recordImporter == null) { throw new Exception("recordImporter failed to activate."); } // Connects the reader to the writer batchRunner = new BatchRunner { ObjectsReader = recordsReader, RecordImporter = recordImporter, CancellationWatcher = cancellationWatcher }; // Go! Run as user using (new SecurityBypassContext(false)) { batchRunner.ProcessAll( ); } } finally { recordsReader?.Dispose( ); } }