Пример #1
0
        public void WhenCanAddFillupWithInvalidFillupOdometer_ThenReturnsValidationResult()
        {
            var fillUp = new FillupEntryFormModel
            {
                Date         = DateTime.UtcNow,
                TotalUnits   = 10,
                PricePerUnit = 1.0,
                Odometer     = 1500              //less than prior fillup
            };

            var fillUps = new List <FillupEntry>
            {
                new FillupEntry
                {
                    FillupEntryId = 1,
                    Date          = DateTime.UtcNow.AddDays(-10),
                    Odometer      = 1000
                },
                new FillupEntry
                {
                    FillupEntryId = 2,
                    Date          = DateTime.UtcNow.AddDays(-1),
                    Odometer      = 2000
                }
            };

            _vehicleRepo
            .Setup(vr => vr.GetVehicle(DefaultUserId, DefaultVehicleId))
            .Returns(new Vehicle {
                VehicleId = DefaultVehicleId, Name = "Vehicle"
            });

            _fillupRepo
            .Setup(x => x.GetFillups(DefaultVehicleId))
            .Returns(fillUps);

            var handler = new CanAddFillup(_vehicleRepo.Object, _fillupRepo.Object);
            var actual  = handler.Execute(DefaultUserId, DefaultVehicleId, fillUp);

            var actualList = new List <ValidationResult>(actual);

            Assert.Equal(1, actualList.Count);
            Assert.Contains("odometer ", actualList[0].Message, StringComparison.CurrentCultureIgnoreCase);
        }
Пример #2
0
        public void WhenAddingFillup_ThenDelegatesToFillupRepository()
        {
            _vehicleRepo
            .Setup(r => r.GetVehicle(DefaultUserId, DefaultVehicleId))
            .Returns(_vehicle);

            var fillupForm = new FillupEntryFormModel
            {
                PricePerUnit   = 0,
                TotalUnits     = 0,
                TransactionFee = 0
            };

            var handler = new AddFillupToVehicle(_vehicleRepo.Object, _fillupRepositoryMock.Object);

            handler.Execute(DefaultUserId, DefaultVehicleId, fillupForm);

            _fillupRepositoryMock
            .Verify(r => r.Create(DefaultUserId, DefaultVehicleId, It.IsAny <FillupEntry>()),
                    Times.Once());
        }
Пример #3
0
        public void WhenAddingFillup_UsesLocationIfVendorNull()
        {
            _vehicleRepo
            .Setup(r => r.GetVehicle(DefaultUserId, DefaultVehicleId))
            .Returns(_vehicle);

            var fillupForm = new FillupEntryFormModel
            {
                Vendor         = null,
                Location       = "testlocation",
                PricePerUnit   = 0,
                TotalUnits     = 0,
                TransactionFee = 0
            };

            var handler = new AddFillupToVehicle(_vehicleRepo.Object, _fillupRepositoryMock.Object);

            handler.Execute(DefaultUserId, DefaultVehicleId, fillupForm);

            _fillupRepositoryMock
            .Verify(r => r.Create(DefaultUserId, DefaultVehicleId, It.Is <FillupEntry>(f => f.Vendor == "testlocation")));
        }
        public void WhenAddingFirstFillup_ThenDoesNotCalculatesDistance()
        {
            _vehicleRepo
            .Setup(r => r.GetVehicle(DefaultUserId, DefaultVehicleId))
            .Returns(_vehicle);

            var fillups = new FillupEntry[] {};

            var fillupForm = new FillupEntryFormModel {
                FillupEntryId = 3, Date = new DateTime(2011, 3, 25), Odometer = 1000
            };

            _fillupRepositoryMock
            .Setup(x => x.GetFillups(DefaultVehicleId))
            .Returns(fillups);

            var handler = new AddFillupToVehicle(_vehicleRepo.Object, _fillupRepositoryMock.Object);

            handler.Execute(DefaultUserId, DefaultVehicleId, fillupForm);

            Assert.Null(fillupForm.Distance);
        }
