public void AttemptToOverwriteExistingFileInCompressedLocationThrowsIoExceptionAndResultsInNoChanges()
        {
            // Arrange
            _fileSystem.AddFile(TestConstants.ExistingJpgFullFileName, 100000, new DateTime(2013, 5, 29, 19, 39, 18));
            const string movedFileName = TestConstants.ExistingDirectory + "\\0000-00-00_00.00.00_RENAMED_6867.JPG";
            _fileSystem.MoveFile(TestConstants.ExistingJpgFullFileName, movedFileName);
            IFileHandler fileHandler = _fileHandlerFactory.GetFileHandler(movedFileName, _fileSystem, new MockCompress(_fileSystem), new MockExifReader(_fileSystem));
            var newDir = new MockPictureDirectory {Directory = TestConstants.NewDirectory};

            string expectedNewFilename = fileHandler.GetNewCompressedFileName();
            //_fileSystem.CopyFile(TestConstants.ExistingTxtFullFileName, TestConstants.NewDirectory + "\\" + expectedNewFilename);
            _fileSystem.AddFile(TestConstants.NewDirectory + "\\" + expectedNewFilename, 10453, null);
            long blockingFileSize = _fileSystem.GetFileLength(TestConstants.NewDirectory + "\\" + expectedNewFilename);
            bool expectedExceptionCaught = false;

            // Act
            try {
                string newFileName = fileHandler.PerformCompressAndMove(newDir);
            } catch (IOException) {
                expectedExceptionCaught = true;
            }
            long newFileSize = _fileSystem.GetFileLength(TestConstants.NewDirectory + "\\" + expectedNewFilename);

            // Assert
            Assert.IsTrue(expectedExceptionCaught);
            Assert.AreEqual(blockingFileSize, newFileSize);
            Assert.AreEqual(fileHandler.FileName, movedFileName);
            Assert.IsTrue(_fileSystem.FileExists(movedFileName));
        }
        public void PerformCompressAndMoveRemovesOldFileAndCreatesNew()
        {
            // Arrange
            var targetDirectory = new MockPictureDirectory {Directory = "\\mockdir"};

            (_fileSystem).AddFile("\\mockdir\\test_RENAMED_2353.JPG", 100000);

            var mockCompressor = new MockCompress(_fileSystem);
            var fileHandler = new JpgFileHandler("\\mockdir\\test_RENAMED_2353.JPG", fileSystem: _fileSystem, compressor: mockCompressor);

            // Act
            fileHandler.PerformCompressAndMove(targetDirectory);

            // Assert
            Assert.IsTrue(!_fileSystem.FileExists("\\mockdir\\test_RENAMED_2353.JPG"));
            Assert.IsTrue(_fileSystem.FileExists("\\mockdir\\test_COMPRESSED_2353.JPG"));
        }
        public void DoNotCompressNonRenamedOriginalFile()
        {
            // Arrange
            _fileSystem.AddFile(TestConstants.ExistingJpgFullFileName, 100000, new DateTime(2013, 5, 29, 19, 39, 18));

            IFileHandler fileHandler = _fileHandlerFactory.GetFileHandler(TestConstants.ExistingJpgFullFileName, _fileSystem, new MockCompress(_fileSystem),
                                                                                                                                        new MockExifReader(_fileSystem));
            var newDir = new MockPictureDirectory {Directory = TestConstants.NewDirectory};

            // Act
            fileHandler.PerformCompressAndMove(newDir);

            // Assert
            Assert.Fail();
        }
        private void RenameJpgWithSpecifiedDate(DateTime providedDate)
        {
            // Arrange
            _fileSystem.AddFile(TestConstants.ExistingJpgFullFileName, 100000, providedDate);

            IFileHandler fileHandler = _fileHandlerFactory.GetFileHandler(TestConstants.ExistingJpgFullFileName, _fileSystem, null, new MockExifReader(_fileSystem));
            var newDir = new MockPictureDirectory {Directory = TestConstants.NewDirectory}; //.GetOrCreateDirectory(TestConstants.NewDirectory);

            // Act
            string test = fileHandler.PerformRenameAndMove(newDir);

            // Assert
            Assert.IsTrue(_fileSystem.FileExists(TestConstants.ExistingJpgFullFileName));
        }
        public void RenamingToExistingFileWithSameNameFails()
        {
            // Arrange
            _fileSystem.AddFile(TestConstants.ExistingJpgFullFileName, 100000, new DateTime(2013, 5, 29, 19, 39, 18));
            _fileSystem.CreateDirectory(TestConstants.NewDirectory);
            IFileHandler fileHandler = _fileHandlerFactory.GetFileHandler(TestConstants.ExistingJpgFullFileName, _fileSystem, new MockCompress(_fileSystem),
                new MockExifReader(_fileSystem));
            var newDir = new MockPictureDirectory {Directory = TestConstants.NewDirectory};
            string firstFileName = fileHandler.PerformRenameAndMove(newDir);

            // Act
            string secondFileName = fileHandler.PerformRenameAndMove(newDir);

            // Assert
            Assert.AreEqual(firstFileName, secondFileName);
            Assert.AreNotEqual(secondFileName, TestConstants.ExistingJpgFullFileName);
        }
        public void RenamingToExistingFileFromOtherFileThrowsIoException()
        {
            // Arrange
            _fileSystem.AddFile(TestConstants.ExistingJpgFullFileName, 100000, new DateTime(2013, 5, 29, 19, 39, 18));
            _fileSystem.CreateDirectory(TestConstants.NewDirectory);
            IFileHandler fileHandler = _fileHandlerFactory.GetFileHandler(TestConstants.ExistingJpgFullFileName, _fileSystem, new MockCompress(_fileSystem),
                new MockExifReader(_fileSystem));

            var newDir = new MockPictureDirectory {Directory = TestConstants.NewDirectory};
            _fileSystem.CopyFile(TestConstants.ExistingJpgFullFileName, newDir.Directory + "\\" + fileHandler.GetNewRenamedFileName());

            // Act
            fileHandler.PerformRenameAndMove(newDir);

            // Assert
            Assert.Fail("Expected exception");
        }
        public void JpgFileHandlerGetNewFileNameReturnsSameNameForAlreadyRenamedFile()
        {
            // Arrange
            _fileSystem.AddFile(TestConstants.ExistingJpgFullFileName, 100000, new DateTime(2013, 5, 29, 19, 39, 18));
            _fileSystem.CreateDirectory("\\tempdir");
            _fileSystem.CreateDirectory("\\newdir");

            var tempDir = new MockPictureDirectory {Directory = "\\tempdir"};
            var newDir = new MockPictureDirectory {Directory = "\\newdir"};
            IFileHandler fileHandler = _fileHandlerFactory.GetFileHandler(TestConstants.ExistingJpgFullFileName, _fileSystem, null, new MockExifReader(_fileSystem));
            string newFileName = fileHandler.GetNewRenamedFileName();
            string movedFileName = fileHandler.PerformRenameAndMove(tempDir);
            IFileHandler fileHandler2 = _fileHandlerFactory.GetFileHandler(movedFileName, _fileSystem, null, new MockExifReader(_fileSystem));

            // Act
            string newFileName2 = fileHandler2.GetNewRenamedFileName();

            // Assert
            Assert.AreEqual(newFileName, newFileName2);
        }