public void GetCommandListForFolderTask_TargetDoesNotExist_JustCreateLinkCommandReturned()
        {
            ICommandFactory factory = new MockCommandFactory();
            IFolder linkTo = MockRepository.GenerateMock<IFolder>();
            linkTo.Stub(l => l.FolderExists()).Return(false);

            IFolder linkFrom = MockRepository.GenerateMock<IFolder>();
            linkFrom.Stub(l => l.FolderExists()).Return(true);

            ICommandDiscovery discoverer = new CommandDiscovery(factory, null, null);
            List<ICommand> taskList = discoverer.GetCommandListForFolderTask(linkTo, linkFrom, false, false);

            Assert.IsTrue(taskList.Count() == 1, "There should be one item in the list");
            Assert.IsTrue(((MockCommand)taskList[0]).CommandName.Equals("CreateLinkCommand"));
        }
        public void GetCommandListForFileTask_LinkToDoesntExist_CreateLinkOnly()
        {
            FakeFile linkTo = new FakeFile("LinkTo");
            FakeFile linkFrom = new FakeFile("LinkFrom");

            var commandFactory = MockRepository.GenerateMock<ICommandFactory>();

            var commandDiscovery = new CommandDiscovery(commandFactory, f => new FakeFile(f), f => new FakeFolder(f));
            var commandList = commandDiscovery.GetCommandListForFileTask(linkTo, linkFrom, false, false);

            Assert.AreEqual(1, commandList.Count);
            commandFactory.AssertWasCalled(cf => cf.CreateFileLinkCommand(Arg<IFile>.Is.Equal(linkTo),
                                                                          Arg<IFile>.Is.Equal(linkFrom)));
        }
        public void GetCommandListForFileTask_LinkToExistsMoveFileNoOverWrite_MoveFileCommandAdded()
        {
            FakeFile linkTo = new FakeFile("LinkTo");
            linkTo.ExistsReturnValue = true;
            FakeFile linkFrom = new FakeFile("LinkFrom");

            var commandFactory = MockRepository.GenerateMock<ICommandFactory>();

            var commandDiscovery = new CommandDiscovery(commandFactory, f => new FakeFile(f), f => new FakeFolder(f));
            var commandList = commandDiscovery.GetCommandListForFileTask(linkTo, linkFrom, true, false);

            Assert.AreEqual(2, commandList.Count);
            commandFactory.AssertWasCalled(cf => cf.MoveFileCommand(Arg<IFile>.Is.Equal(linkTo), 
                                                                    Arg<IFile>.Is.Equal(linkFrom),
                                                                    Arg<Boolean>.Is.Equal(false)));

            commandFactory.AssertWasCalled(cf => cf.CreateFileLinkCommand(Arg<IFile>.Is.Equal(linkTo),
                                                                          Arg<IFile>.Is.Equal(linkFrom)));
        
        }
        public void GetCommandListTask_TargetDoesNotExistSourceIsFolder_FolderLinkCreated()
        {
            String nonExistentPath = "testFile";
            String folderTarget = @"c:\testFolder";

            IFileFactoryForPath fileFactory = (s) => new FakeFile(s);
            var folderFactory = GetFolderFactoryThatReturnsExistsFor(folderTarget);

            var factory = MockRepository.GenerateMock<ICommandFactory>();
            var commandDiscovery = new CommandDiscovery(factory, fileFactory, folderFactory);

            commandDiscovery.GetCommandListTask(nonExistentPath, folderTarget, false, false);
            factory.AssertWasCalled(f => f.CreateFolderLinkCommand(Arg<IFolder>.Matches(folder => folder.FolderPath.Equals(nonExistentPath)),
                                                                   Arg<IFolder>.Matches(folder => folder.FolderPath.Equals(folderTarget))));
        }
        public void GetCommandListTask_TargetDoesNotExistSourceIsFile_FileLinkCreated()
        {
            String nonExistentPath = "testFile";
            String targetPath = "target";

            IFileFactoryForPath fileFactory = GetFileFactoryThatReturnsExistsFor(targetPath);
            IFolderFactoryForPath folderFactory = (s) => new FakeFolder(s);

            var factory = MockRepository.GenerateMock<ICommandFactory>();
            var commandDiscovery = new CommandDiscovery(factory, fileFactory, folderFactory);

            commandDiscovery.GetCommandListTask(nonExistentPath, targetPath, false, false);

            factory.AssertWasCalled(f => f.CreateFileLinkCommand(Arg<IFile>.Matches(file => file.FullFilePath.Equals(nonExistentPath)),
                                                                 Arg<IFile>.Matches(file => file.FullFilePath.Equals(targetPath))));
        }
        public void GetCommandListTask_File_TargetIsFolderFileNameIsAppended()
        {
            String linkToFile = "testFile";
            String folderTarget = @"c:\testFolder";
            String expectedTarget = @"c:\testFolder\testFile";

            var fileFactory = GetFileFactoryThatReturnsExistsFor(linkToFile);
            var folderFactory = GetFolderFactoryThatReturnsExistsFor(folderTarget);

            var factory = MockRepository.GenerateMock<ICommandFactory>();
            var commandDiscovery = new CommandDiscovery(factory, fileFactory, folderFactory);

            commandDiscovery.GetCommandListTask(linkToFile, folderTarget, false, false);

            factory.AssertWasCalled(f => f.CreateFileLinkCommand(Arg<IFile>.Matches(linkTo => linkTo.FullFilePath.Equals(linkToFile)),
                                                                 Arg<IFile>.Matches(linkFrom => linkFrom.FullFilePath.Equals(expectedTarget))));
        }
        public void GetCommandListTask_LinkAtIsFile_TargetIsFolderExceptionThrown()
        {
            String linkToFile = "testFile";
            String folderTarget = @"c:\testFolder";

            var folderFactory = GetFolderFactoryThatReturnsExistsFor(linkToFile);
            var fileFactory = GetFileFactoryThatReturnsExistsFor(folderTarget);

            var factory = MockRepository.GenerateMock<ICommandFactory>();
            var commandDiscovery = new CommandDiscovery(factory, fileFactory, folderFactory);

            Assert.Throws<InvalidOperationException>(() => commandDiscovery.GetCommandListTask(linkToFile, folderTarget, false, false));
        }
        public void GetCommandListTask_File_ReturnedCommandListContainsFileLink()
        {
          
            var factory = MockRepository.GenerateMock<ICommandFactory>();
            var commandDiscovery = new CommandDiscovery(factory, f => new FakeFile(f) { ExistsReturnValue = true}, f => new FakeFolder(f));

            commandDiscovery.GetCommandListTask("testFile", "", false, false);

            factory.AssertWasCalled(f => f.CreateFileLinkCommand(Arg<IFile>.Matches(file => file.FullFilePath.Equals("testFile")), Arg<IFile>.Is.Anything));
        }
        public void GetCommandListTask_Folder_ReturnedCommandListContainsFolderLink()
        {
            var factory = MockRepository.GenerateMock<ICommandFactory>();
            var commandDiscovery = new CommandDiscovery(factory, f => new FakeFile(f), f => new FakeFolder(f));

            commandDiscovery.GetCommandListTask("testFile", "", false, false);

            factory.AssertWasCalled(f => f.CreateFolderLinkCommand(Arg<IFolder>.Matches(folder => folder.FolderPath.Equals("testFile")), Arg<IFolder>.Is.Anything));
        }
        public void GetCommandListForFolderTask_TargetHasSubFolderWithOneWithOverwriteFile_SubfolderAndOneIsMovedCreatedInSource()
        {
            ICommandFactory factory = MockRepository.GenerateMock<ICommandFactory>();
            FakeFolder subFolder = new FakeFolder(@"c:\target\subfolder\");
            subFolder.FileList = new List<IFile> { Helpers.CreateStubHelpers.GetIFileStub("1.txt", @"c:\target\subfolder\") };

            FakeFolder linkTo = new FakeFolder(@"c:\target\") { FolderExistsReturnValue = true };
            linkTo.SubFolderList = new List<IFolder> { subFolder };

            FakeFolder linkFrom = new FakeFolder(@"c:\destination\") { FolderExistsReturnValue = true };

            ICommandDiscovery discoverer = new CommandDiscovery(factory, f => new FakeFile(f), f => new FakeFolder(f) { FolderExistsReturnValue = false });
            discoverer.GetCommandListForFolderTask(linkTo, linkFrom, true, true);

            factory.AssertWasCalled(f => f.MoveFileCommand(
                Arg<IFile>.Matches(source => source.FullFilePath.Equals(@"c:\target\subfolder\1.txt")),
                Arg<IFile>.Matches(target => target.FullFilePath.Equals(@"c:\destination\subfolder\1.txt")),
                Arg<Boolean>.Is.Equal(true)
                ));

        }
        public void GetCommandListForFolderTask_TargetHasEmptySubFolder_SubfolderCreatedInSource()
        {
            ICommandFactory factory = MockRepository.GenerateMock<ICommandFactory>();

            FakeFolder linkTo = new FakeFolder(@"c:\target\") { FolderExistsReturnValue = true };
            linkTo.SubFolderList = new List<IFolder>()
                {
                    new FakeFolder(@"c:\target\subfolder\")
                };

            FakeFolder linkFrom = new FakeFolder(@"c:\destination\") { FolderExistsReturnValue = true };

            ICommandDiscovery discoverer = new CommandDiscovery(factory, f => new FakeFile(f), f => new FakeFolder(f) { FolderExistsReturnValue = false });
            List<ICommand> taskList = discoverer.GetCommandListForFolderTask(linkTo, linkFrom, true, false);

            factory.AssertWasCalled(f => f.CreateFolder(Arg<IFolder>.Matches(folder => folder.FolderPath.Equals(@"c:\destination\subfolder\"))));
            
        }
        public void GetCommandListForFolderTask_SourceDoesNotExists_CreateFolderCommandIsFirst()
        {
            ICommandFactory factory = new MockCommandFactory();
            IFolder linkTo = new FakeFolder(@"c:\target\");

            FakeFolder linkFrom = new FakeFolder(@"c:\destination\");
            linkFrom.FolderExistsReturnValue = false;

            ICommandDiscovery discoverer = new CommandDiscovery(factory, (f) => new FakeFile(f), f => new FakeFolder(f));
            List<ICommand> taskList = discoverer.GetCommandListForFolderTask(linkTo, linkFrom, false, false);
            
            MockCommand mockCommand = (MockCommand)taskList[0];

            Assert.AreEqual("CreateFolder", mockCommand.CommandName);
            Assert.AreEqual(mockCommand.ctorParams[0], linkFrom);   
        }
        public void GetCommandListForFolderTask_TargetExistsOneFiles_MoveFileThenDeleteFolderThenCreateLinkReturned()
        {
            ICommandFactory factory = new MockCommandFactory();
            FakeFolder linkTo = new FakeFolder();
            linkTo.FileList = new List<IFile> { Helpers.CreateStubHelpers.GetIFileStub("1.txt", @"c:\path") };
            linkTo.FolderExistsReturnValue = true;

            FakeFolder linkFrom = new FakeFolder(@"c:\dest\");
            linkFrom.FolderExistsReturnValue = true;

            ICommandDiscovery discoverer = new CommandDiscovery(factory, (f) => new FakeFile(f), f => new FakeFolder(f));
            List<ICommand> taskList = discoverer.GetCommandListForFolderTask(linkTo, linkFrom, true, false);

            Assert.IsTrue(taskList.Count() == 3, "There should be three items in the list");
            Assert.IsTrue(((MockCommand)taskList[0]).CommandName.Equals("MoveFileCommand"));
            Assert.IsTrue(((MockCommand)taskList[1]).CommandName.Equals("DeleteFolderCommand"));
            Assert.IsTrue(((MockCommand)taskList[2]).CommandName.Equals("CreateLinkCommand"));
        }
        public void GetCommandListForFolderTask_TargetExistsNoFiles_DeleteFolderThenCreateLinkReturned()
        {
            ICommandFactory factory = new MockCommandFactory();
            FakeFolder linkTo = new FakeFolder() { FolderExistsReturnValue = true };
            
            FakeFolder linkFrom = new FakeFolder(@"c:\dest\");
            linkFrom.FolderExistsReturnValue = true;

            ICommandDiscovery discoverer = new CommandDiscovery(factory, s => new FakeFile(s), f => new FakeFolder(f));
            List<ICommand> taskList = discoverer.GetCommandListForFolderTask(linkTo, linkFrom, true, false);

            Assert.IsTrue(taskList.Count() == 2, "There should be three items in the list");
            Assert.IsTrue(((MockCommand)taskList[0]).CommandName.Equals("DeleteFolderCommand"));
            Assert.IsTrue(((MockCommand)taskList[1]).CommandName.Equals("CreateLinkCommand"));
        }