public void GetEnumeratorGetsCorrectFilesInGroup()
        {
            // Arrange
            IFileSystem fs = this.ArrangeFileSystemForCsvData(
                new CsvDuplicateRecord()
            {
                Group = 1, FileName = "file1", Checked = 0
            },
                new CsvDuplicateRecord()
            {
                Group = 1, FileName = "file2", Checked = 0
            });

            // Act
            CsvDuplicateReader uut = new CsvDuplicateReader(
                config: Substitute.For <IDuplicateHandlerConfiguration>(),
                fileSystem: fs);

            // Assert
            DuplicateGroup group = Assert.Single(uut);

            Assert.Equal(2, group.Files.Count());
            GroupFile file1 = Assert.Single(group.Files, f => f.FullName == "file1");
            GroupFile file2 = Assert.Single(group.Files, f => f.FullName == "file2");
        }
        public void CanHandleReturnsTrueForCorrectFileExtensionsOnly(string fileExtension, bool shouldHandle)
        {
            // Arrange
            FileInfoBase fileInfo = Substitute.For <FileInfoBase>();

            fileInfo.Extension.Returns(fileExtension);

            CsvDuplicateReader uut = new CsvDuplicateReader(
                config: Substitute.For <IDuplicateHandlerConfiguration>(),
                fileSystem: Substitute.For <IFileSystem>());

            // Act
            bool canHandle = uut.CanHandle(fileInfo);

            // Assert
            Assert.Equal(shouldHandle, canHandle);
        }
        public void CheckedValueResolvesToCorrectBoolean(int checkedValue, bool isChecked)
        {
            // Arrange
            IFileSystem fs = this.ArrangeFileSystemForCsvData(
                new CsvDuplicateRecord()
            {
                Group = 1, FileName = "file1", Checked = checkedValue
            });

            // Act
            CsvDuplicateReader uut = new CsvDuplicateReader(
                config: Substitute.For <IDuplicateHandlerConfiguration>(),
                fileSystem: fs);

            // Assert
            DuplicateGroup group = Assert.Single(uut);
            GroupFile      file  = Assert.Single(group.Files);

            Assert.Equal(isChecked, file.Checked);
        }
        public void CallingFilesPropertyAlwaysReturnsSameInstance()
        {
            // Arrange
            IFileSystem fs = this.ArrangeFileSystemForCsvData(
                new CsvDuplicateRecord()
            {
                Group = 1, FileName = "file1", Checked = 0
            });

            CsvDuplicateReader uut = new CsvDuplicateReader(
                config: Substitute.For <IDuplicateHandlerConfiguration>(),
                fileSystem: fs);

            // Act
            DuplicateGroup          group        = uut.Single();
            IEnumerable <GroupFile> intersection = group.Files.Intersect(group.Files);
            IEnumerable <GroupFile> except       = group.Files.Except(group.Files);

            // Assert
            Assert.Single(intersection);
            Assert.Empty(except);
        }
        public void GetEnumeratorGetsCorrectNumberOfGroups()
        {
            // Arrange
            IFileSystem fs = this.ArrangeFileSystemForCsvData(
                new CsvDuplicateRecord()
            {
                Group = 1, FileName = "", Checked = 0
            },
                new CsvDuplicateRecord()
            {
                Group = 2, FileName = "", Checked = 0
            },
                new CsvDuplicateRecord()
            {
                Group = 2, FileName = "", Checked = 0
            },
                new CsvDuplicateRecord()
            {
                Group = 3, FileName = "", Checked = 0
            },
                new CsvDuplicateRecord()
            {
                Group = 3, FileName = "", Checked = 0
            },
                new CsvDuplicateRecord()
            {
                Group = 3, FileName = "", Checked = 0
            });

            CsvDuplicateReader uut = new CsvDuplicateReader(
                config: Substitute.For <IDuplicateHandlerConfiguration>(),
                fileSystem: fs);

            // Act & Assert
            Assert.Equal(3, uut.Count());
        }