Пример #5
0
        public ActionResult Add(int vehicleId, FillupEntryFormModel model)
        {
            var vehicles = Using <GetVehicleListForUser>()
                           .Execute(CurrentUserId);

            if (ModelState.IsValid)
            {
                var errors = Using <CanAddFillup>()
                             .Execute(CurrentUserId, vehicleId, model);

                ModelState.AddModelErrors(errors, "AddFillup");

                if (ModelState.IsValid)
                {
                    Using <AddFillupToVehicle>().Execute(CurrentUserId, vehicleId, model);

                    TempData["LastActionMessage"] = Resources.VehicleController_AddFillupSuccessMessage;
                    return(RedirectToAction("List", "Fillup", new { vehicleId = vehicleId }));
                }
            }

            var fillups = Using <GetFillupsForVehicle>()
                          .Execute(vehicleId)
                          .OrderByDescending(f => f.Date);

            var viewModel = new FillupAddViewModel
            {
                VehicleList = new VehicleListViewModel(vehicles, vehicleId)
                {
                    IsCollapsed = true
                },
                FillupEntry = model,
                Fillups     = new SelectedItemList <Model.FillupEntry>(fillups),
            };

            ViewBag.IsFirstFillup = (!fillups.Any());

            return(View(viewModel));
        }
Пример #6
0
        public ActionResult Add(int vehicleId, FillupEntryFormModel model)
        {
            // Vehicle does not need to validate here as we are using a forgery token.

            if (ModelState.IsValid)
            {
                var errors = Using <CanAddFillup>()
                             .Execute(CurrentUserId, vehicleId, model);

                if (errors.Any())
                {
                    ModelState.AddModelErrors(errors, "AddFillup");
                }
                else
                {
                    Using <AddFillupToVehicle>().Execute(CurrentUserId, vehicleId, model);

                    this.SetConfirmationMessage(Messages.FillupController_FillupAddedMessage);

                    return(new ContentTypeAwareResult
                    {
                        WhenHtml = (m, v, t) => RedirectToAction("List", "Fillup", new { vehicleId })
                    });
                }
            }

            this.SetAlertMessage(Messages.PleaseFixInvalidData);

            var fillups = Using <GetFillupsForVehicle>()
                          .Execute(vehicleId)
                          .OrderByDescending(f => f.Date);

            ViewBag.IsFirstFillup = (!fillups.Any());

            return(new ContentTypeAwareResult(model));
        }
Пример #7
0
        public void WhenCanAddFillup_ThenReturnsEmptyCollection()
        {
            var fillUp = new FillupEntryFormModel
            {
                Date         = DateTime.UtcNow,
                TotalUnits   = 10,
                PricePerUnit = 1.0,
            };

            _vehicleRepo
            .Setup(vr => vr.GetVehicle(DefaultUserId, DefaultVehicleId))
            .Returns(new Vehicle {
                VehicleId = DefaultVehicleId, Name = "Vehicle"
            });

            _fillupRepo
            .Setup(x => x.GetFillups(It.IsAny <int>()))
            .Returns(new List <FillupEntry>());

            var handler = new CanAddFillup(_vehicleRepo.Object, _fillupRepo.Object);
            var actual  = handler.Execute(DefaultUserId, DefaultVehicleId, fillUp);

            Assert.Empty(actual);
        }
Пример #8
0
        public void WhenAddingFillup_ThenCalculatesDistance()
        {
            _vehicleRepo
            .Setup(r => r.GetVehicle(DefaultUserId, DefaultVehicleId))
            .Returns(_vehicle);

            var fillups = new[]
            {
                new FillupEntry {
                    FillupEntryId = 1, Date = new DateTime(2011, 3, 23), Odometer = 500
                },
                new FillupEntry {
                    FillupEntryId = 2, Date = new DateTime(2011, 3, 24), Odometer = 750
                }
            };

            var fillupForm = new FillupEntryFormModel
            {
                FillupEntryId  = 3,
                Date           = new DateTime(2011, 3, 26),
                Odometer       = 1000,
                PricePerUnit   = 0,
                TotalUnits     = 0,
                TransactionFee = 0
            };

            _fillupRepositoryMock
            .Setup(x => x.GetFillups(DefaultVehicleId))
            .Returns(fillups);

            var handler = new AddFillupToVehicle(_vehicleRepo.Object, _fillupRepositoryMock.Object);

            handler.Execute(DefaultUserId, DefaultVehicleId, fillupForm);

            Assert.Equal(250, fillupForm.Distance);
        }