Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }