Beispiel #1
0
        public void Given_get_When_Save_Then_Returns_View()
        {
            // Given
            var target = GetTarget();
            var viewModel = new AccidentDetailsViewModel();

            // When
            var result = target.Save(viewModel);

            // Then
            Assert.IsInstanceOf<ViewResult>(result);
        }
Beispiel #2
0
        public void Given_get_When_Save_Then_Returns_AccidentDetailsViewModel()
        {
            // Given
            var target = GetTarget();
            var viewModel = new AccidentDetailsViewModel();

            // When
            var result = target.Save(viewModel) as ViewResult;

            // Then
            Assert.That(result.Model, Is.InstanceOf<AccidentDetailsViewModel>());
        }
        public JsonResult SaveAndNext(AccidentDetailsViewModel model)
        {
            Validate(model);

            if (ModelState.IsValid)
            {
                UpdateAccidentDetails(model);
                return Json(new { Success = true });
            }
            else
            {
                return ModelStateErrorsAsJson();
            }
        }
        public ActionResult Save(AccidentDetailsViewModel model)
        {
            Validate(model);

            if (!ModelState.IsValid)
            {
                return InvalidCreateAccidentDetailsViewResult(model);
            }
            else
            {
                try
                {
                    UpdateAccidentDetails(model);
                    TempData["Notice"] = "Accident details successfully updated";
                    return RedirectToIndexAction(model);
                }
                catch (ValidationException validationException)
                {
                    ModelState.AddValidationErrors(validationException);
                }
            }

            return View("Index", model);
        }
Beispiel #5
0
        public void given_valid_request_when_save_then_dateandtime_of_accident_contains_correct_value()
        {
               // Given
            var target = GetTarget();
            var viewModel = new AccidentDetailsViewModel
                                {
                                    AccidentRecordId = 1L,
                                    DateOfAccident = DateTime.Now.ToShortDateString(),
                                    TimeOfAccident = DateTime.Now.ToShortTimeString(),
                                    SiteId = 1L,
                                    OffSiteName = "Other Site Name",
                                    Location = "Location Name",
                                    AccidentTypeId = 1L,
                                    OtherAccidentType = "Other Accident Type",
                                    AccidentCauseId = 1L,
                                    OtherAccidentCause = "Other Accident Cause",
                                    FirstAiderEmployeeId = new Guid(),
                                    NonEmployeeFirstAiderName = "Other First Aider Name",
                                    DetailsOfFirstAid = "Details of first aid"
                                };

            // When
            var result = target.Save(viewModel) as ViewResult;

            // Then

            var expected =
                DateTime.Parse(viewModel.DateOfAccident).Add(DateTime.Parse(viewModel.TimeOfAccident).TimeOfDay);

            _accidentRecordService.Verify(
                x =>
                x.UpdateAccidentRecordAccidentDetails(
                    It.Is<UpdateAccidentRecordAccidentDetailsRequest>(
                        request => request.DateOfAccident ==expected)));
        }
Beispiel #6
0
        public void given_first_aider_not_selected_and_other_not_specified_when_save_then_model_state_returns_error()
        {
            //given
            var target = GetTarget();
            var viewModel = new AccidentDetailsViewModel
            {
                AccidentRecordId = 1L,
                DateOfAccident = DateTime.Now.ToShortDateString(),
                SiteId = 1L,
                AccidentTypeId = 1L,
                OtherAccidentType = string.Empty,
                AccidentCauseId = 1L,
                OtherAccidentCause = string.Empty,
                FirstAidAdministered = true,
                FirstAiderEmployeeId = Guid.Empty,
                NonEmployeeFirstAiderName = string.Empty,
            };

            //when
            target.Save(viewModel);
            //then

            Assert.True(target.ModelState.Keys.Contains("NonEmployeeFirstAiderName"), "First Aider not specified");
        }
Beispiel #7
0
        public void given__invalid_accident_time_when_save_then_model_state_returns_error()
        {
            //given
            var target = GetTarget();
            var viewModel = new AccidentDetailsViewModel
            {
                AccidentRecordId = 1L,
                DateOfAccident = DateTime.Now.ToShortDateString(),
                TimeOfAccident = "ABC",
                SiteId = 1L,
                AccidentTypeId = 1L,
                OtherAccidentType = string.Empty,
                AccidentCauseId = 1L,
                OtherAccidentCause = string.Empty,
                FirstAiderEmployeeId = new Guid(),
                NonEmployeeFirstAiderName = "Other First Aider Name",
                DetailsOfFirstAid = "Details of first aid"
            };

            //when
            target.Save(viewModel);
            //then

            Assert.True(target.ModelState.Keys.Contains("TimeOfAccident"), "Time of accident no tspecified");
        }
