public void ProcessAllFiles_5Files_4FilesProcessed1Failed_4Moved_1MovedToErrorLocation()
        {
            // Arrange
            CreateMultipleTempFiles(5);
            var fileList = GetAllUnprocessedFiles();

            var fp = A.Fake<IFileProcessor>();
            foreach (var filename in fileList.Take(4))
            {
                A.CallTo(() => fp.ProcessFile(filename)).Returns(CreateMockDataSet1TableNoData());
            }

            var sut = new BatchFileProcessor(this.unprocessedPath, this.processedPath, this.errorPath);

            // Act
            var filesProcessed = sut.ProcessAllFiles(fp);

            foreach (var filename in fileList.Take(4))
            {
                A.CallTo(() => fp.ProcessFile(filename)).MustHaveHappened();
            }

            Assert.Equal(4, Directory.EnumerateFiles(processedPath).Count());
            Assert.Equal(1, Directory.EnumerateFiles(errorPath).Count());
        }
        public void ProcessFile_FileNotExist_FileRemains()
        {
            // Arrange
            CreateSingleTempFile();
            string filename = GetSingleUnprocessedFile();

            var fp = A.Fake<IFileProcessor>();
            A.CallTo(() => fp.ProcessFile(filename)).Returns(A<DataSet>.Ignored);
            var sut = new BatchFileProcessor(this.unprocessedPath, this.processedPath, this.errorPath);

            // Act
            Assert.Throws<FileNotFoundException>(() => sut.ProcessFile(Guid.NewGuid().ToString("N"), fp));
            Assert.Equal(1, Directory.EnumerateFiles(unprocessedPath).Count());
        }
        public void ProcessFile_FileExistsProcessed_MovedFile()
        {
            // Arrange
            CreateSingleTempFile();
            string filename = GetSingleUnprocessedFile();

            var fp = A.Fake<IFileProcessor>();
            A.CallTo(() => fp.ProcessFile(filename)).Returns(CreateMockDataSet1TableNoData());
            var sut = new BatchFileProcessor(this.unprocessedPath, this.processedPath, this.errorPath);

            // Act
            sut.ProcessFile(filename, fp);

            // Assert
            A.CallTo(() => fp.ProcessFile(filename)).MustHaveHappened();
            A.CallTo(() => fp.ProcessFile(filename)).Returns(A<DataSet>.Ignored);
            Assert.Equal(1, Directory.EnumerateFiles(processedPath).Count());
        }
        public void ProcessAllFiles_NoFiles_NothingHappened()
        {
            // Arrange
            var fp = A.Fake<IFileProcessor>();
            A.CallTo(() => fp.ProcessFile(string.Empty)).Returns(A<DataSet>.Ignored);
            var sut = new BatchFileProcessor(this.unprocessedPath, this.processedPath, this.errorPath);

            // Act
            var filesProcessed = sut.ProcessAllFiles(fp);

            Assert.Equal(0, filesProcessed.Count);
            A.CallTo(() => fp.ProcessFile(string.Empty)).MustNotHaveHappened();
        }
        public void ProcessAllFiles_ErrorFile_MovesFileToErrorLocation()
        {
            CreateSingleTempFile();
            var fp = A.Fake<IFileProcessor>();
            var filename = GetSingleUnprocessedFile();
            A.CallTo(() => fp.ProcessFile(filename)).Returns(null);

            var sut = new BatchFileProcessor(this.unprocessedPath, this.processedPath, this.errorPath);
            var processAllFiles = sut.ProcessAllFiles(fp);

            A.CallTo(() => fp.ProcessFile(filename)).MustHaveHappened();

            Assert.Equal(1, Directory.EnumerateFiles(errorPath).Count());
        }
        public void ProcessAllFiles_5Files_5FilesProcessedNameIsFileName()
        {
            // Arrange
            CreateMultipleTempFiles(5);
            var fileList = GetAllUnprocessedFiles();

            var fp = A.Fake<IFileProcessor>();
            foreach (var filename in fileList)
            {
                A.CallTo(() => fp.ProcessFile(filename)).Returns(CreateMockDataSet1TableNoData());
            }

            var sut = new BatchFileProcessor(this.unprocessedPath, this.processedPath, this.errorPath);

            // Act
            var filesProcessed = sut.ProcessAllFiles(fp);

            Assert.Equal(5, filesProcessed.Count);
            foreach (var filename in fileList)
            {
                A.CallTo(() => fp.ProcessFile(filename)).MustHaveHappened();
            }

            foreach (var filename in fileList)
            {
                Assert.Contains(filename, filesProcessed.Keys);
            }

            Assert.Equal(5, Directory.EnumerateFiles(processedPath).Count());
        }