public void Given_question_requires_booleanresponse_When_no_corresponding_answer_return_false()
        {
            // Given 
            var questions = new List<Question>()
                            {
                                new Question()
                                {
                                    Id = 1, 
                                    QuestionType = QuestionType.YesNo
                                }
                            };

            var checklist = new Checklist()
            {
                Sections = new List<Section>()
                                                         {
                                                             new Section()
                                                             {
                                                                 Questions = questions
                                                             }
                                                         }
            };

            var employeeChecklist = new EmployeeChecklist()
                                    {
                                        Checklist = checklist,
                                        Answers = new List<PersonalAnswer>()
                                    };

            // When
            var result = employeeChecklist.AreAllQuestionsAnswered();

            // Then
            Assert.IsFalse(result);
        }
        public void Given_many_recipient_When_LastRecipientEmail_called_returns_latest_email()
        {
            var emailAddress1 = "*****@*****.**";
            var emailAddress2 = "*****@*****.**";
            var emailAddress3 = "*****@*****.**";

            var now = DateTime.Now;

            var employeeChecklist = new EmployeeChecklist
                                        {
                                            EmployeeChecklistEmails = new List<EmployeeChecklistEmail>
                                                                          {
                                                                              new EmployeeChecklistEmail
                                                                                  {
                                                                                      RecipientEmail = emailAddress1,
                                                                                      CreatedOn = now.AddDays(-7)
                                                                                  },
                                                                              new EmployeeChecklistEmail
                                                                                  {
                                                                                      RecipientEmail = emailAddress2,
                                                                                      CreatedOn = now.AddDays(-3)
                                                                                  },
                                                                              new EmployeeChecklistEmail
                                                                                  {
                                                                                      RecipientEmail = emailAddress3,
                                                                                      CreatedOn = now.AddDays(-1)
                                                                                  }
                                                                          }
                                        };

            Assert.That(employeeChecklist.LastRecipientEmail, Is.EqualTo(emailAddress3));
        }
        public void Given_checklist_then_reference_of_the_PRA_Reference_is_created_from_the_employee_checklist_Reference()
        {
            //GIVEN
            var employeeChecklist = new EmployeeChecklist();
            employeeChecklist.Employee = new Employee() { Forename = "Sandor", Surname = "Clegane" };
            employeeChecklist.ReferencePrefix = "RefPrefix";
            employeeChecklist.ReferenceIncremental = 5;
            employeeChecklist.Checklist = new Checklist() { Title = "Checklist Title" };
            employeeChecklist.PersonalRiskAssessment = new PersonalRiskAssessment();

            _employeeChecklistRepository.Setup(x => x.GetById(It.IsAny<Guid>()))
                .Returns(employeeChecklist);

            PersonalRiskAssessment savedPRA = null;
            _personalRiskAssessmentRepo.Setup(x => x.Save(It.IsAny<PersonalRiskAssessment>()))
                .Callback<PersonalRiskAssessment>(pra => savedPRA = pra);

            var target = GetTarget();

            //when
            target.CreateRiskAssessmentFromChecklist(Guid.NewGuid(), Guid.NewGuid());
            
            //THEN
            Assert.That(savedPRA.Reference, Is.EqualTo(employeeChecklist.FriendlyReference));
        }
        public void Given_no_recipients_When_LastRecipientEmail_called_Then_returns_null()
        {
            var employeeChecklist = new EmployeeChecklist()
                                        {
                                            EmployeeChecklistEmails = new List<EmployeeChecklistEmail>()
                                        };

            Assert.That(employeeChecklist.LastRecipientEmail, Is.Null);
        }
        public EmployeeChecklistDto MapWithCompletedOnEmployeesBehalfBy(EmployeeChecklist entity)
        {
            var dto = Map(entity);

            dto.CompletedOnEmployeesBehalfBy = entity.CompletedOnEmployeesBehalfBy != null
                                                   ? new UserDtoMapper().MapIncludingEmployeeAndSite(entity.CompletedOnEmployeesBehalfBy)
                                                   : null;

            return dto;
        } 
 public static PersonalAnswer Create(EmployeeChecklist employeeChecklist, Question question, bool? booleanResponse, string additionalInfo, UserForAuditing getNsbSystemUser)
 {
     return new PersonalAnswer
                {
                    EmployeeChecklist = employeeChecklist,
                    Question = question,
                    BooleanResponse = booleanResponse,
                    AdditionalInfo = additionalInfo,
                    CreatedOn = DateTime.Now,
                    CreatedBy = getNsbSystemUser
                };
 }
        public void Given_an_EmployeeChecklist_is_already_completed_When_I_try_to_complete_it_again_Then_I_get_a_validation_error()
        {
            //Given
            var employeeChecklist = new EmployeeChecklist
                                        {
                                            CompletedDate = DateTime.Now
                                        };

            //When
            var messages = employeeChecklist.ValidateComplete();

            //Then
            Assert.That(messages.Count, Is.EqualTo(1));
            Assert.That(messages[0].Text, Is.EqualTo("This checklist has already been completed once and cannot be resubmitted."));
        }
        public void When_Regenerate_Then_should_call_correct_methods()
        {

            // Given
            var target = CreateService();
            var request = new ResendEmployeeChecklistEmailRequest()
                              {
                                  ResendUserId = Guid.NewGuid(),
                                  RiskAssessmentId = 500,
                                  EmployeeChecklistId = Guid.NewGuid()
                              };


            var user = new UserForAuditing();
            _userRepository
                .Setup(x => x.GetById(request.ResendUserId))
                .Returns(user);

            var employeeChecklistEmail = new EmployeeChecklist()
                                             {
                                                 EmployeeChecklistEmails = new List<EmployeeChecklistEmail>()
                                                                               {
                                                                                   new EmployeeChecklistEmail()
                                                                               },
                                                 Employee = new Employee
                                                                {
                                                                    ContactDetails = new List<EmployeeContactDetail>
                                                                                         {
                                                                                             new EmployeeContactDetail
                                                                                                 {
                                                                                                     Email = "*****@*****.**"
                                                                                                 }
                                                                                         }
                                                                }
                                             };
            _employeeChecklistRepository
                .Setup(x => x.GetByIdAndRiskAssessmentId(request.EmployeeChecklistId, request.RiskAssessmentId))
                .Returns(employeeChecklistEmail);

            // When
            target.Regenerate(request);
            
            // Then
            _userRepository.VerifyAll();
            _employeeChecklistRepository.VerifyAll();
            _employeeChecklistEmailRepository.Verify(x => x.Save(It.IsAny<EmployeeChecklistEmail>()), Times.Once());
            _employeeChecklistEmailRepository.Verify(x => x.Flush(), Times.Once());
        }
        public void Given_only_one_recipient_When_LastRecipientEmail_called_returns_expected_email()
        {
            var emailAddress = "*****@*****.**";

            var employeeChecklist = new EmployeeChecklist
                                        {
                                            EmployeeChecklistEmails = new List<EmployeeChecklistEmail>
                                                                          {
                                                                              new EmployeeChecklistEmail
                                                                                  {
                                                                                      RecipientEmail = emailAddress
                                                                                  }
                                                                          }
                                        };

            Assert.That(employeeChecklist.LastRecipientEmail, Is.EqualTo(emailAddress));
        }
        public void Given_all_required_fields_are_available_Then_create_answer_method_creates_an_object()
        {
            //Given
            var employeeChecklist = new EmployeeChecklist();
            var question = new Question();
            bool? booleanResponse = false;
            var user = new UserForAuditing();
            string additionalInfo = "Additional Info";

            //When
            var result = PersonalAnswer.Create(employeeChecklist, question, booleanResponse,additionalInfo, user);

            //Then
            Assert.That(result.BooleanResponse, Is.EqualTo(booleanResponse));
            Assert.That(result.AdditionalInfo, Is.EqualTo(additionalInfo));
            Assert.That(result.CreatedOn.Value.Date, Is.EqualTo(DateTime.Today));
            Assert.That(result.CreatedBy, Is.EqualTo(user));
            Assert.That(result.EmployeeChecklist, Is.EqualTo(employeeChecklist));
            Assert.That(result.Question, Is.EqualTo(question));
        }
        public void Setup()
        {
            _user = new UserForAuditing() { Id = Guid.NewGuid(), Employee = new EmployeeForAuditing() { Id = Guid.NewGuid() } };
            _userRepo = new Mock<IUserForAuditingRepository>();
            _userRepo.Setup(x => x.GetById(_user.Id))
                .Returns(() => _user);

            _employeeChecklistId = Guid.NewGuid();
            _employeeChecklist = new EmployeeChecklist()
                                 {
                                     Id = _employeeChecklistId
                                 };

            _employeeChecklistRepo = new Mock<IEmployeeChecklistRepository>();
            _employeeChecklistRepo
                .Setup(x => x.GetById(_employeeChecklistId))
                .Returns(() => _employeeChecklist);

            _log = new Mock<IPeninsulaLog>();
        }
        public void Given_all_required_fields_are_available_Then_update_answer_method_updates_object()
        {
            //Given
            var employeeChecklist = new EmployeeChecklist();
            var question = new Question();
            bool? booleanResponse = false;
            var user = new UserForAuditing();
            string additionalInfo = "Additional Info";

            var answer = PersonalAnswer.Create(employeeChecklist, question, booleanResponse, additionalInfo, user);

            //When
            answer.Update(true,"New Additional Info", user);

            //Then
            Assert.That(answer.BooleanResponse, Is.EqualTo(true));
            Assert.That(answer.AdditionalInfo, Is.EqualTo("New Additional Info"));
            Assert.That(answer.LastModifiedOn.Value.Date, Is.EqualTo(DateTime.Today));
            Assert.That(answer.LastModifiedBy, Is.EqualTo(user));
        }
 public EmployeeChecklistDto Map(EmployeeChecklist entity)
 {
     var dto = new EmployeeChecklistDto
               {
                   Id = entity.Id,
                   Employee = new EmployeeDtoMapper().MapWithNationalityAndContactDetailsAndEmergencyContactDetails(entity.Employee),
                   Checklist = new ChecklistDtoMapper().MapWithSections(entity.Checklist),
                   Answers = new PersonalAnswerDtoMapper().Map(entity.Answers),
                   StartDate = entity.StartDate,
                   CompletedDate = entity.CompletedDate,
                   Password = entity.Password,
                   FriendlyReference = entity.FriendlyReference,
                   CompletionNotificationEmailAddress = entity.CompletionNotificationEmailAddress,
                   DueDateForCompletion = entity.DueDateForCompletion,
                   SendCompletedChecklistNotificationEmail = entity.SendCompletedChecklistNotificationEmail ?? false,
                   LastRecipientEmail = entity.LastRecipientEmail,
                   LastMessage = entity.LastMessage,
                   IsFurtherActionRequired = entity.IsFurtherActionRequired,
                   AssessedByEmployee = new EmployeeForAuditingDtoMapper().Map(entity.AssessedByEmployee),
                   AssessmentDate = entity.AssessmentDate
               };
     return dto;
 }
        public void Given_an_answer_exists_when_DoesAnAnswerObjectExistForQuestion_then_return_true()
        {
            var questions = new List<Question>()
                            {
                                new Question()
                                {
                                    Id = 1, 
                                    QuestionType = QuestionType.YesNo
                                }
                            };

            var checklist = new Checklist()
            {
                Sections = new List<Section>()
                                                         {
                                                             new Section()
                                                             {
                                                                 Questions = questions
                                                             }
                                                         }
            };

            var employeeChecklist = new EmployeeChecklist()
            {
                Checklist = checklist,
                Answers = new List<PersonalAnswer>()
                          {
                              new PersonalAnswer() {
                                  BooleanResponse = true,
                                  Question = new Question()
                                {
                                    Id = 1, 
                                    QuestionType = QuestionType.YesNo
                                }}
                          }
            };
            var result = employeeChecklist.DoesAnAnswerObjectExistForQuestion(employeeChecklist.Answers[0].Question);

            Assert.IsTrue(result);
        }
        public void Given_a_question_is_text_only_When_IsQuestionAnswered_returns_true()
        {
            var questions = new List<Question>()
                            {
                                new Question()
                                {
                                    Id = 1, 
                                    QuestionType = QuestionType.AdditionalInfo
                                }
                            };

            var checklist = new Checklist()
            {
                Sections = new List<Section>()
                                                         {
                                                             new Section()
                                                             {
                                                                 Questions = questions
                                                             }
                                                         }
            };

            var employeeChecklist = new EmployeeChecklist()
            {
                Checklist = checklist,
                Answers = new List<PersonalAnswer>()
                          {
                              new PersonalAnswer() {
                                  BooleanResponse = null,
                                  AdditionalInfo = "the answer",
                                  Question = new Question()
                                {
                                    Id = 1, 
                                    QuestionType = QuestionType.AdditionalInfo
                                }}
                          }
            };
            var result = employeeChecklist.IsQuestionAnswered(employeeChecklist.Answers[0].Question);

            Assert.IsTrue(result);
        }
        public void Given_an_question_is_unanswered_when_IsQuestionAnswered_then_returns_false()
        {
            var questions = new List<Question>()
                            {
                                new Question()
                                {
                                    Id = 1, 
                                    QuestionType = QuestionType.YesNo
                                }
                            };

            var checklist = new Checklist()
            {
                Sections = new List<Section>()
                                                         {
                                                             new Section()
                                                             {
                                                                 Questions = questions
                                                             }
                                                         }
            };

            var employeeChecklist = new EmployeeChecklist()
            {
                Checklist = checklist,
                Answers = new List<PersonalAnswer>()
                          {
                              new PersonalAnswer() {
                                  BooleanResponse = null,
                                  Question = new Question()
                                {
                                    Id = 1, 
                                    QuestionType = QuestionType.YesNo
                                }}
                          }
            };
            var result = employeeChecklist.IsQuestionAnswered(employeeChecklist.Answers[0].Question);

            Assert.IsFalse(result);
        }
        public void Given_an_answer_does_not_exist_when_DoesAnAnswerObjectExistForQuestion_then_return_false()
        {
            var questions = new List<Question>()
                            {
                                new Question()
                                {
                                    Id = 1, 
                                    QuestionType = QuestionType.YesNo
                                }
                            };

            var checklist = new Checklist()
            {
                Sections = new List<Section>()
                                                         {
                                                             new Section()
                                                             {
                                                                 Questions = questions
                                                             }
                                                         }
            };

            var employeeChecklist = new EmployeeChecklist()
            {
                Checklist = checklist,
                Answers = new List<PersonalAnswer>()
                         
            };
            var result = employeeChecklist.DoesAnAnswerObjectExistForQuestion(questions[0]);

            Assert.IsFalse(result);
        }
 public virtual void AddChecklist(EmployeeChecklist checklist, UserForAuditing user)
 {
     checklist.PersonalRiskAssessment.EmployeeChecklists.Remove(checklist);
     checklist.PersonalRiskAssessment = this;
     checklist.PersonalRiskAssessment.PersonalRiskAssessementEmployeeChecklistStatus =
         PersonalRiskAssessementEmployeeChecklistStatusEnum.Generated;
     EmployeeChecklists.Add(checklist);
     checklist.SetLastModifiedDetails(user);
     SetLastModifiedDetails(user);
 }