Beispiel #8
0
        public void given_accident_cause_not_selected_and_other_not_specified_when_save_then_model_state_returns_error()
        {
            //given
            var target = GetTarget();
            var viewModel = new AccidentDetailsViewModel
            {
                AccidentRecordId = 1L,
                DateOfAccident = DateTime.Now.ToShortDateString(),
                SiteId = 1L,
                AccidentTypeId = 1L,
                OtherAccidentType = string.Empty,
                AccidentCauseId = AccidentDetailsViewModel.OTHER_ACCIDENT_CAUSE,
                OtherAccidentCause = string.Empty,
                FirstAiderEmployeeId = new Guid(),
                NonEmployeeFirstAiderName = "Other First Aider Name",
                DetailsOfFirstAid = "Details of first aid"
            };

            //when
            target.Save(viewModel);
            //then

            Assert.True(target.ModelState.Keys.Contains("OtherAccidentCause"), "Other Accident Cause not specified");
        }
Beispiel #9
0
        public void Given_Offsite_and_location_not_specified_then_modelstate_returns_error()
        {
            //given
            var target = GetTarget();
            var viewModel = new AccidentDetailsViewModel
            {
                AccidentRecordId = 1L,
                DateOfAccident = DateTime.Now.ToShortDateString(),
                SiteId = -1,
                OffSiteName = string.Empty,
                Location = "Location Name",
                AccidentTypeId = 1L,
                OtherAccidentType = "Other Accident Type",
                AccidentCauseId = 1L,
                OtherAccidentCause = "Other Accident Cause",
                FirstAiderEmployeeId = new Guid(),
                NonEmployeeFirstAiderName = "Other First Aider Name",
                DetailsOfFirstAid = "Details of first aid"
            };

            //when
            target.Save(viewModel);
            //then
            Assert.IsFalse(target.ModelState.IsValid);

            Assert.True(target.ModelState.Keys.Contains("OffSiteName"),"Offsite name not specified");
        }
        private void UpdateAccidentDetails(AccidentDetailsViewModel model)
        {
            var request = UpdateAccidentRecordAccidentDetailsRequest.Create(CurrentUser.CompanyId,
                                                                            model.AccidentRecordId,
                                                                            model.DateOfAccident,
                                                                            FormatTime(model.TimeOfAccident),
                                                                            model.SiteId.HasValue && model.SiteId != AccidentDetailsViewModel.OFF_SITE ? model.SiteId : null,
                                                                            model.SiteId == AccidentDetailsViewModel.OFF_SITE ? model.OffSiteName : string.Empty, model.Location,
                                                                            model.AccidentTypeId,
                                                                            model.AccidentTypeId ==AccidentDetailsViewModel.OTHER_ACCIDENT_TYPE ? model.OtherAccidentType : string.Empty,
                                                                            model.AccidentCauseId,
                                                                            model.AccidentCauseId == AccidentDetailsViewModel.OTHER_ACCIDENT_CAUSE ?  model.OtherAccidentCause : string.Empty,
                                                                            model.FirstAidAdministered,
                                                                            model.FirstAiderEmployeeId,
                                                                            model.FirstAiderEmployeeId == Guid.Empty ? model.NonEmployeeFirstAiderName : string.Empty,
                                                                            model.DetailsOfFirstAid,
                                                                            CurrentUser.UserId
                                                                            
                );

            _accidentRecordService.UpdateAccidentRecordAccidentDetails(request);
        }
