Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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));
            }
        }
Esempio n. 3
0
        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;
        }