public void CopyFiles_if_force_is_true_and_destinationPath_does_not_exist_creates_destinationFolder()
        {
            // Arrange
            var filesSystem = new MockFileSystem(new Dictionary<string, MockFileData>
            {
                {@"c:\Temp\Folder\1.txt", new MockFileData(string.Empty)},
                {@"c:\Temp\Folder\2.txt", new MockFileData(string.Empty)},
                {@"c:\Temp\Folder\SubFolder\3.txt", new MockFileData(string.Empty)},
                {@"c:\Temp\Folder\SubFolder\4.txt", new MockFileData(string.Empty)},
            });

            var fileSystemHelper = new FileSystemHelper(filesSystem);

            // Act
            var filesToCopy = fileSystemHelper.GetFiles(@"c:\Temp\", "*.*");
            fileSystemHelper.CopyFiles(filesToCopy, @"C:\Destination\Documents\", force: true);

            // Assert
            filesSystem.AllFiles.Contains(new List<string>
            {
                @"c:\Destination\Documents\Folder\1.txt",
                @"c:\Destination\Documents\Folder\2.txt",
                @"c:\Destination\Documents\Folder\SubFolder\3.txt",
                @"c:\Destination\Documents\Folder\SubFolder\4.txt",
            }, StringComparer.InvariantCultureIgnoreCase);
        }
        public void CopyFiles_Copies_files_to_destinationFolder()
        {
            // Arrange
            CreateFile(GetRealPath(@"c:\Temp\Folder\1.txt"));
            CreateFile(GetRealPath(@"c:\Temp\Folder\2.txt"));
            CreateFile(GetRealPath(@"c:\Temp\Folder\SubFolder\3.txt"));
            CreateFile(GetRealPath(@"c:\Temp\Folder\SubFolder\4.txt"));

            CreateDirectory(GetRealPath(@"d:\Destination\"));

            var fileSystemHelper = new FileSystemHelper(_fileSystem);

            // Act
            var filesToCopy = fileSystemHelper.GetFiles(GetRealPath(@"c:\Temp\"), "*.*");
            fileSystemHelper.CopyFiles(filesToCopy, GetRealPath(@"D:\Destination\"), force: false);

            // Assert
            new List<string>
            {
                @"d:\Destination\Folder\1.txt",
                @"d:\Destination\Folder\2.txt",
                @"d:\Destination\Folder\SubFolder\3.txt",
                @"d:\Destination\Folder\SubFolder\4.txt",
            }
            .ForEach(FileShouldExist);
        }
        public void CopyFiles_Copies_files_to_destinationFolder()
        {
            // Arrange
            var filesSystem = new MockFileSystem(new Dictionary<string, MockFileData>
            {
                {@"c:\Temp\Folder\1.txt", new MockFileData(string.Empty)},
                {@"c:\Temp\Folder\2.txt", new MockFileData(string.Empty)},
                {@"c:\Temp\Folder\SubFolder\3.txt", new MockFileData(string.Empty)},
                {@"c:\Temp\Folder\SubFolder\4.txt", new MockFileData(string.Empty)},

                {@"d:\Destination\", new MockDirectoryData()},
            });

            var fileSystemHelper = new FileSystemHelper(filesSystem);

            // Act
            var filesToCopy = fileSystemHelper.GetFiles(@"c:\Temp\", "*.*");
            fileSystemHelper.CopyFiles(filesToCopy, @"D:\Destination\", force: false);

            // Assert
            filesSystem.AllFiles.Contains(new List<string>
            {
                @"d:\Destination\Folder\1.txt",
                @"d:\Destination\Folder\2.txt",
                @"d:\Destination\Folder\SubFolder\3.txt",
                @"d:\Destination\Folder\SubFolder\4.txt",
            }, StringComparer.InvariantCultureIgnoreCase);
        }
        public void CopyFiles_if_force_is_true_and_destinationPath_does_not_exist_creates_destinationFolder()
        {
            // Arrange
            CreateFile(GetRealPath(@"c:\Temp\Folder\1.txt"));
            CreateFile(GetRealPath(@"c:\Temp\Folder\2.txt"));
            CreateFile(GetRealPath(@"c:\Temp\Folder\SubFolder\3.txt"));
            CreateFile(GetRealPath(@"c:\Temp\Folder\SubFolder\4.txt"));

            var fileSystemHelper = new FileSystemHelper(_fileSystem);

            // Act
            var filesToCopy = fileSystemHelper.GetFiles(GetRealPath(@"c:\Temp\"), "*.*");
            fileSystemHelper.CopyFiles(filesToCopy, GetRealPath(@"D:\Destination\"), force: true);

            // Assert
            new List<string>
            {
                @"d:\Destination\Folder\1.txt",
                @"d:\Destination\Folder\2.txt",
                @"d:\Destination\Folder\SubFolder\3.txt",
                @"d:\Destination\Folder\SubFolder\4.txt",
            }
            .ForEach(FileShouldExist);
        }