Beispiel #11
0
        public void given_first_aider_is_employee_when_save_then_other_non_employee_firstaider_name_is_correct()
        {
            //given
            var target = GetTarget();
            var viewModel = new AccidentDetailsViewModel
            {
                AccidentRecordId = 1L,
                DateOfAccident = DateTime.Now.ToShortDateString(),
                TimeOfAccident = "12:30",
                SiteId = 1L,
                OffSiteName = "Other Site Name",
                Location = "Location Name",
                AccidentTypeId = 1L,
                OtherAccidentType = "Other Accident Type",
                AccidentCauseId = 1L,
                OtherAccidentCause = "Other Accident Cause",
                FirstAiderEmployeeId = Guid.NewGuid(),
                NonEmployeeFirstAiderName = "Other First Aider Name",
                DetailsOfFirstAid = "Details of first aid"
            };

            //when
            target.Save(viewModel);

            //then
            _accidentRecordService.Verify(
               x =>
               x.UpdateAccidentRecordAccidentDetails(
                   It.Is<UpdateAccidentRecordAccidentDetailsRequest>(
                       y => y.NonEmployeeFirstAiderName == string.Empty)));
        }
        private void Validate(AccidentDetailsViewModel model)
        {
            if (string.IsNullOrEmpty(model.DateOfAccident))
            {
                ModelState.AddModelError("DateOfAccident", "Date of accident is required.");
            }

            if (string.IsNullOrEmpty(model.DateOfAccident))
            {
                ModelState.AddModelError("DateOfAccident", "Date of accident is required.");
            }
            else
            {
                DateTime result;
                if (!DateTime.TryParse(model.DateOfAccident, out result))
                {
                    ModelState.AddModelError("DateOfAccident", "Please specify date of accident in correct format (dd/mm/yyyy).");
                }
            }

            if (string.IsNullOrEmpty(model.TimeOfAccident))
            {
                ModelState.AddModelError("TimeOfAccident", "Time of accident is required.");
            }
            else
            {
                var isInvalid = false;
                var rxTimeOfAccident = new Regex(@"^\d{2}[\s:;,\.]?\d{2}$");

                if (!rxTimeOfAccident.IsMatch(model.TimeOfAccident))
                {
                    isInvalid = true;
                }

                DateTime result;
                if (!DateTime.TryParse(FormatTime(model.TimeOfAccident), out result))
                {
                    isInvalid = true;
                }

                if(isInvalid)
                {
                    ModelState.AddModelError("TimeOfAccident", "Please specify time of accident in correct format (HH:MM).");
                }
            }

            if (model.SiteId == null || model.SiteId ==default(long))
            {
                ModelState.AddModelError("SiteId", "Please select a Site.");
            }
            else if (model.SiteId == AccidentDetailsViewModel.OFF_SITE && string.IsNullOrEmpty(model.OffSiteName))
            {
                ModelState.AddModelError("OffSiteName", "Please specify an off-site name.");
            }

            if (string.IsNullOrEmpty(model.Location))
            {
                ModelState.AddModelError("Location", "Location of accident is required.");
            }

            if (model.AccidentTypeId == null || model.AccidentTypeId == default(long))
            {
                ModelState.AddModelError("AccidentTypeId", "Please select the kind of accident.");
            }
            else if (model.AccidentTypeId == AccidentDetailsViewModel.OTHER_ACCIDENT_TYPE && string.IsNullOrEmpty(model.OtherAccidentType))
            {
                ModelState.AddModelError("OtherAccidentType", "Please describe the kind of accident.");
            }

            if (model.AccidentCauseId ==null | model.AccidentCauseId== default(long))
            {
                ModelState.AddModelError("AccidentCauseId", "Please select the cause of the accident.");
            }
            else if (model.AccidentCauseId == AccidentDetailsViewModel.OTHER_ACCIDENT_CAUSE && string.IsNullOrEmpty(model.OtherAccidentCause))
            {
                ModelState.AddModelError("OtherAccidentCause", "Please describe the cause of the accident.");
            }

            if (model.FirstAidAdministered)
            {
                if (model.FirstAiderEmployeeId == null ||
                    model.FirstAiderEmployeeId == Guid.Empty && string.IsNullOrEmpty(model.NonEmployeeFirstAiderName))
                {
                    ModelState.AddModelError("NonEmployeeFirstAiderName", "Please enter the name of the first aider.");
                }
            }
        }
        private ActionResult InvalidCreateAccidentDetailsViewResult(AccidentDetailsViewModel model)
        {
            var viewModel = _accidentDetailsViewModelFactory
             .WithCompanyId(CurrentUser.CompanyId)
             .WithAccidentRecordId(model.AccidentRecordId)
             .WithSites(CurrentUser.GetSitesFilter())
             .GetViewModel();

            return View("Index", viewModel);
        }
 private ActionResult RedirectToIndexAction(AccidentDetailsViewModel model)
 {
     return RedirectToAction("Index", new {model.AccidentRecordId, CurrentUser.CompanyId});
 }
