예제 #1
0
            public async Task Should_Observe_Pushed()
            {
                // Given
                PopupNavigationEvent pushing = null;
                var viewModel = new NavigableViewModelMock();
                var popup     = new PopupMock
                {
                    ViewModel = viewModel
                };
                var navigation  = Substitute.For <IPopupNavigation>();
                var viewLocator = Substitute.For <IViewLocator>();

                viewLocator.ResolveView(Arg.Any <IViewModel>()).Returns(popup);
                PopupViewStackService sut = new PopupViewStackServiceFixture().WithNavigation(navigation).WithViewLocator(viewLocator);

                sut.Pushed.Subscribe(x => pushing = x);

                // When
                await sut.PushPopup(viewModel);

                navigation.Pushed += Raise.EventWith(new PopupNavigationEventArgs(popup, true));

                // Then
                pushing.ViewModel.Should().Be(viewModel);
            }
예제 #2
0
            public async Task Should_Call_Popup_Navigation()
            {
                // Given
                var navigation            = Substitute.For <IPopupNavigation>();
                PopupViewStackService sut = new PopupViewStackServiceFixture().WithNavigation(navigation);

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

                // Then
                await navigation.Received(1).PushAsync(Arg.Any <PopupPage>()).ConfigureAwait(false);
            }
예제 #3
0
            public async Task Should_Observe_Pushed()
            {
                // Given
                bool pushed = false;
                PopupViewStackService sut = new PopupViewStackServiceFixture().WithNavigation(new PopupNavigationMock());

                sut.Pushed.Select(_ => true).Subscribe(x => pushed = x);

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

                // Then
                pushed.Should().BeTrue();
            }
예제 #4
0
            public async Task Should_Call_View_Locator()
            {
                // Given
                var viewLocator = Substitute.For <IViewLocator>();

                viewLocator.ResolveView(Arg.Any <IViewModel>()).Returns(new PopupMock());
                PopupViewStackService sut = new PopupViewStackServiceFixture().WithViewLocator(viewLocator);

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

                // Then
                viewLocator.Received(1).ResolveView(Arg.Any <IViewModel>());
            }
예제 #5
0
            public async Task Should_Call_View_Model_Factory()
            {
                // Given
                var viewModelFactory = Substitute.For <IViewModelFactory>();

                viewModelFactory.Create <NavigableViewModelMock>(Arg.Any <string>()).Returns(new NavigableViewModelMock());
                PopupViewStackService sut = new PopupViewStackServiceFixture().WithViewModelFactory(viewModelFactory);

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

                // Then
                viewModelFactory.Received(1).Create <NavigableViewModelMock>();
            }
예제 #6
0
            public async Task Should_Observe_Pushing()
            {
                // Given
                bool pushing              = false;
                var  parameter            = new NavigationParameter();
                PopupViewStackService sut = new PopupViewStackServiceFixture().WithNavigation(new PopupNavigationMock());

                sut.Pushing.Select(_ => true).Subscribe(x => pushing = x);

                // When
                await sut.PushPopup(new NavigableViewModelMock(), parameter);

                // Then
                pushing.Should().BeTrue();
            }
예제 #7
0
            public async Task Should_Call_Navigating_To()
            {
                // Given
                var parameter   = new NavigationParameter();
                var viewLocator = Substitute.For <IViewLocator>();
                var viewModel   = Substitute.For <INavigable>();

                viewLocator.ResolveView(Arg.Any <NavigableViewModelMock>(), Arg.Any <string>()).Returns(new PopupMock());
                var navigation            = Substitute.For <IPopupNavigation>();
                PopupViewStackService sut = new PopupViewStackServiceFixture().WithNavigation(navigation);

                // When
                await sut.PushPopup(viewModel, parameter);

                // Then
                await viewModel.Received(1).WhenNavigatingTo(parameter);
            }
예제 #8
0
            public async Task Should_Call_Navigating_To()
            {
                // Given
                var parameter   = new NavigationParameter();
                var viewModel   = Substitute.For <AbstractViewModel>();
                var viewLocator = Substitute.For <IViewLocator>();

                viewLocator.ResolveView(Arg.Any <AbstractViewModel>()).Returns(new PopupMock());
                var factory = Substitute.For <IViewModelFactory>();

                factory.Create <AbstractViewModel>(Arg.Any <string>()).Returns(viewModel);
                var navigation            = Substitute.For <IPopupNavigation>();
                PopupViewStackService sut = new PopupViewStackServiceFixture().WithNavigation(navigation).WithViewModelFactory(factory).WithViewLocator(viewLocator);

                // When
                await sut.PushPopup <AbstractViewModel>(parameter);

                // Then
                await viewModel.Received(1).WhenNavigatingTo(parameter);
            }
예제 #9
0
            public async Task Should_Call_Destroy()
            {
                // Given
                var viewModel = Substitute.For <IEverything>();
                var popup     = new PopupMock
                {
                    ViewModel = viewModel
                };
                bool pushed = false;
                PopupViewStackService sut = new PopupViewStackServiceFixture().WithNavigation(new PopupNavigationMock());

                sut.Popped.Select(_ => true).Subscribe(x => pushed = x);

                // When
                await sut.PushPopup(viewModel);

                await sut.RemovePopup(viewModel);

                // Then
                ((IDestructible)popup.ViewModel).Received(1).Destroy();
            }