public async Task AppliesAlgorithmToSources() { var content = new[] { new SourceContent { SourceSide = SourceSide.Left, Data = new byte[] { 1, 2, 3 } }, new SourceContent { SourceSide = SourceSide.Right, Data = new byte[] { 3, 4, 5 } } }.AsEnumerable(); var queue = Substitute.For <IDifferenceQueue>(); var storage = Substitute.For <IStorage>(); var algorithm = Substitute.For <IDifferenceAlgorithm>(); queue.ReadyContents.Returns(Observable.Return(content.InDiffBag(5))); var consumer = new ReadyConsumer(queue, storage, algorithm); await consumer.RunAsync(Scheduler.Immediate, CancellationToken.None); await algorithm.Received().GetDiffAsync(content); }
public async Task SavesDifferenceContentInStorage() { var ready = new[] { new SourceContent { SourceSide = SourceSide.Left, Data = new byte[] { 1, 2, 3 } }, new SourceContent { SourceSide = SourceSide.Right, Data = new byte[] { 3, 4, 5 } } }.AsEnumerable(); var diff = new DifferenceContent { Type = DifferenceType.Detailed, Details = new[] { new DifferenceDetail { LeftOffset = 1, RightOffset = 2 }, new DifferenceDetail { LeftLength = 3, RightLength = 4 }, } }; var queue = Substitute.For <IDifferenceQueue>(); var storage = Substitute.For <IStorage>(); var algorithm = Substitute.For <IDifferenceAlgorithm>(); queue.ReadyContents.Returns(Observable.Return(ready.InDiffBag(5))); algorithm.GetDiffAsync(ready).Returns(Task.FromResult(diff)); var consumer = new ReadyConsumer(queue, storage, algorithm); await consumer.RunAsync(Scheduler.Immediate, CancellationToken.None); await storage.Received().SaveDiffAsync(diff.InDiffBag(5)); }