Beispiel #15
0
        public void Given_Valid_Model_When_Save_Then_Maps_Correct_Request()
        {
            // Given
            var target = GetTarget();
            var viewModel = new AccidentDetailsViewModel
                                {
                                    AccidentRecordId = 1L,
                                    DateOfAccident = DateTime.Now.ToShortDateString(),
                                    TimeOfAccident = "12:30",
                                    SiteId = 1L,
                                    Location = "Location Name",
                                    AccidentTypeId = 1L,                                    
                                    AccidentCauseId = 1L,
                                    FirstAiderEmployeeId = new Guid(),
                                    DetailsOfFirstAid = "Details of first aid"
                                };

            // When
            var result = target.Save(viewModel) as ViewResult;

            // Then
            _accidentRecordService.Verify(
                x =>
                x.UpdateAccidentRecordAccidentDetails(
                    It.Is<UpdateAccidentRecordAccidentDetailsRequest>(
                        y => y.AccidentRecordId == viewModel.AccidentRecordId)));

            _accidentRecordService.Verify(
                x =>
                x.UpdateAccidentRecordAccidentDetails(
                    It.Is<UpdateAccidentRecordAccidentDetailsRequest>(y => y.SiteId == viewModel.SiteId)));

            _accidentRecordService.Verify(
                x =>
                x.UpdateAccidentRecordAccidentDetails(
                    It.Is<UpdateAccidentRecordAccidentDetailsRequest>(y => y.Location == viewModel.Location)));

            _accidentRecordService.Verify(
                x =>
                x.UpdateAccidentRecordAccidentDetails(
                    It.Is<UpdateAccidentRecordAccidentDetailsRequest>(y => y.AccidentTypeId == viewModel.AccidentTypeId)));

            _accidentRecordService.Verify(
                x =>
                x.UpdateAccidentRecordAccidentDetails(
                    It.Is<UpdateAccidentRecordAccidentDetailsRequest>(
                        y => y.AccidentCauseId == viewModel.AccidentCauseId)));

            _accidentRecordService.Verify(
                x =>
                x.UpdateAccidentRecordAccidentDetails(
                    It.Is<UpdateAccidentRecordAccidentDetailsRequest>(
                        y => y.FirstAiderEmployeeId == viewModel.FirstAiderEmployeeId)));

            _accidentRecordService.Verify(
                x =>
                x.UpdateAccidentRecordAccidentDetails(
                    It.Is<UpdateAccidentRecordAccidentDetailsRequest>(
                        y => y.DetailsOfFirstAid == viewModel.DetailsOfFirstAid)));
        }
