public void ShouldShowSummaryAndStopTimerWhenReturnCar()
        {
            var elapsedTimer     = Substitute.For <ITimer>();
            var elapsedCostTimer = Substitute.For <ITimer>();

            _timerFactoryMock.CreateTimer().Returns(elapsedTimer, elapsedCostTimer);
            var rentalId = Guid.NewGuid();

            _rentalServiceMock.GetRental(rentalId).Returns(new RentalDTO {
                Total = 10
            });
            var sut = new ActiveRentalSessionViewModel(_timerFactoryMock, _rentalServiceMock, _dialogServiceMock,
                                                       _messengerServiceMock)
            {
                CurrentRental = new RentalViewModel
                {
                    RentalId       = rentalId,
                    PricePerMinute = "2.5"
                }
            };

            sut.StopRentalCommand.Execute(null);


            _rentalServiceMock.Received().ReturnCar(rentalId, Arg.Any <DateTime>());
            Assert.Null(sut.ErrorString);
            _messengerServiceMock.Received()
            .Send(Arg.Is <RefreshRentalsMessage>(m => m.Notification == "Rental Stopped!"));
            Assert.True(sut.IsRentalStopped);
            elapsedCostTimer.Received().Stop();
            elapsedTimer.Received().Stop();
            _rentalServiceMock.Received().GetRental(rentalId);
            _dialogServiceMock.Received().ShowMessage(Arg.Any <string>());
        }
        public void ShouldNotCloseActiveRentalSessionViewIfRentalWasNotStopped()
        {
            var elapsedTimer     = Substitute.For <ITimer>();
            var elapsedCostTimer = Substitute.For <ITimer>();

            _timerFactoryMock.CreateTimer().Returns(elapsedTimer, elapsedCostTimer);
            var sut = new ActiveRentalSessionViewModel(_timerFactoryMock, _rentalServiceMock, _dialogServiceMock,
                                                       _messengerServiceMock);

            sut.CloseActiveRentalSessionViewCommand.Execute(null);
            _messengerServiceMock.DidNotReceive()
            .Send(Arg.Is <NotificationMessage>(message => message.Notification == "Stop Car Rental"));
        }
        public void ShouldUpdateTimerTextUponEventRaised(int totalSeconds, string expectedTimeText)
        {
            var elapsedTimer     = Substitute.For <ITimer>();
            var elapsedCostTimer = Substitute.For <ITimer>();

            _timerFactoryMock.CreateTimer().Returns(elapsedTimer, elapsedCostTimer);
            var sut = new ActiveRentalSessionViewModel(_timerFactoryMock, _rentalServiceMock, _dialogServiceMock,
                                                       _messengerServiceMock)
            {
                TotalSeconds = totalSeconds
            };

            elapsedTimer.Tick += Raise.Event();
            Assert.AreEqual(totalSeconds + 1, sut.TotalSeconds);
            Assert.AreEqual(expectedTimeText, sut.TimerText);
        }
        public void ShouldUpdateEstimatedCostTextUponEventRaised()
        {
            var elapsedTimer     = Substitute.For <ITimer>();
            var elapsedCostTimer = Substitute.For <ITimer>();

            _timerFactoryMock.CreateTimer().Returns(elapsedTimer, elapsedCostTimer);
            var sut = new ActiveRentalSessionViewModel(_timerFactoryMock, _rentalServiceMock, _dialogServiceMock,
                                                       _messengerServiceMock)
            {
                TotalSeconds = 60, CurrentRental = new RentalViewModel {
                    PricePerMinute = "2.5"
                }
            };

            elapsedCostTimer.Tick += Raise.Event();
            Assert.AreEqual("2.50", sut.EstimatedCost);
        }
 public void Setup()
 {
     _messengerServiceMock             = Substitute.For <IMessengerService>();
     _activeRentalSessionViewModelMock = Substitute.For <ActiveRentalSessionViewModel>(
         Substitute.For <ITimerFactory>(), Substitute.For <IRentalService>(), Substitute.For <IDialogService>(),
         Substitute.For <IMessengerService>());
     _rentCarViewModelMock = Substitute.For <RentCarViewModel>(Substitute.For <ICarService>(),
                                                               Substitute.For <IRentalService>(), Substitute.For <ICarViewModelMapper>(),
                                                               Substitute.For <IRentalViewModelMapper>(), Substitute.For <IMessengerService>());
     _driverAccountViewModelMock = Substitute.For <DriverAccountViewModel>(Substitute.For <IDriverService>(),
                                                                           Substitute.For <IDriverViewModelMapper>());
     _driverRentalsViewModelMock = Substitute.For <DriverRentalsViewModel>(Substitute.For <IRentalService>(),
                                                                           Substitute.For <IRentalViewModelMapper>());
     _driverRentalsViewModelMock.CurrentDriver = new DriverViewModel()
     {
         Id = Guid.NewGuid()
     };
 }
        public void ShouldCloseActiveRentalSessionViewIfRentalWasStopped()
        {
            var elapsedTimer     = Substitute.For <ITimer>();
            var elapsedCostTimer = Substitute.For <ITimer>();

            _timerFactoryMock.CreateTimer().Returns(elapsedTimer, elapsedCostTimer);
            var sut = new ActiveRentalSessionViewModel(_timerFactoryMock, _rentalServiceMock, _dialogServiceMock,
                                                       _messengerServiceMock)
            {
                TotalSeconds = 10
            };

            sut.IsRentalStopped = true;
            sut.CloseActiveRentalSessionViewCommand.Execute(null);
            _messengerServiceMock.Received()
            .Send(Arg.Is <NotificationMessage>(message => message.Notification == "Stop Car Rental"));
            Assert.Zero(sut.TotalSeconds);
            Assert.False(sut.IsRentalStopped);
        }
        public void ShouldConfigureActiveRentalViewWhenStartRental()
        {
            var elapsedTimer     = Substitute.For <ITimer>();
            var elapsedCostTimer = Substitute.For <ITimer>();

            _timerFactoryMock.CreateTimer().Returns(elapsedTimer, elapsedCostTimer);
            var sut = new ActiveRentalSessionViewModel(_timerFactoryMock, _rentalServiceMock, _dialogServiceMock,
                                                       _messengerServiceMock);
            var rentalViewModel = new RentalViewModel
            {
                RentalId       = Guid.NewGuid(),
                PricePerMinute = "2.5"
            };

            Messenger.Default.Send(new RentalViewModelMessage(RentalViewModelMessageType.StartRental, rentalViewModel));
            Assert.AreEqual(rentalViewModel, sut.CurrentRental);
            _messengerServiceMock.Received()
            .Send(Arg.Is <RefreshRentalsMessage>(m => m.Notification == "Rental Started!"));
            elapsedCostTimer.Received().Start();
            elapsedTimer.Received().Start();
        }
        public void ShouldConfigureActiveRentalViewWhenContinueRental()
        {
            var elapsedTimer     = Substitute.For <ITimer>();
            var elapsedCostTimer = Substitute.For <ITimer>();

            _timerFactoryMock.CreateTimer().Returns(elapsedTimer, elapsedCostTimer);
            var sut = new ActiveRentalSessionViewModel(_timerFactoryMock, _rentalServiceMock, _dialogServiceMock,
                                                       _messengerServiceMock);
            var rentalViewModel = new RentalViewModel
            {
                RentalId       = Guid.NewGuid(),
                PricePerMinute = "2.5",
                StartDateTime  = new DateTime(2020, 03, 03)
            };

            Messenger.Default.Send(new RentalViewModelMessage(RentalViewModelMessageType.ContinueRental,
                                                              rentalViewModel));
            Assert.AreEqual(rentalViewModel, sut.CurrentRental);
            Assert.NotZero(sut.TotalSeconds);
            elapsedCostTimer.Received().Start();
            elapsedTimer.Received().Start();
        }