public void UnmodifiedFilesAreAdded()
            {
                // Arrange

                const string file1     = "File1";
                const string file1Hash = "File1Hash";

                var delta = new DiffResult();

                var target = new List <FileMetadata>
                {
                    new FileMetadata
                    {
                        Hash = file1Hash,
                        Name = file1
                    }
                };

                var diff = new FileListDiffService(
                    Mock.Of <IFileHashService>(),
                    Mock.Of <ITimeProvider>());

                // Act

                var result = diff.Apply(delta, target);

                // Assert

                Assert.AreEqual(1, result.Files.Count);

                Assert.AreEqual(file1, result.Files[0].Name);
                Assert.AreEqual(file1Hash, result.Files[0].Hash);
            }
            public void ModifiedFilesAreIdentified()
            {
                // Arrange

                const string file1             = "File1";
                const string file1Hash         = "File1Hash";
                const string file2             = "File2";
                const string file2ModifiedHash = "File2ModifiedHash";

                var filesInDirectory = new[] { file1, file2 };

                var hashService = Mock.Of <IFileHashService>(s =>
                                                             s.ComputeHash(file1) == file1Hash &&
                                                             s.ComputeHash(file2) == file2ModifiedHash);

                var lastRun = new FileMetadataCollection
                {
                    Files = new List <FileMetadata>
                    {
                        new FileMetadata
                        {
                            Hash = file1Hash,
                            Name = file1
                        },
                        new FileMetadata
                        {
                            Hash = "File2Hash",
                            Name = file2
                        }
                    }
                };

                var diff = new FileListDiffService(
                    hashService,
                    Mock.Of <ITimeProvider>());

                // Act

                var result = diff.Compare(filesInDirectory, lastRun.Files);

                // Assert

                Assert.IsEmpty(result.Added);
                Assert.AreEqual(1, result.Modified.Count);
                Assert.AreEqual(file2ModifiedHash, result.Modified[0].Hash);
                Assert.AreEqual(file2, result.Modified[0].Name);
                Assert.IsEmpty(result.Removed);
            }
            public void TimestampIsSet()
            {
                // Arrange

                var now    = new DateTime(2019, 3, 13, 11, 30, 0);
                var delta  = new DiffResult();
                var target = new List <FileMetadata>();

                var timeProvider = Mock.Of <ITimeProvider>(t =>
                                                           t.UtcNow == now);

                var diff = new FileListDiffService(
                    Mock.Of <IFileHashService>(),
                    timeProvider);

                // Act

                var result = diff.Apply(delta, target);

                // Assert

                Assert.AreEqual(now, result.LastUpdated);
            }
            public void RemovedFilesAreIdentified()
            {
                // Arrange

                const string file1 = "File1";
                const string file2 = "File2";

                var filesInDirectory = new[] { file1 };

                var lastRun = new FileMetadataCollection
                {
                    Files = new List <FileMetadata>
                    {
                        new FileMetadata {
                            Name = file1
                        },
                        new FileMetadata {
                            Name = file2
                        }
                    }
                };

                var diff = new FileListDiffService(
                    Mock.Of <IFileHashService>(),
                    Mock.Of <ITimeProvider>());

                // Act

                var result = diff.Compare(filesInDirectory, lastRun.Files);

                // Assert

                Assert.IsEmpty(result.Added);
                Assert.IsEmpty(result.Modified);
                Assert.AreEqual(1, result.Removed.Count);
                Assert.AreEqual(file2, result.Removed[0]);
            }