private DuplicateProcessor DuplicateProcessorWithDefaultMocks(
            IDuplicateReaderFactory readerFactory = null,
            IFileModifier fileModifier            = null,
            IDuplicateHandlerConfiguration config = null,
            IFileSystem fileSystem = null)
        {
            if (fileSystem == null)
            {
                FileSystem fs = new FileSystem();

                fileSystem = Substitute.For <IFileSystem>();
                fileSystem.Path.Returns(Substitute.For <PathBase>());

                fileSystem.Path.GetDirectoryName(Arg.Any <string>())
                .Returns(callInfo => fs.Path.GetDirectoryName(callInfo.Arg <string>()));
                fileSystem.Path.Combine(Arg.Any <string>(), Arg.Any <string>())
                .Returns(callInfo => fs.Path.Combine(callInfo.ArgAt <string>(0), callInfo.ArgAt <string>(1)));
            }

            return(new DuplicateProcessor(
                       readerFactory: readerFactory ?? Substitute.For <IDuplicateReaderFactory>(),
                       config: config ?? Substitute.For <IDuplicateHandlerConfiguration>(),
                       fileSystem: fileSystem,
                       fileModifier: fileModifier ?? Substitute.For <IFileModifier>()));
        }
Ejemplo n.º 2
0
 private XmlDuplicateReader XmlDuplicateReaderWithDefaultMocks(
     IDuplicateHandlerConfiguration config = null,
     IFileOperationsAbstraction fileOps    = null)
 {
     return(new XmlDuplicateReader(
                config: config ?? Substitute.For <IDuplicateHandlerConfiguration>(),
                fileOps: fileOps ?? Substitute.For <IFileOperationsAbstraction>()));
 }
Ejemplo n.º 3
0
 public DuplicateHandlerApp(
     IDuplicateHandlerConfiguration config,
     IDuplicateProcessor duplicateProcessor,
     IFileOperationsAbstraction fileOps)
 {
     _config             = config;
     _duplicateProcessor = duplicateProcessor;
     _fileOps            = fileOps;
 }
 public DuplicateReaderFactory(
     IDuplicateHandlerConfiguration config,
     IEnumerable <IDuplicateReader> readers,
     IFileSystem fileSystem)
 {
     _config     = config;
     _readers    = readers;
     _fileSystem = fileSystem;
 }
Ejemplo n.º 5
0
 public DuplicateProcessor(
     IDuplicateReaderFactory readerFactory,
     IFileModifier fileModifier,
     IDuplicateHandlerConfiguration config,
     IFileSystem fileSystem)
 {
     _readerFactory = readerFactory;
     _fileModifier  = fileModifier;
     _config        = config;
     _fileSystem    = fileSystem;
 }
Ejemplo n.º 6
0
        private static IDuplicateHandlerApp CreateApp(string[] args)
        {
            IServiceProvider serviceProvider = new ServiceCollection()
                                               .AddLogging(loggingBuilder =>
            {
                loggingBuilder
                .AddConsole()
                .AddDebug();
            })
                                               .AddSingleton <IDuplicateHandlerConfiguration>(isp =>
            {
                ILogger <Program> logger             = isp.GetRequiredService <ILogger <Program> >();
                DuplicateHandlerConfiguration config = AssertValidArguments(args, logger);
                return(config);
            })
                                               .AddSingleton <IDuplicateHandlerApp, DuplicateHandlerApp>()
                                               .AddSingleton <IDuplicateReaderFactory, DuplicateReaderFactory>()
                                               .AddSingleton <IFileOperationsAbstraction, FileOperationsImplementation>()
                                               .AddSingleton <IDuplicateReader, XmlDuplicateReader>()
                                               .AddSingleton <IDuplicateReader, CsvDuplicateReader>()
                                               .AddSingleton <IFileSystem, FileSystem>()
                                               .AddSingleton <IDuplicateProcessor, DuplicateProcessor>()
                                               .AddSingleton <DryRunFileModifier>()
                                               .AddSingleton <FileModifier>()
                                               .AddSingleton <IFileModifier>(isp =>
            {
                IDuplicateHandlerConfiguration config = isp.GetRequiredService <IDuplicateHandlerConfiguration>();
                if (config.DryRun)
                {
                    return(isp.GetRequiredService <DryRunFileModifier>());
                }
                else
                {
                    return(isp.GetRequiredService <FileModifier>());
                }
            })
                                               .BuildServiceProvider();

            return(serviceProvider.GetRequiredService <IDuplicateHandlerApp>());
        }
        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>());
        }
 public XmlDuplicateReader(IDuplicateHandlerConfiguration config, IFileOperationsAbstraction fileOps)
 {
     _fileOps = fileOps;
     _config  = config;
 }
 public CsvDuplicateReader(IDuplicateHandlerConfiguration config, IFileSystem fileSystem)
 {
     _config     = config;
     _fileSystem = fileSystem;
 }