public void Given_valid_request_When_AddControlMeasure_Then_should_call_correct_methods()
        {

            //Given
            var request = new AddControlMeasureRequest()
                              {
                                  CompanyId = 200,
                                  UserId = Guid.NewGuid(),
                                  RiskAssessmentId = 250,
                                  ControlMeasure = "Hello Control Measure"
                              };

            var mockRiskAssessment = new Mock<BusinessSafe.Domain.Entities.HazardousSubstanceRiskAssessment>();
            mockRiskAssessment
                .Setup( x => x.AddControlMeasure(It.Is<HazardousSubstanceRiskAssessmentControlMeasure>(r => r.ControlMeasure == request.ControlMeasure), It.Is<UserForAuditing>( r=> r.Id ==  _user.Id)));

            _repository
                .Setup(x => x.GetByIdAndCompanyId(request.RiskAssessmentId, request.CompanyId)).
                Returns(mockRiskAssessment.Object);
            
            _repository
                .Setup(x => x.SaveOrUpdate(mockRiskAssessment.Object));
           
            _repository
                .Setup(x => x.Flush());

            _userRepository
                .Setup(x => x.GetByIdAndCompanyId(request.UserId, request.CompanyId))
                .Returns(_user);

            //When
            _target.AddControlMeasureToRiskAssessment(request);

            //Then
            _repository.VerifyAll();
            _userRepository.VerifyAll();
            mockRiskAssessment.Verify();
        }
        public long AddControlMeasureToRiskAssessmentHazard(AddControlMeasureRequest request)
        {
            _log.Add(request);

            try
            {
                var user = _userForAuditingRepository.GetByIdAndCompanyId(request.UserId, request.CompanyId);
                var riskAssessment = _riskAssessmentRepository.GetByIdAndCompanyId(request.RiskAssessmentId, request.CompanyId);
                var riskAssessmentHazard = riskAssessment.FindRiskAssessmentHazard(request.RiskAssessmentHazardId);
                var riskAssessmentControlMeasure = MultiHazardRiskAssessmentControlMeasure.Create(request.ControlMeasure, riskAssessmentHazard, user);

                riskAssessmentHazard.AddControlMeasure(riskAssessmentControlMeasure, user);
                _riskAssessmentRepository.SaveOrUpdate(riskAssessment);
                _riskAssessmentRepository.Flush();

                return riskAssessmentControlMeasure.Id;
            }
            catch (Exception ex)
            {
                _log.Add(ex);
                throw;
            }
        }
        public long AddControlMeasureToRiskAssessment(AddControlMeasureRequest request)
        {
            _log.Add(request);

            var user = _userForAuditingRepository.GetByIdAndCompanyId(request.UserId, request.CompanyId);
            var riskAssessment = _hazardousSubstanceRiskAssessmentRepository.GetByIdAndCompanyId(request.RiskAssessmentId, request.CompanyId);

            var riskAssessmentControlMeasure = HazardousSubstanceRiskAssessmentControlMeasure.Create(request.ControlMeasure, riskAssessment, user);

            riskAssessment.AddControlMeasure(riskAssessmentControlMeasure, user);

            _hazardousSubstanceRiskAssessmentRepository.SaveOrUpdate(riskAssessment);
            _hazardousSubstanceRiskAssessmentRepository.Flush();

            return riskAssessmentControlMeasure.Id;

        }