public void ShouldNotSaveParentEntitiesIfTheyHaveIds() { var mock = new Mock <IRepository>(MockBehavior.Strict); mock.Setup( i => i.SaveEntitiesAsync( It.Is <IEnumerable <FileWord> >(a => a.Count() == 2), It.Is <IEnumerable <File> >(a => !a.Any()), It.Is <IEnumerable <Word> >(a => !a.Any()))).Returns(Task.FromResult(true)); var block = FileWordSaver.GetFileWordSaverBlock(() => mock.Object); block.Post(new FileWord { File = new File { FileId = 1 }, Word = new Word { WordId = 1 } }); block.Post(new FileWord { File = new File { FileId = 2 }, Word = new Word { WordId = 1 } }); block.Complete(); block.ReceiveWithTimeout(); block.ReceiveWithTimeout(); block.EnsureCompleted(); }
public void ShouldFaultIfRepositoryRaisesException() { var mock = new Mock <IRepository>(); mock.Setup( i => i.SaveEntitiesAsync( It.IsAny <IEnumerable <FileWord> >(), It.IsAny <IEnumerable <File> >(), It.IsAny <IEnumerable <Word> >())).Throws <InvalidOperationException>(); var block = FileWordSaver.GetFileWordSaverBlock(() => mock.Object); block.Post(new FileWord { File = new File(), Word = new Word() }); block.Complete(); try { block.EnsureCompleted(); Assert.Fail(); } catch (AggregateException ex) { Assert.IsInstanceOfType(ex.GetBaseException(), typeof(InvalidOperationException)); } }
public void ShouldSaveFileWordWithFileAndWordWhichDoNotHaveIdYetViaRepository() { var mock = new Mock <IRepository>(MockBehavior.Strict); mock.Setup( i => i.SaveEntitiesAsync( It.Is <IEnumerable <FileWord> >( a => a.Count() == 2 && a.All( w => (w.FileId < 1 && w.File != null && w.File.FileId == 0) || (w.FileId > 0 && w.File == null)) && a.All( w => (w.WordId < 1 && w.Word != null && w.Word.WordId == 0) || (w.WordId > 0 && w.Word == null))), It.Is <IEnumerable <File> >(a => a.Single().FileId < 1), It.Is <IEnumerable <Word> >(a => a.Single().WordId < 1))).Returns(Task.FromResult(true)); var block = FileWordSaver.GetFileWordSaverBlock(() => mock.Object); block.Post(new FileWord { File = new File { FileId = 1 }, Word = new Word { Term = "TEST" } }); block.Post(new FileWord { File = new File(), Word = new Word { WordId = 1, Term = "WORD" } }); block.Complete(); block.ReceiveWithTimeout(); block.ReceiveWithTimeout(); block.EnsureCompleted(); }
public async Task ParseFilesAsync(string folderPath, string searchPattern) { var repository = repositoryFactory(); await repository.TruncateDataAsync(); var filesEnumerator = FilesEnumerator.GetFilesEnumeratorBlock(); var fileCreator = FileCreator.GetFileCreatorBlock(); filesEnumerator.LinkToAndPropagateCompleted(fileCreator); var fileLinesEnumerator = FileLinesEnumerator.GetFileLinesEnumeratorBlock(); fileCreator.LinkToAndPropagateCompleted(fileLinesEnumerator); var lineSplitter = LineSplitter.GetLineSplitterBlock(); fileLinesEnumerator.LinkToAndPropagateCompleted(lineSplitter); var fileWordCreator = FileWordCreator.GetFileWordCreatorBlock(); lineSplitter.LinkToAndPropagateCompleted(fileWordCreator); var fileWordSaver = FileWordSaver.GetFileWordSaverBlock(repositoryFactory); fileWordCreator.LinkToAndPropagateCompleted(fileWordSaver); var nullTarget = DataflowBlock.NullTarget <FileWord>(); fileWordSaver.LinkTo(nullTarget); filesEnumerator.Post(new FilesEnumerator.EnumerateFolderTask { Folder = folderPath, SearchPattern = searchPattern }); filesEnumerator.Complete(); await fileWordSaver.Completion; }