public async Task Should_Call_In_Order()
            {
                // Given
                var viewModel1          = Substitute.For <IEverything>();
                var viewModel2          = Substitute.For <IEverything>();
                var subject             = new Subject <IViewModel>();
                var navigationParameter = Substitute.For <INavigationParameter>();
                var view = Substitute.For <IView>();

                view.When(x => x.PopPage())
                .Do(_ => subject.OnNext(viewModel2));
                view
                .PagePopped
                .Returns(subject.AsObservable());
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithView(view);
                await sut.PushPage(viewModel1);

                await sut.PushPage(viewModel2);

                // When
                await sut.PopPage(navigationParameter);

                // Then
                Received.InOrder(() =>
                {
                    view.PopPage(Arg.Any <bool>());
                    viewModel2.WhenNavigatedFrom(Arg.Any <INavigationParameter>());
                    viewModel2.Destroy();
                });
            }
            public async Task Should_Call_View()
            {
                // Given
                var view = Substitute.For <IView>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithView(view);

                // When
                await sut.PushPage <NavigableViewModelMock>();

                // Then
                await view.Received().PushPage(Arg.Any <NavigableViewModelMock>(), Arg.Any <string>(), Arg.Any <bool>(), Arg.Any <bool>());
            }
            public async Task Should_Not_Call_When_Navigated_From()
            {
                // Given
                var viewModel                 = Substitute.For <INavigable>();
                var navigationParameter       = Substitute.For <INavigationParameter>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture();

                // When
                await sut.PushModal(viewModel, navigationParameter);

                // Then
                await viewModel.DidNotReceive().WhenNavigatedFrom(navigationParameter);
            }
            public async Task Should_Throw_If_Parameter_Null()
            {
                // Given
                ParameterViewStackService sut = new ParameterViewStackServiceFixture();

                // When
                var result =
                    await Record.ExceptionAsync(async() => await sut.PopPage(null))
                    .ConfigureAwait(false);

                // Then
                result.Should().BeOfType <ArgumentNullException>().Which.ParamName.Should().Be("parameter");
            }
            public async Task Should_Call_When_Navigated_To()
            {
                // Given
                var viewModel                 = Substitute.For <INavigable>();
                var navigationParameter       = Substitute.For <INavigationParameter>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture();

                // When
                await sut.PushPage(viewModel, navigationParameter);

                // Then
                await viewModel.Received().WhenNavigatedTo(navigationParameter);
            }
            public async Task Should_Not_Call_When_Navigating_To()
            {
                // Given
                var viewModel                 = Substitute.For <INavigable>();
                var navigationParameter       = Substitute.For <INavigationParameter>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithPushed(viewModel);

                // When
                await sut.PopPage(navigationParameter);

                // Then
                await viewModel.DidNotReceive().WhenNavigatingTo(navigationParameter);
            }
            public async Task Should_Throw_If_View_Model_Null()
            {
                // Given
                ParameterViewStackService sut = new ParameterViewStackServiceFixture();

                // When
                var result =
                    await Record.ExceptionAsync(async() => await sut.PushPage <NullViewModelMock>())
                    .ConfigureAwait(false);

                // Then
                result.Should().BeOfType <ArgumentNullException>().Which.ParamName.Should().Be("viewModel");
            }
            public async Task Should_Call_Destroy()
            {
                // Given
                var viewModel = Substitute.For <IEverything>();
                var view      = Substitute.For <IView>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithView(view).WithModal(viewModel);

                // When
                await sut.PopModal();

                // Then
                viewModel.Received(1).Destroy();
            }
Example #9
0
            public async Task Should_Call_When_Navigated_From()
            {
                // Given
                var viewModel                 = Substitute.For <INavigable>();
                var navigationParameter       = Substitute.For <INavigationParameter>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithPushed(viewModel);

                // When
                await sut.PopPage(navigationParameter);

                // Then
                viewModel.Received().WhenNavigatedFrom(Arg.Any <INavigationParameter>());
            }
            public async Task Should_Call_View(string contract, bool withNavigation)
            {
                // Given
                var view = Substitute.For <IView>();
                var navigationParameter       = Substitute.For <INavigationParameter>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithView(view);

                // When
                await sut.PushModal <NavigableViewModelMock>(navigationParameter, contract, withNavigation);

                // Then
                await view.Received().PushModal(Arg.Any <NavigableViewModelMock>(), contract, withNavigation);
            }
            public async Task Should_Throw_If_View_Model_Null()
            {
                // Given
                var navigationParameter       = Substitute.For <INavigationParameter>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture();

                // When
                var result =
                    await Record.ExceptionAsync(async() => await sut.PushModal <NullViewModelMock>(navigationParameter))
                    .ConfigureAwait(false);

                // Then
                result.Should().BeOfType <ArgumentNullException>().Which.ParamName.Should().Be("navigableModal");
            }
Example #12
0
            public async Task Should_Call_View()
            {
                // Given
                var viewModel           = Substitute.For <INavigable>();
                var navigationParameter = Substitute.For <INavigationParameter>();
                var view = Substitute.For <IView>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithView(view);

                // When
                await sut.PushModal(viewModel, navigationParameter);

                // Then
                view.Received().PushModal(viewModel, Arg.Any <string>());
            }
