public void ErrorHandlingDuringSpam( [Frozen] TestScheduler scheduler, LiveLoadOrderProvider sut) { var pluginSubj = new Subject <Unit>(); sut.PluginLive.Changed.Returns(pluginSubj); sut.CccLive.Changed.Returns(Observable.Empty <Unit>()); sut.ListingsProvider.Get().Returns( _ => Enumerable.Empty <IModListingGetter>(), _ => throw new NotImplementedException(), _ => Enumerable.Empty <IModListingGetter>()); sut.Get(out var state, scheduler) .AsObservableList(); ErrorResponse err = ErrorResponse.Failure; using var sub = state.Subscribe(x => err = x); err.Succeeded.Should().BeTrue(); pluginSubj.OnNext(Unit.Default); err.Succeeded.Should().BeFalse(); pluginSubj.OnNext(Unit.Default); err.Succeeded.Should().BeTrue(); }
public void GetsListingsInitially( IScheduler scheduler, LiveLoadOrderProvider sut) { var listings = new ModListing[] { new ModListing(TestConstants.MasterModKey, true), new ModListing(TestConstants.MasterModKey2, false), }; sut.ListingsProvider.Get().Returns(listings); sut.PluginLive.Changed.Returns(Observable.Empty <Unit>()); sut.CccLive.Changed.Returns(Observable.Empty <Unit>()); var list = sut.Get(out var state, scheduler) .AsObservableList(); list.Items.Should().Equal(listings); sut.ListingsProvider.Received(1).Get(); var obsScheduler = new TestScheduler(); var err = obsScheduler.Start(() => state); err.ShouldHaveNoErrors(); err.ShouldNotBeCompleted(); err.Messages.Select(x => x.Value.Value.Succeeded).Should().AllBeEquivalentTo(true); }
public void RetryOnStaleInput( TestScheduler scheduler, LiveLoadOrderProvider sut) { sut.Timings.Throttle.Returns(TimeSpan.Zero); sut.Timings.RetryInterval.Returns(TimeSpan.FromMilliseconds(250)); sut.Timings.RetryIntervalMax.Returns(TimeSpan.FromSeconds(5)); var pluginSubj = new Subject <Unit>(); sut.PluginLive.Changed.Returns(pluginSubj); var cccSubj = new Subject <Unit>(); sut.CccLive.Changed.Returns(cccSubj); sut.ListingsProvider.Get().Returns( _ => throw new NotImplementedException(), _ => throw new NotImplementedException(), _ => Enumerable.Empty <IModListingGetter>()); sut.Get(out var state, scheduler) .AsObservableList(); ErrorResponse err = ErrorResponse.Failure; using var sub = state.Subscribe(x => err = x); err.Succeeded.Should().BeFalse(); sut.ListingsProvider.Received(1).Get(); scheduler.AdvanceBy(TimeSpan.FromMilliseconds(250).Ticks); err.Succeeded.Should().BeFalse(); sut.ListingsProvider.Received(2).Get(); scheduler.AdvanceBy(TimeSpan.FromMilliseconds(500).Ticks); err.Succeeded.Should().BeTrue(); sut.ListingsProvider.Received(3).Get(); }
public void NoSub(LiveLoadOrderProvider sut) { sut.ListingsProvider.DidNotReceive().Get(); var c = sut.PluginLive.DidNotReceive().Changed; sut.PluginLive.DidNotReceive().Get(out _); c = sut.CccLive.DidNotReceive().Changed; sut.CccLive.DidNotReceive().Get(out _); }
public void EitherChangedRequeries( IScheduler scheduler, LiveLoadOrderProvider sut) { var pluginSubj = new Subject <Unit>(); sut.PluginLive.Changed.Returns(pluginSubj); var cccSubj = new Subject <Unit>(); sut.CccLive.Changed.Returns(cccSubj); sut.Get(out _, scheduler) .AsObservableList(); pluginSubj.OnNext(Unit.Default); cccSubj.OnNext(Unit.Default); sut.ListingsProvider.Received(3).Get(); }
public void Throttles( TestScheduler scheduler, LiveLoadOrderProvider sut) { sut.Timings.Throttle.Returns(TimeSpan.FromTicks(5)); var pluginSubj = new Subject <Unit>(); sut.PluginLive.Changed.Returns(pluginSubj); sut.Get(out _, scheduler) .AsObservableList(); scheduler.AdvanceBy(1); pluginSubj.OnNext(Unit.Default); scheduler.AdvanceBy(1); pluginSubj.OnNext(Unit.Default); scheduler.AdvanceBy(sut.Timings.Throttle.Ticks); var c = sut.PluginLive.Received(1).Changed; }