public void Run_CancellationPending_WorkerStopsAfterThirdFileAndDoesntContinueTraverseFiles()
        {
            // arrange
            _settings = new RandomizerWorkerSettings
            {
                PathsFrom = new string[] { "path from" }
            };

            FileEnumerationStub stub = new FileEnumerationStub(_backgroundWorkerMock);

            _settings.PathsFrom.ToList().ForEach(x => _traverseServiceMock.Setup(y => y.TraverseFolder(x)).Returns(stub.GetFilesWithCancelCallback));

            // act
            _worker.Run(_settings, (x) => { }, (y) => { }, () => { });

            _backgroundWorkerMock.Raise(x => { x.OnDoWork += null; }, null, new System.ComponentModel.DoWorkEventArgs(null));

            // assert
            Assert.That(stub.filesCalledIndex, Is.EqualTo(3));
        }
        public void Run_SettingsContainsFilesNumberLimit_WorkerStopsAfterThirdFileAndDoesntContinueIteratingFiles()
        {
            // arrange
            _settings = new RandomizerWorkerSettings
            {
                FilesNumberLimit = 1,
                SelectedLimit    = LimitType.FilesNumber
            };

            FileEnumerationStub stub = new FileEnumerationStub(_backgroundWorkerMock);

            _fileServiceMock.Setup(x => x.GetFilesByFilesNumber(It.IsAny <bool>(), It.IsAny <IEnumerable <AppFile> >(), It.IsAny <IEnumerable <AppFile> >(), _settings.FilesNumberLimit)).Returns(stub.GetFilesWithCancelCallback);

            // act
            _worker.Run(_settings, (x) => { }, (y) => { }, () => { });
            _backgroundWorkerMock.Raise(x => { x.OnDoWork += null; }, null, new System.ComponentModel.DoWorkEventArgs(null));

            // assert
            Assert.That(stub.filesCalledIndex, Is.EqualTo(3));
        }
        public void Run_ExecutesTraverseFunctionAndReturnsFilesFromSourceFolder()
        {
            // arrange
            _settings = new RandomizerWorkerSettings
            {
                PathsFrom = new string[] { "path from" }
            };

            FileEnumerationStub stub = new FileEnumerationStub(_backgroundWorkerMock);

            _settings.PathsFrom.ToList().ForEach(x => _traverseServiceMock.Setup(y => y.TraverseFolder(x)).Returns(stub.GetFiles));

            // act
            _worker.Run(_settings, (x) => { }, (y) => { }, () => { });

            _backgroundWorkerMock.Raise(x => { x.OnDoWork += null; }, null, new System.ComponentModel.DoWorkEventArgs(null));

            // assert
            Assert.That(stub.filesCalledIndex, Is.EqualTo(5));
        }
        public void Run_SettingsContainsFoldersNumberLimitAndFilesInFolderNumberLimit_ReturnsRandomNonUniqueFiles()
        {
            // arrange
            _settings = new RandomizerWorkerSettings
            {
                FoldersNumberLimit        = 1,
                FilesNumberPerFolderLimit = 1,
                SelectedLimit             = LimitType.FilesNumberPerFolder
            };

            FileEnumerationStub stub = new FileEnumerationStub(_backgroundWorkerMock);

            _fileServiceMock.Setup(x => x.GetFilesByFilesNumber(It.IsAny <bool>(), It.IsAny <IEnumerable <AppFile> >(), It.IsAny <IEnumerable <AppFile> >(), _settings.FoldersNumberLimit)).Returns(stub.GetFiles);

            // act
            _worker.Run(_settings, (x) => { }, (y) => { }, () => { });

            _backgroundWorkerMock.Raise(x => { x.OnDoWork += null; }, null, new System.ComponentModel.DoWorkEventArgs(null));

            // assert
            Assert.That(stub.filesCalledIndex, Is.EqualTo(5));
        }
        public void Run_SupplySettingOnDuplicateDontCopyAndCancellationPending_WorkerStopsAfterThirdFileAndDoesntContinueIteratingFiles()
        {
            // arrange
            _settings = new RandomizerWorkerSettings
            {
                OnDuplicateDoNotCopy = true,
                PathTo = "path to"
            };

            FileEnumerationStub stub = new FileEnumerationStub(_backgroundWorkerMock);

            _fileServiceMock
            .Setup(x => x.GetFiles(_settings.PathTo))
            .Returns(stub.GetFilesWithCancelCallback);

            // act
            _worker.Run(_settings, (x) => { }, (y) => { }, () => { });

            _backgroundWorkerMock.Raise(x => { x.OnDoWork += null; }, null, new System.ComponentModel.DoWorkEventArgs(null));

            // assert
            Assert.That(stub.filesCalledIndex, Is.EqualTo(3));
        }
        public void Run_SupplySettingOnDuplicateDontCopyAndCancellationPending_WorkerStopsAfterThirdFileAndDoesntContinueIteratingFiles()
        {
            // arrange
            _settings = new RandomizerWorkerSettings
            {
                OnDuplicateDoNotCopy = true,
                PathTo = "path to"
            };

            FileEnumerationStub stub = new FileEnumerationStub(_backgroundWorkerMock);

            _fileServiceMock
                .Setup(x => x.GetFiles(_settings.PathTo))
                .Returns(stub.GetFilesWithCancelCallback);

            // act
            _worker.Run(_settings, (x) => { }, (y) => { }, () => { });

            _backgroundWorkerMock.Raise(x => { x.OnDoWork += null; }, null, new System.ComponentModel.DoWorkEventArgs(null));

            // assert
            Assert.That(stub.filesCalledIndex, Is.EqualTo(3));
        }
        public void Run_SettingsContainsFoldersNumberLimitAndFilesInFolderNumberLimit_WorkerStopsAfterThirdFileAndDoesntContinueIteratingFiles()
        {
            // arrange
            _settings = new RandomizerWorkerSettings
            {
                FoldersNumberLimit = 1,
                FilesNumberPerFolderLimit = 1,
                SelectedLimit = LimitType.FilesNumberPerFolder
            };

            FileEnumerationStub stub = new FileEnumerationStub(_backgroundWorkerMock);

            _fileServiceMock.Setup(x => x.GetFilesByFilesNumber(It.IsAny<bool>(), It.IsAny<IEnumerable<AppFile>>(), It.IsAny<IEnumerable<AppFile>>(), _settings.FoldersNumberLimit)).Returns(stub.GetFilesWithCancelCallback);

            // act
            _worker.Run(_settings, (x) => { }, (y) => { }, () => { });
            _backgroundWorkerMock.Raise(x => { x.OnDoWork += null; }, null, new System.ComponentModel.DoWorkEventArgs(null));

            // assert
            Assert.That(stub.filesCalledIndex, Is.EqualTo(3));
        }
        public void Run_SettingsContainsFilesNumberLimit_ReturnsRandomNonUniqueFiles()
        {
            // arrange
            _settings = new RandomizerWorkerSettings
            {
                FilesNumberLimit = 1,
                SelectedLimit = LimitType.FilesNumber
            };

            FileEnumerationStub stub = new FileEnumerationStub(_backgroundWorkerMock);

            _fileServiceMock.Setup(x => x.GetFilesByFilesNumber(It.IsAny<bool>(), It.IsAny<IEnumerable<AppFile>>(), It.IsAny<IEnumerable<AppFile>>(), _settings.FilesNumberLimit)).Returns(stub.GetFiles);

            // act
            _worker.Run(_settings, (x) => { }, (y) => { }, () => { });

            _backgroundWorkerMock.Raise(x => { x.OnDoWork += null; }, null, new System.ComponentModel.DoWorkEventArgs(null));

            // assert
            Assert.That(stub.filesCalledIndex, Is.EqualTo(5));
        }
        public void Run_ExecutesTraverseFunctionAndReturnsFilesFromSourceFolder()
        {
            // arrange
            _settings = new RandomizerWorkerSettings
            {
                PathsFrom = new string[] { "path from" }
            };

            FileEnumerationStub stub = new FileEnumerationStub(_backgroundWorkerMock);

            _settings.PathsFrom.ToList().ForEach(x => _traverseServiceMock.Setup(y => y.TraverseFolder(x)).Returns(stub.GetFiles));

            // act
            _worker.Run(_settings, (x) => { }, (y) => { }, () => { });

            _backgroundWorkerMock.Raise(x => { x.OnDoWork += null; }, null, new System.ComponentModel.DoWorkEventArgs(null));

            // assert
            Assert.That(stub.filesCalledIndex, Is.EqualTo(5));
        }
        public void Run_CancellationPending_WorkerStopsAfterThirdFileAndDoesntContinueTraverseFiles()
        {
            // arrange
            _settings = new RandomizerWorkerSettings
            {
                PathsFrom = new string[] { "path from" }
            };

            FileEnumerationStub stub = new FileEnumerationStub(_backgroundWorkerMock);

            _settings.PathsFrom.ToList().ForEach(x => _traverseServiceMock.Setup(y => y.TraverseFolder(x)).Returns(stub.GetFilesWithCancelCallback));

            // act
            _worker.Run(_settings, (x) => { }, (y) => { }, () => { });

            _backgroundWorkerMock.Raise(x => { x.OnDoWork += null; }, null, new System.ComponentModel.DoWorkEventArgs(null));

            // assert
            Assert.That(stub.filesCalledIndex, Is.EqualTo(3));
        }