public void Given_valid_request_with_multiple_non_employees_to_detach_When_DetachNonEmployee_is_called_Then_should_call_appropiate_methods_correct_amount_of_times()
        {
            //Given
            var riskAssessmentService = CreateRiskAssessmentService();
            var detachNonEmployeeFromRiskAssessmentRequest = new DetachNonEmployeeFromRiskAssessmentRequest
                                                                 {
                NonEmployeesToDetachIds = new List<long> { 1, 2 },
                RiskAssessmentId = 2
            };

            SetupValidUser(detachNonEmployeeFromRiskAssessmentRequest);

            var mockRiskAssessment = new Mock<GeneralRiskAssessment>();
            _riskAssessmentRepository
                .Setup(rr => rr.GetByIdAndCompanyId(detachNonEmployeeFromRiskAssessmentRequest.RiskAssessmentId,detachNonEmployeeFromRiskAssessmentRequest.CompanyId))
                .Returns(mockRiskAssessment.Object);

            var mockNonEmployee = new Mock<NonEmployee>();
            _nonEmployeeRepository
                .Setup(x => x.GetByIdAndCompanyId(detachNonEmployeeFromRiskAssessmentRequest.NonEmployeesToDetachIds[0], detachNonEmployeeFromRiskAssessmentRequest.CompanyId))
                .Returns(mockNonEmployee.Object);
            _nonEmployeeRepository
                .Setup(x => x.GetByIdAndCompanyId(detachNonEmployeeFromRiskAssessmentRequest.NonEmployeesToDetachIds[1],detachNonEmployeeFromRiskAssessmentRequest.CompanyId))
                .Returns(mockNonEmployee.Object);

            //When
            riskAssessmentService.DetachNonEmployeeFromRiskAssessment(detachNonEmployeeFromRiskAssessmentRequest);

            //Then
            _riskAssessmentRepository.VerifyAll();
            _nonEmployeeRepository.VerifyAll();

            mockRiskAssessment.Verify(x => x.DetachNonEmployeeFromRiskAssessment(mockNonEmployee.Object, _user));
        }
        private void DetachRequestedNonEmployees(DetachNonEmployeeFromRiskAssessmentRequest request, RiskAssessment riskAssessment, UserForAuditing user)
        {
            foreach (var nonEmployeesToDetachId in request.NonEmployeesToDetachIds)
            {
                var nonEmployee = _nonEmployeeRepository.GetByIdAndCompanyId(nonEmployeesToDetachId, request.CompanyId);

                riskAssessment.DetachNonEmployeeFromRiskAssessment(nonEmployee, user);
            }
            _riskAssessmentRepository.SaveOrUpdate(riskAssessment);
        }
        public void DetachNonEmployeeFromRiskAssessment(DetachNonEmployeeFromRiskAssessmentRequest request)
        {
            _log.Add(request);

            try
            {
                var user = _userForAuditingRepository.GetByIdAndCompanyId(request.UserId, request.CompanyId);
                var riskAssessment = _riskAssessmentRepository.GetByIdAndCompanyId(request.RiskAssessmentId, request.CompanyId);

                DetachRequestedNonEmployees(request, riskAssessment, user);
            }
            catch (Exception ex)
            {
                _log.Add(ex);
                throw;
            }
        }
 private void SetupValidUser(DetachNonEmployeeFromRiskAssessmentRequest detachNonEmployeeFromRiskAssessmentRequest)
 {
     _userRepository
         .Setup(x => x.GetByIdAndCompanyId(detachNonEmployeeFromRiskAssessmentRequest.UserId,detachNonEmployeeFromRiskAssessmentRequest.CompanyId))
         .Returns(_user);
 }