public void RefreshOn_WithOverlappingRefresh_ShouldReturnCorrectValue( [Frozen] TestSchedulers scheduler, [Frozen] Subject <Unit> refreshOn, object value) { //arrange var observer = scheduler.CreateObserver <ObservableViewModelNotification>(); var i = 0; var sut = new ObservableViewModel <object>(c => { if (++i == 1) { refreshOn.OnNext(Unit.Default); } return(Task.FromResult(value)); }, _ => false, refreshOn, TimeSpan.Zero, new CompositeDisposable(), scheduler); sut.Subscribe(observer); //act refreshOn.OnNext(Unit.Default); scheduler.Start(); //assert var expected = new ObservableViewModelNotification() { Status = ObservableViewModelStatus.Value, Value = value }; observer.Values().Last().ShouldBeEquivalentTo(expected); }
public void ViewModel_WhenInitialized_WithRefreshOnCollectionUpdateNotification_ShouldRefresh( IFixture fixture, TestSchedulers scheduler, int[] expectedValue) { //arrange var notifications = scheduler.CreateColdObservable(OnNext(200, 1)); var observer = scheduler.CreateObserver <ObservableViewModelNotification>(); var sut = new UpdatableObservableViewModelBuilderOptions <int, int[], int>( _ => { }, ct => Task.FromResult(expectedValue), () => notifications, scheduler, scheduler, scheduler) .UpdateAction((i, o) => () => { }) .RefreshOnCollectionUpdateNotification() .ToViewModel(); sut.Subscribe(observer); //act scheduler.Start(); //assert var expected = new ObservableViewModelNotification() { Status = ObservableViewModelStatus.Value, Value = expectedValue }; observer.Values().Last().Value.As <ObservableCollection <int> >().ShouldAllBeEquivalentTo(expectedValue); }
public async Task ViewModel_WhenEmpty_WithRefreshOnCollectionUpdateNotification_ShouldRefresh( IFixture fixture, TestSchedulers scheduler, int[] expectedValue) { //arrange var notifications = scheduler.CreateColdObservable(OnNext(200, 1)); var observer = scheduler.CreateObserver <ObservableViewModelNotification>(); var count = 0; var sut = new UpdatableObservableViewModelBuilderOptions <int, int[], int>( _ => { }, ct => Task.FromResult(expectedValue), () => notifications, scheduler, scheduler, scheduler) .UpdateAction((i, o) => () => { }) .RefreshOnCollectionUpdateNotification() .EmptyPredicate(_ => ++ count == 1) .ToViewModel(); sut.Subscribe(observer); //act await sut.RefreshAsync(); scheduler.AdvanceBy(300); //assert observer.Values().Last().Value.As <ObservableCollection <int> >().ShouldAllBeEquivalentTo(expectedValue); }
public async Task OnNext_WhenSubscribingThenPushingFirstValue_AndFirstValueIsDefaultValue_ShouldReturnCorrectValue( TestSchedulers schedulers) { //arrange var observer = schedulers.CreateObserver <int>(); var sut = new ObservableProperty <int>(schedulers); var expected = sut.Value; sut.Subscribe(observer); //act sut.OnNext(expected); //assert observer.Values().Last().Should().Be(expected); }
public void NotifyNotExecuting_CanExecuteChangedShouldYieldValue( [Frozen] TestSchedulers schedulers, MultipleExecutionCanExecuteStrategy <object> sut, object arg) { //arrange var observer = schedulers.CreateObserver <Unit>(); sut.CanExecuteChanged.Subscribe(observer); //act sut.NotifyNotExecuting(arg); //assert observer.Values().Should().HaveCount(1); }
public async Task ChainEmptyPredicate_WhenPredicateReturnsFalse_OvmStateShouldBeValue( [Frozen] TestSchedulers schedulers, ObservableViewModel <object> sut) { //arrange Func <object, bool> predicate = o => false; var observer = schedulers.CreateObserver <ObservableViewModelNotification>(); sut.ChainEmptyPredicate(predicate); sut.Subscribe(observer); //act await sut.RefreshAsync(); //assert observer.Values().Last().Should().Match <ObservableViewModelNotification>(n => n.Status == ObservableViewModelStatus.Value); }
public void CanExecuteChanged_WhenObservableYieldValue_ShouldYieldValue( [Frozen] Subject <bool> canExecuteObservable, [Frozen] Mock <ICanExecuteStrategy <object> > inner, ObserveCanExecuteStrategy <object> sut, TestSchedulers schedulers, object arg) { //arrange var observer = schedulers.CreateObserver <Unit>(); sut.CanExecuteChanged.Subscribe(observer); //act canExecuteObservable.OnNext(true); //assert observer.Values().Should().HaveCount(1); }