public void TestThatWhenGenerosityChangesThenTipIsRecalculated()
        {
            // Arrange
            base.ClearAll();

            var mockTipService = new Mock<ITipService>();
            mockTipService.Setup(t => t.Calc(It.IsAny<double>(), It.IsAny<int>()))
                          .Returns(37.0);

            var firstViewModel = new FirstViewModel(mockTipService.Object);

            // Act
            firstViewModel.Generosity = 12;

            // Assert
            Assert.AreEqual(37.0, firstViewModel.Tip);
        }
        public void TestThatWhenTipIsRecalculatedThenTipNotificationIsSent()
        {
            // Arrange
            base.ClearAll();

            var mockTipService = new Mock<ITipService>();
            mockTipService.Setup(t => t.Calc(It.IsAny<double>(), It.IsAny<int>()))
                          .Returns(19.0);

            var mockDispatcher = new MockDispatcher();
            Ioc.RegisterSingleton<IMvxViewDispatcher>(mockDispatcher);
            Ioc.RegisterSingleton<IMvxMainThreadDispatcher>(mockDispatcher);

            var tipChangeCount = 0;
            var generosityChangeCount = 0;
            var subTotalChangeCount = 0;
            var firstViewModel = new FirstViewModel(mockTipService.Object);
            firstViewModel.PropertyChanged += (sender, args) =>
                {
                    switch (args.PropertyName)
                    {
                        case "Tip":
                            tipChangeCount++;
                            break;
                        case "SubTotal":
                            subTotalChangeCount++;
                            break;
                        case "Generosity":
                            generosityChangeCount++;
                            break;
                    }
                };

            // Act
            firstViewModel.Generosity = 12;

            // Assert
            Assert.AreEqual(1, tipChangeCount);
            Assert.AreEqual(0, subTotalChangeCount);
            Assert.AreEqual(1, generosityChangeCount);
        }
        public void TestThatPayCommandShowsPayViewModelWithCorrectTotal()
        {
            // Arrange
            base.ClearAll();

            var mockTipService = new Mock<ITipService>();
            mockTipService.Setup(t => t.Calc(It.IsAny<double>(), It.IsAny<int>()))
                          .Returns(19.0);

            var mockDispatcher = new MockDispatcher();
            Ioc.RegisterSingleton<IMvxViewDispatcher>(mockDispatcher);
            Ioc.RegisterSingleton<IMvxMainThreadDispatcher>(mockDispatcher);

            var firstViewModel = new FirstViewModel(mockTipService.Object);
            firstViewModel.SubTotal = 10;
            firstViewModel.Generosity = 12;

            // Act
            firstViewModel.PayCommand.Execute(null);

            // Assert
            Assert.AreEqual(1, mockDispatcher.Requests.Count);
            var request = mockDispatcher.Requests[0];
            Assert.AreEqual(typeof(PayViewModel), request.ViewModelType);
            Assert.AreEqual("29", request.ParameterValues["total"]);
        }