Beispiel #16
0
        public void Given_Valid_Model_When_Save_Then_Calls_Correct_Methods()
        {
            // Given
            var target = GetTarget();
             var viewModel = new AccidentDetailsViewModel
                                {
                                    AccidentRecordId = 1L,
                                    DateOfAccident = DateTime.Now.ToShortDateString(),
                                    TimeOfAccident = "12:30",
                                    SiteId = 1L,
                                    OffSiteName = "Other Site Name",
                                    Location = "Location Name",
                                    AccidentTypeId = 1L,
                                    OtherAccidentType = "Other Accident Type",
                                    AccidentCauseId = 1L,
                                    OtherAccidentCause = "Other Accident Cause",
                                    FirstAiderEmployeeId = new Guid(),
                                    NonEmployeeFirstAiderName = "Other First Aider Name",
                                    DetailsOfFirstAid = "Details of first aid"
                                };

            // When
            var result = target.Save(viewModel) as ViewResult;

            // Then
            _accidentRecordService.Verify(
                x => x.UpdateAccidentRecordAccidentDetails(It.IsAny<UpdateAccidentRecordAccidentDetailsRequest>()));
        }
        public AccidentDetailsViewModel GetViewModel()
        {
            var accidentRecord = _accidentRecordService.GetByIdAndCompanyIdWithSite(_accidentRecordId,_companyId);

            var employees = _employeeService.GetAll(_companyId);
            var sites = _siteService.Search(new SearchSitesRequest
                                                {
                                                    CompanyId = _companyId,
                                                    AllowedSiteIds = _sites
                                                });

            var accidentTypes = _accidentTypeService.GetAllForCompany(_companyId);                      
            var accidentCauses = _causeOfAccidentService.GetAll();

            var viewModel = new AccidentDetailsViewModel();
            viewModel.CompanyId = _companyId;
            if (accidentRecord != null)
            {
                viewModel.AccidentRecordId = accidentRecord.Id;
                viewModel.DateOfAccident = accidentRecord.DateAndTimeOfAccident.HasValue ? accidentRecord.DateAndTimeOfAccident.Value.ToShortDateString() : string.Empty;
                viewModel.TimeOfAccident = accidentRecord.DateAndTimeOfAccident.HasValue ? accidentRecord.DateAndTimeOfAccident.Value.ToShortTimeString() : string.Empty;

                if (accidentRecord.SiteWhereHappened ==null && !string.IsNullOrEmpty(accidentRecord.OffSiteSpecifics))
                {
                    viewModel.SiteId = AccidentDetailsViewModel.OFF_SITE;
                }
                else if(accidentRecord.SiteWhereHappened!=null)
                {
                    viewModel.SiteId = accidentRecord.SiteWhereHappened.Id;
                    viewModel.Site = accidentRecord.SiteWhereHappened.Name;
                }


                viewModel.OffSiteName = accidentRecord.OffSiteSpecifics;
                viewModel.Location = accidentRecord.Location;

                viewModel.AccidentTypeId = accidentRecord.AccidentType != null ? accidentRecord.AccidentType.Id : 0;
                viewModel.AccidentType = accidentRecord.AccidentType != null ? accidentRecord.AccidentType.Description: string.Empty;
                viewModel.OtherAccidentType = accidentRecord.AccidentTypeOther;


                viewModel.AccidentCauseId = accidentRecord.CauseOfAccident != null ? accidentRecord.CauseOfAccident.Id : 0;
                viewModel.AccidentCause = accidentRecord.CauseOfAccident != null ? accidentRecord.CauseOfAccident.Description : string.Empty;
                viewModel.OtherAccidentCause = accidentRecord.CauseOfAccidentOther;


                if (accidentRecord.EmployeeFirstAider == null && !string.IsNullOrEmpty(accidentRecord.NonEmployeeFirstAiderSpecifics))
                {
                    viewModel.FirstAiderEmployeeId = Guid.Empty;
                    viewModel.FirstAiderEmployee = "Other";
                    viewModel.ShowNonEmployeeFirstAidInputs = true;
                }
                else if(accidentRecord.EmployeeFirstAider!=null)
                {
                    viewModel.FirstAiderEmployeeId = accidentRecord.EmployeeFirstAider.Id;
                    viewModel.FirstAiderEmployee = accidentRecord.EmployeeFirstAider.FullName;
                }

                viewModel.NonEmployeeFirstAiderName = accidentRecord.NonEmployeeFirstAiderSpecifics;
                viewModel.FirstAidAdministered = accidentRecord.FirstAidAdministered.HasValue && accidentRecord.FirstAidAdministered.Value;
                viewModel.DetailsOfFirstAid = accidentRecord.DetailsOfFirstAidTreatment;

            }
            viewModel.Employees =
                employees.Select(AutoCompleteViewModel.ForEmployee)
                .AddDefaultOption(String.Empty)
                .WithOtherOption(new AutoCompleteViewModel("Non-employee", Guid.Empty.ToString()));

            viewModel.Sites =
                sites.Select(AutoCompleteViewModel.ForSite)
                .AddDefaultOption(String.Empty)
                .WithOtherOption(new AutoCompleteViewModel("Off-site", AccidentDetailsViewModel.OFF_SITE.ToString()));

            //viewModel.AccidentTypes =
            //    accidentTypes.Select(AutoCompleteViewModel.ForAccidentTypes)
            //    .AddDefaultOption(String.Empty);

            viewModel.AccidentTypes = AutoCompleteViewModel.ForAccidentTypes(accidentTypes);

            viewModel.AccidentCauses =
                accidentCauses.Select(AutoCompleteViewModel.ForAccidentCauses)
                .AddDefaultOption(String.Empty);
               
            
            return viewModel;
        }