Example #13
0
            public async Task Should_Throw_If_Parameter_Null()
            {
                // Given
                ParameterViewStackService sut = new ParameterViewStackServiceFixture();

                // When
                var result =
                    await Should
                    .ThrowAsync <ArgumentNullException>(async() => await sut.PushModal <NavigableViewModelMock>(null))
                    .ConfigureAwait(false);

                // Then
                result.ParamName.ShouldBe("parameter");
            }
            public async Task Should_Call_View(string contract, bool reset, bool animate)
            {
                // Given
                var viewModel                 = Substitute.For <INavigable>();
                var view                      = Substitute.For <IView>();
                var navigationParameter       = Substitute.For <INavigationParameter>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithView(view);

                // When
                await sut.PushPage(viewModel, navigationParameter, contract, reset, animate);

                // Then
                await view.Received().PushPage(viewModel, contract, reset, animate);
            }
            public async Task Should_Throw_If_Parameter_Null()
            {
                // Given
                var viewModel = Substitute.For <INavigable>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture();

                // When
                var result =
                    await Record.ExceptionAsync(async() => await sut.PushPage(viewModel, (INavigationParameter)null))
                    .ConfigureAwait(false);

                // Then
                result.Should().BeOfType <ArgumentNullException>().Which.ParamName.Should().Be("parameter");
            }
            public async Task Should_Call_View()
            {
                // Given
                var viewModel           = Substitute.For <INavigable>();
                var navigationParameter = Substitute.For <INavigationParameter>();
                var view = Substitute.For <IView>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithView(view).WithPushed(viewModel);

                // When
                await sut.PopPage(navigationParameter);

                // Then
                await view.Received().PopPage(Arg.Any <bool>());
            }
Example #17
0
            public async Task Should_Throw_If_View_Model_Null()
            {
                // Given
                var navigationParameter       = Substitute.For <INavigationParameter>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture();

                // When
                var result =
                    await Should
                    .ThrowAsync <ArgumentNullException>(async() => await sut.PushPage(null, navigationParameter))
                    .ConfigureAwait(false);

                // Then
                result.ParamName.ShouldBe("navigableViewModel");
            }
            public async Task Should_Call_ViewModel_Factory(string?contract)
            {
                // Given
                var factory = Substitute.For <IViewModelFactory>();

                factory.Create <NavigableViewModelMock>(Arg.Any <string?>()).Returns(new NavigableViewModelMock());
                var navigationParameter       = Substitute.For <INavigationParameter>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithFactory(factory);

                // When
                await sut.PushModal <NavigableViewModelMock>(navigationParameter, contract);

                // Then
                factory.Received().Create <NavigableViewModelMock>(contract);
            }
            public async Task Should_Call_Destroy()
            {
                // Given
                var viewModel                 = Substitute.For <IEverything>();
                var navigationParameter       = Substitute.For <INavigationParameter>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithView(new NavigationViewMock());
                await sut.PushPage(viewModel);

                await sut.PushPage(viewModel);

                // When
                await sut.PopPage(navigationParameter);

                // Then
                viewModel.Received(1).Destroy();
            }
Example #20
0
            public async Task Should_Call_When_Page_Popped()
            {
                // Given
                var viewModel1 = Substitute.For <IDestructibleMock>();
                var viewModel2 = Substitute.For <IDestructibleMock>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithView(new NavigationViewMock());

                // When
                await sut.PushPage(viewModel1);

                await sut.PushPage(viewModel2);

                await sut.PopPage();

                // Then
                viewModel2.Received(1).Destroy();
            }
            public async Task Should_Not_Call_When_Navigated_To()
            {
                // Given
                var firstViewModel            = Substitute.For <INavigable>();
                var secondViewModel           = Substitute.For <INavigable>();
                var navigationParameter       = Substitute.For <INavigationParameter>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithView(new NavigationViewMock());

                // When
                await sut.PushPage(firstViewModel);

                await sut.PushPage(secondViewModel);

                await sut.PopPage(navigationParameter);

                // Then
                await secondViewModel.DidNotReceive().WhenNavigatedTo(navigationParameter);
            }
            public async Task Should_Call_In_Order()
            {
                // Given
                var view                      = Substitute.For <IView>();
                var viewModel                 = Substitute.For <INavigable>();
                var navigationParameter       = Substitute.For <INavigationParameter>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithView(view);

                // When
                await sut.PushPage(viewModel, navigationParameter);

                // Then
                Received.InOrder(() =>
                {
                    viewModel.WhenNavigatingTo(Arg.Any <INavigationParameter>());
                    view.PushPage(Arg.Any <IViewModel>(), null, Arg.Any <bool>(), Arg.Any <bool>());
                    viewModel.WhenNavigatedTo(Arg.Any <INavigationParameter>());
                });
            }
            public async Task Should_Call_Destroy()
            {
                // Given
                var viewModel1 = Substitute.For <IEverything>();
                var viewModel2 = Substitute.For <IEverything>();
                var viewModel3 = Substitute.For <IEverything>();
                var view       = Substitute.For <IView>();
                ParameterViewStackService sut = new ParameterViewStackServiceFixture().WithView(view);
                await sut.PushPage(viewModel1);

                await sut.PushPage(viewModel2);

                await sut.PushPage(viewModel3);

                // When
                await sut.PopToRootPage();

                // Then
                Received.InOrder(() =>
                {
                    viewModel3.Destroy();
                    viewModel2.Destroy();
                });
            }