public void Start_WhenFileNotificationIsYield_ShouldCallSynchronize( [Frozen]TestScheduler scheduler, [Frozen(As = typeof(IObservable<MusicMirrorConfiguration>))]TestObservableWrapper<MusicMirrorConfiguration> configurationObservable, [Frozen]Mock<IFileObserverFactory> fileObserverFactory, [Frozen]Mock<IFileSynchronizerVisitorFactory> fileSynchronizerFactory, SynchronizeFilesWhenFileChanged sut, MusicMirrorConfiguration configuration, IFileNotification[][] fileNotification, Mock<IFileSynchronizerVisitor> fileSynchronizerVisitor) { //arrange configurationObservable.SetObservable(scheduler.CreateHotObservable(OnNext(Subscribed + 1, configuration))); const long NotificationsStart = Subscribed + 2; var fileObserver = scheduler.CreateHotObservable( fileNotification.Select((f, i) => OnNext(NotificationsStart + i, f)).ToArray()); fileObserverFactory.Setup(f => f.GetFileObserver(configuration.SourcePath)).Returns(fileObserver); fileSynchronizerFactory.Setup(f => f.CreateVisitor(configuration)).Returns(fileSynchronizerVisitor.Object); //act sut.Start(); scheduler.Start(); //assert foreach (var m in fileNotification.SelectMany(f => f).Select(f => Mock.Get(f))) { m.Verify(ff => ff.Accept(It.IsAny<CancellationToken>(), fileSynchronizerVisitor.Object)); } }
public void ObserveTranscodingResult_WhenFileNotificationIsYield_ShouldReturnCorrectValue( [Frozen]TestScheduler scheduler, [Frozen(As = typeof(IObservable<MusicMirrorConfiguration>))]TestObservableWrapper<MusicMirrorConfiguration> configurationObservable, [Frozen]Mock<IFileObserverFactory> fileObserverFactory, [Frozen]Mock<IFileSynchronizerVisitorFactory> fileSynchronizerFactory, SynchronizeFilesWhenFileChanged sut, MusicMirrorConfiguration configuration, IFileNotification[][] fileNotification, Mock<IFileSynchronizerVisitor> fileSynchronizerVisitor) { //arrange sut.SynchronizationScheduler = ImmediateScheduler.Instance; configurationObservable.SetObservable(scheduler.CreateHotObservable(OnNext(Subscribed + 1, configuration))); const long NotificationsStart = Subscribed + 2; var fileObserver = scheduler.CreateHotObservable( fileNotification.Select((f, i) => OnNext(NotificationsStart + i, f)).ToArray()); fileObserverFactory.Setup(f => f.GetFileObserver(configuration.SourcePath)).Returns(fileObserver); fileSynchronizerFactory.Setup(f => f.CreateVisitor(configuration)).Returns(fileSynchronizerVisitor.Object); scheduler.Schedule(200.Ticks(), () => sut.Start()); //act var actual = scheduler.Start(() => sut.ObserveTranscodingResult()); //assert var expected = fileNotification.SelectMany( (notifications, i) => notifications.Select( f => new FileTranscodingResultNotification.SuccessTranscodingResultNotification(f)) ).ToArray(); actual.Values().ShouldAllBeEquivalentTo(expected, o => o.RespectingRuntimeTypes()); }