public void NoModificationsIfNoCheckedFiles()
        {
            // Arrange
            IDuplicateReaderFactory readerFactory = this.ArrangeReaderFactoryForGroups(
                this.ArrangeGroup(
                    new GroupFile()
            {
                Checked = false
            },
                    new GroupFile()
            {
                Checked = false
            }));

            IFileModifier fileModifier = Substitute.For <IFileModifier>();

            DuplicateProcessor uut = this.DuplicateProcessorWithDefaultMocks(
                readerFactory: readerFactory,
                fileModifier: fileModifier);

            // Act
            uut.ProcessDuplicates();

            // Assert
            fileModifier.DidNotReceive().Delete(Arg.Any <GroupFile>());
            fileModifier.DidNotReceive().Move(Arg.Any <GroupFile>(), Arg.Any <string>());
        }
        public void CheckedFilesAreDeleted()
        {
            // Arrange
            GroupFile deleteThis1 = new GroupFile()
            {
                FullName = @"c:\folder\delete1.png", Checked = true
            };
            GroupFile deleteThis2 = new GroupFile()
            {
                FullName = @"c:\somewhere\delete2.jpg", Checked = true
            };

            IDuplicateReaderFactory readerFactory = this.ArrangeReaderFactoryForGroups(
                this.ArrangeGroup(deleteThis1, deleteThis2));

            IFileModifier fileModifer = Substitute.For <IFileModifier>();

            DuplicateProcessor uut = this.DuplicateProcessorWithDefaultMocks(
                readerFactory: readerFactory,
                fileModifier: fileModifer);

            // Act
            uut.ProcessDuplicates();

            // Assert
            fileModifer.Received().Delete(deleteThis1);
            fileModifer.Received().Delete(deleteThis2);
        }
        public void StagedFilesReplaceCheckedGoodFile()
        {
            // Arrange
            IDuplicateHandlerConfiguration config = Substitute.For <IDuplicateHandlerConfiguration>();

            config.GoodPath.Returns(@"c:\good");

            GroupFile goodFile = new GroupFile()
            {
                FullName = config.GoodPath + @"\decent.jpg", Checked = true
            };
            GroupFile stagedFile1 = new GroupFile()
            {
                FullName = @"c:\staged\better.png", Checked = false
            };
            GroupFile stagedFile2 = new GroupFile()
            {
                FullName = @"c:\staged\better_v2.png", Checked = false
            };

            IDuplicateReaderFactory readerFactory = this.ArrangeReaderFactoryForGroups(
                this.ArrangeGroup(goodFile, stagedFile1, stagedFile2));

            IFileModifier fileModifier = Substitute.For <IFileModifier>();

            DuplicateProcessor uut = this.DuplicateProcessorWithDefaultMocks(
                config: config,
                fileModifier: fileModifier,
                readerFactory: readerFactory);

            // Act
            uut.ProcessDuplicates();

            // Assert
            fileModifier.Received(1).Delete(goodFile);
            fileModifier.Received(1).Move(stagedFile1, config.GoodPath);
            fileModifier.Received(1).Move(stagedFile2, config.GoodPath);
        }
        public void StagedFileIsNotMovedIfMultipleGoodPathsFound()
        {
            // Arrange
            IDuplicateHandlerConfiguration config = Substitute.For <IDuplicateHandlerConfiguration>();

            config.GoodPath.Returns(@"c:\good");

            GroupFile goodFile1 = new GroupFile()
            {
                FullName = config.GoodPath + @"\folder1\decent.jpg", Checked = true
            };
            GroupFile goodFile2 = new GroupFile()
            {
                FullName = config.GoodPath + @"\folder2\ok.jpg", Checked = true
            };
            GroupFile stagedFile = new GroupFile()
            {
                FullName = @"c:\staged\better.png", Checked = false
            };

            IDuplicateReaderFactory readerFactory = this.ArrangeReaderFactoryForGroups(
                this.ArrangeGroup(goodFile1, goodFile2, stagedFile));

            IFileModifier fileModifier = Substitute.For <IFileModifier>();

            DuplicateProcessor uut = this.DuplicateProcessorWithDefaultMocks(
                config: config,
                readerFactory: readerFactory,
                fileModifier: fileModifier);

            // Act
            uut.ProcessDuplicates();

            // Assert
            fileModifier.Received(1).Delete(goodFile1);
            fileModifier.Received(1).Delete(goodFile2);
            fileModifier.DidNotReceive().Move(Arg.Any <GroupFile>(), Arg.Any <string>());
        }