Beispiel #1
0
        public void WhenAddingReminder_ThenUpdatesServiceReminder()
        {
            const int newReminderId = 456;

            var vehicle = new Vehicle {
                VehicleId = DefaultVehicleId, Name = "vehicle"
            };

            _vehicleRepository
            .Setup(r => r.GetVehicle(DefaultUserId, DefaultVehicleId))
            .Returns(vehicle);

            _reminderRepository
            .Setup(r => r.Create(DefaultVehicleId, It.IsAny <Reminder>()))
            .Callback(new Action <int, Reminder>((vehicleId, reminder) =>
            {
                // represents the entity created internally
                reminder.ReminderId = newReminderId;
                reminder.VehicleId  = DefaultVehicleId;
            }));

            var formModel = new ReminderFormModel();

            var handler = new AddReminderToVehicle(_vehicleRepository.Object, _reminderRepository.Object);

            handler.Execute(DefaultUserId, DefaultVehicleId, formModel);

            Assert.Equal(newReminderId, formModel.ReminderId);
            Assert.Equal(DefaultVehicleId, formModel.VehicleId);
        }
Beispiel #2
0
        public ActionResult Add(int vehicleId, ReminderFormModel reminder)
        {
            if ((reminder != null) && ModelState.IsValid)
            {
                var errors = Using <CanAddReminder>().Execute(CurrentUserId, reminder);
                ModelState.AddModelErrors(errors, "Add");

                if (ModelState.IsValid)
                {
                    Using <AddReminderToVehicle>().Execute(CurrentUserId, vehicleId, reminder);
                    return(RedirectToAction("Details", "Reminder", new { id = reminder.ReminderId }));
                }
            }

            var vehicles = Using <GetVehicleListForUser>()
                           .Execute(CurrentUserId);

            var vehicle = vehicles.First(v => v.VehicleId == vehicleId);

            var reminders = Using <GetUnfulfilledRemindersForVehicle>()
                            .Execute(CurrentUserId, vehicleId, vehicle.Odometer ?? 0)
                            .Select(r => new ReminderSummaryModel(r, r.IsOverdue ?? false));

            var viewModel = new ReminderAddViewModel
            {
                VehicleList = new VehicleListViewModel(vehicles, vehicleId)
                {
                    IsCollapsed = true
                },
                Reminder  = reminder,
                Reminders = new SelectedItemList <ReminderSummaryModel>(reminders),
            };

            return(View(viewModel));
        }
Beispiel #3
0
        public void WhenCanAddReminderWithInvalidDueDistance_ThenReturnsValidationResult()
        {
            var vehicle1 = new Vehicle
            {
                VehicleId = DefaultVehicleId,
                Name      = "vehicle1",
                Fillups   = new[] { new FillupEntry {
                                        Odometer = 7000
                                    } }
            };

            _vehicleRepositoryMock
            .Setup(vr => vr.GetVehicle(DefaultUserId, DefaultVehicleId))
            .Returns(vehicle1);

            var handler = new CanAddReminder(_vehicleRepositoryMock.Object);

            var formModel = new ReminderFormModel {
                VehicleId = DefaultVehicleId, Title = "Test", DueDistance = 5000
            };

            var result = handler.Execute(DefaultUserId, formModel);

            Assert.NotEmpty(result);
        }
Beispiel #4
0
        public void WhenReminderIdSet_ThenValueUpdated()
        {
            var target = new ReminderFormModel();

            target.ReminderId = 4;

            int actual = target.ReminderId;

            Assert.Equal(4, actual);
        }
Beispiel #5
0
        public void WhenTitleSet_ThenValueUpdated()
        {
            var target = new ReminderFormModel();

            target.Title = "Title";

            string actual = target.Title;

            Assert.Equal("Title", actual);
        }
Beispiel #6
0
        public void WhenRemarksSet_ThenValueUpdated()
        {
            var target = new ReminderFormModel();

            target.Remarks = "Remarks";

            string actual = target.Remarks;

            Assert.Equal("Remarks", actual);
        }
Beispiel #7
0
        public void WhenDueDateSet_ThenValueUpdated()
        {
            var target = new ReminderFormModel();

            target.DueDate = new DateTime(2011, 01, 01);

            DateTime?actual = target.DueDate;

            Assert.NotNull(actual);
            Assert.Equal(new DateTime(2011, 01, 01), actual);
        }
Beispiel #8
0
        public void WhenConstructed_ThenSuccessful()
        {
            var actual = new ReminderFormModel();

            Assert.NotNull(actual);
            Assert.Equal(0, actual.ReminderId);
            Assert.Null(actual.Title);
            Assert.Null(actual.Remarks);
            Assert.Null(actual.DueDate);
            Assert.Null(actual.DueDistance);
        }
Beispiel #9
0
        public void WhenDueDistanceSet_ThenValueUpdated()
        {
            var target = new ReminderFormModel();

            target.DueDistance = 5;

            int?actual = target.DueDistance;

            Assert.NotNull(actual);
            Assert.Equal(5, actual);
        }
Beispiel #10
0
        public void WhenTitleSetToNull_ThenUpdatesValue()
        {
            var target = new ReminderFormModel();

            target.Title = "Title";

            target.Title = null;

            string actual = target.Title;

            Assert.Null(actual);
        }
Beispiel #11
0
        public void WhenNeitherDueDateNorDueDistanceSet_ThenValidationFails()
        {
            var target = new ReminderFormModel();

            target.Title = "Title";

            var  validationContext = new ValidationContext(target, null, null);
            var  validationResults = new List <ValidationResult>();
            bool actual            = Validator.TryValidateObject(target, validationContext, validationResults, true);

            Assert.False(actual);
        }
Beispiel #12
0
        public void WhenReminderDueDateAndDueDistanceNull_ThenIsOverdueReturnsFalse()
        {
            var reminder = new ReminderFormModel()
            {
                Title = "future reminder", DueDate = null, DueDistance = null
            };

            reminder.UpdateLastVehicleOdometer(10);
            bool isOverdue = reminder.IsOverdue;

            Assert.False(isOverdue);
        }
Beispiel #13
0
        public void WhenRemarksSetToNull_ThenUpdatesValue()
        {
            var target = new ReminderFormModel();

            target.Remarks = "Remarks";

            target.Remarks = null;

            string actual = target.Remarks;

            Assert.Null(actual);
        }
Beispiel #14
0
        public void WhenReminderIsOverdueByDateAndDueDistanceNull_ThenIsOverdueReturnsTrue()
        {
            var reminder = new ReminderFormModel()
            {
                Title = "future reminder", DueDate = DateTime.UtcNow.AddDays(-2), DueDistance = null
            };

            reminder.UpdateLastVehicleOdometer(10);
            bool isOverdue = reminder.IsOverdue;

            Assert.True(isOverdue);
        }
Beispiel #15
0
        public void WhenDueDistanceSetToNull_ThenUpdatesValue()
        {
            var target = new ReminderFormModel();

            target.DueDistance = 5;

            target.DueDistance = null;

            int?actual = target.DueDistance;

            Assert.Null(actual);
        }
Beispiel #16
0
        public void WhenReminderIsNotOverdue_ThenIsOverdueReturnsFalse()
        {
            var reminder = new ReminderFormModel()
            {
                Title = "future reminder", DueDate = DateTime.UtcNow.AddDays(2), DueDistance = 10000
            };

            reminder.UpdateLastVehicleOdometer(10);
            bool isOverdue = reminder.IsOverdue;

            Assert.False(isOverdue);
        }
Beispiel #17
0
        public void WhenDueDateSetToNull_ThenUpdatesValue()
        {
            var target = new ReminderFormModel();

            target.DueDate = new DateTime(2011, 01, 01);

            target.DueDate = null;

            DateTime?actual = target.DueDate;

            Assert.Null(actual);
        }
Beispiel #18
0
        public void WhenAddReminderPostWithInvalidReminder_ThenReturnsToCreatePage()
        {
            MockDefaultHandlers();

            ReminderController controller = GetTestableReminderController();

            controller.ModelState.AddModelError("test", "test error");

            var          reminderForm = new ReminderFormModel();
            ActionResult result       = controller.Add(defaultVehicleId, reminderForm);

            Assert.IsType(typeof(ContentTypeAwareResult), result);
        }
Beispiel #19
0
        public void WhenTitleSetToValidValue_ThenValidationPasses()
        {
            var target = new ReminderFormModel();

            target.Title   = "Title";
            target.DueDate = DateTime.UtcNow;

            var  validationContext = new ValidationContext(target, null, null);
            var  validationResults = new List <ValidationResult>();
            bool actual            = Validator.TryValidateObject(target, validationContext, validationResults, true);

            Assert.True(actual);
            Assert.Equal(0, validationResults.Count);
        }
Beispiel #20
0
        public void WhenTitleSetTo51Characters_ThenValidationFails()
        {
            var target = new ReminderFormModel();

            target.Title = new string('1', 51);

            var  validationContext = new ValidationContext(target, null, null);
            var  validationResults = new List <ValidationResult>();
            bool actual            = Validator.TryValidateObject(target, validationContext, validationResults, true);

            Assert.False(actual);
            Assert.Equal(1, validationResults[0].MemberNames.Count());
            Assert.Equal("Title", validationResults[0].MemberNames.First());
        }
Beispiel #21
0
        public void WhenDueDistanceSetToNegative_ThenValidationFails()
        {
            var target = new ReminderFormModel();

            target.Title = "Title";

            target.DueDistance = -5;

            var  validationContext = new ValidationContext(target, null, null);
            var  validationResults = new List <ValidationResult>();
            bool actual            = Validator.TryValidateObject(target, validationContext, validationResults, true);

            Assert.False(actual);
            Assert.Equal(1, validationResults[0].MemberNames.Count());
            Assert.Equal("DueDistance", validationResults[0].MemberNames.First());
        }
Beispiel #22
0
        public void WhenCanAddReminderWithInvalidVehicleId_ThenReturnsValidationResult()
        {
            const int nonExistentVehicleId = -1;

            _vehicleRepositoryMock
            .Setup(vr => vr.GetVehicle(DefaultUserId, nonExistentVehicleId))
            .Returns((Vehicle)null);

            var handler = new CanAddReminder(_vehicleRepositoryMock.Object);

            var formModel = new ReminderFormModel {
                VehicleId = nonExistentVehicleId, Title = "Test", DueDistance = 20000
            };

            var result = handler.Execute(DefaultUserId, formModel);

            Assert.NotEmpty(result);
        }
Beispiel #23
0
        public ActionResult Add(int vehicleId, ReminderFormModel reminder)
        {
            if ((reminder != null) && ModelState.IsValid)
            {
                var errors = Using <CanAddReminder>().Execute(CurrentUserId, reminder);
                ModelState.AddModelErrors(errors, "Add");

                if (ModelState.IsValid)
                {
                    Using <AddReminderToVehicle>().Execute(CurrentUserId, vehicleId, reminder);

                    this.SetConfirmationMessage(Messages.ReminderController_ReminderAdded);

                    return(RedirectToAction("List", "Reminder", new { vehicleId }));
                }
            }
            this.SetAlertMessage(Messages.PleaseFixInvalidData);
            return(new ContentTypeAwareResult(reminder));
        }
Beispiel #24
0
        public void WhenCanAddReminder_ThenReturnsEmptyCollection()
        {
            var vehicle1 = new Vehicle {
                VehicleId = DefaultVehicleId, Name = "vehicle1"
            };

            _vehicleRepositoryMock
            .Setup(r => r.GetVehicle(DefaultUserId, DefaultVehicleId))
            .Returns(vehicle1);

            var handler = new CanAddReminder(_vehicleRepositoryMock.Object);

            var formModel = new ReminderFormModel {
                VehicleId = DefaultVehicleId, Title = "Test", DueDistance = 20000
            };

            var result = handler.Execute(DefaultUserId, formModel);

            Assert.Empty(result);
        }
Beispiel #25
0
        public ActionResult Add(int vehicleId)
        {
            var vehicle = Using <GetVehicleById>()
                          .Execute(CurrentUserId, vehicleId);

            if (vehicle == null)
            {
                throw new HttpException((int)HttpStatusCode.NotFound,
                                        Messages.ReminderController_VehicleNotFound);
            }

            var reminder = new ReminderFormModel
            {
                VehicleId    = vehicleId,
                DueDateDay   = DateTime.Now.Day.ToString(),
                DueDateMonth = DateTime.Now.Month.ToString(),
                DueDateYear  = DateTime.Now.Year.ToString()
            };

            return(new ContentTypeAwareResult(reminder));
        }
Beispiel #26
0
        public void WhenAddReminderWithValidReminder_ThenReturnsToReminderListView()
        {
            var formModel = new ReminderFormModel();

            MockDefaultHandlers();

            MockHandlerFor <CanAddReminder>(
                x => x
                .Setup(h => h.Execute(_defaultUser.UserId, formModel))
                .Returns(new ValidationResult[] { }));

            MockHandlerFor <AddReminderToVehicle>(
                x => x.Setup(h => h.Execute(_defaultUser.UserId, defaultVehicleId, formModel)));

            ReminderController controller = GetTestableReminderController();
            var result = (RedirectToRouteResult)controller.Add(defaultVehicleId, formModel);

            Assert.NotNull(result);
            Assert.Equal("List", result.RouteValues["action"]);
            Assert.Equal("Reminder", result.RouteValues["controller"]);
        }
Beispiel #27
0
        public void WhenAddRemindersWithValidReminder_ThenUpdatesVehicleInRepository()
        {
            var formModel = new ReminderFormModel();

            MockDefaultHandlers();

            MockHandlerFor <CanAddReminder>(
                x => x
                .Setup(h => h.Execute(_defaultUser.UserId, formModel))
                .Returns(new ValidationResult[] { }));

            var handler = MockHandlerFor <AddReminderToVehicle>(
                x => x
                .Setup(h => h.Execute(_defaultUser.UserId, defaultVehicleId, formModel))
                .Verifiable("add handler not called"));

            var controller = GetTestableReminderController();

            controller.Add(defaultVehicleId, formModel);

            handler.Verify();
        }
Beispiel #28
0
        public void WhenConstructed_ThenIsFulfilledIsFalse()
        {
            var target = new ReminderFormModel();

            Assert.False(target.IsFulfilled);
        }