public void Given_valid_request_When_MarkRiskAssessorAsDeleted_Then_should_call_correct_methods()
        {
            // Given
            var target = GetTarget();
            var request = new MarkRiskAssessorAsDeletedAndUndeletedRequest()
                              {
                                  CompanyId = 100,
                                  UserId = Guid.NewGuid(),
                                  RiskAssessorId = 400
                              };


            var user = new UserForAuditing();
            _userForAuditingRepository
                .Setup(x => x.GetByIdAndCompanyId(request.UserId, request.CompanyId))
                .Returns(user);

            _riskAssessmentRepository
                .Setup(x => x.DoesAssessmentExistForRiskAssessor(request.RiskAssessorId, request.CompanyId))
                .Returns(false);

            var riskAssessor = new Mock<RiskAssessor>();
            _riskAssessorRepository
                .Setup(x => x.GetByIdAndCompanyId(request.RiskAssessorId, request.CompanyId))
                .Returns(riskAssessor.Object);

            // When
            target.MarkDeleted(request);

            // Then
            _riskAssessmentRepository.VerifyAll();
            riskAssessor.Verify(x => x.MarkForDelete(user));
            _userForAuditingRepository.VerifyAll();
            _riskAssessorRepository.Verify(x => x.SaveOrUpdate(riskAssessor.Object));
        }
        public void Setup()
        {

            _riskAssessor = new Mock<RiskAssessor>() { CallBase = true };

            _companyId = 123L;
            _riskAssessorId = 456L;
            _creatingUserId = Guid.NewGuid();

            _riskAssessorRepository = new Mock<IRiskAssessorRepository>();
            _riskAssessorRepository
                .Setup(x => x.GetByIdAndCompanyIdIncludingDeleted(_riskAssessorId, _companyId))
                .Returns(_riskAssessor.Object);

            _riskAssessorRepository
                .Setup(x => x.SaveOrUpdate(_riskAssessor.Object));

            _userForAuditingRepository = new Mock<IUserForAuditingRepository>();
            _userForAuditingRepository
                .Setup(x => x.GetByIdAndCompanyId(_creatingUserId, _companyId))
                .Returns(new UserForAuditing() { Id = _creatingUserId });

            _request = new MarkRiskAssessorAsDeletedAndUndeletedRequest()
                       {
                           CompanyId = _companyId,
                           RiskAssessorId = _riskAssessorId,
                           UserId = _creatingUserId
                       };

            _log = new Mock<IPeninsulaLog>();
        }
        public void Given_invalid_request_risk_assessor_got_outstanding_tasks_When_MarkRiskAssessorAsDeleted_Then_should_throw_correct_exception()
        {
            // Given
            var target = GetTarget();
            var request = new MarkRiskAssessorAsDeletedAndUndeletedRequest()
            {
                CompanyId = 100,
                UserId = Guid.NewGuid(),
                RiskAssessorId = 400
            };

            _riskAssessmentRepository
                .Setup(x => x.DoesAssessmentExistForRiskAssessor(request.RiskAssessorId, request.CompanyId))
                .Returns(true);
            
            // When
            // Then
            Assert.Throws<TryingToDeleteRiskAssessorWithOutstandingRiskAssessmentsException>(()=>  target.MarkDeleted(request));
            
        }
        public void MarkUndeleted(MarkRiskAssessorAsDeletedAndUndeletedRequest request)
        {
            _log.Add(request);

            var riskAssessor = _riskAssessorRepository.GetByIdAndCompanyIdIncludingDeleted(request.RiskAssessorId, request.CompanyId);
            var user = _userForAuditingRepository.GetByIdAndCompanyId(request.UserId, request.CompanyId);
            riskAssessor.ReinstateFromDelete(user);
            _riskAssessorRepository.SaveOrUpdate(riskAssessor);
        }
        public void MarkDeleted(MarkRiskAssessorAsDeletedAndUndeletedRequest request)
        {
            _log.Add(request);

            bool hasOutstandingRiskAssessments = _riskAssessmentRepository.DoesAssessmentExistForRiskAssessor(request.RiskAssessorId, request.CompanyId);
            if (hasOutstandingRiskAssessments)
            {
                throw new TryingToDeleteRiskAssessorWithOutstandingRiskAssessmentsException(request.RiskAssessorId);
            }

            var riskAssessor = _riskAssessorRepository.GetByIdAndCompanyId(request.RiskAssessorId, request.CompanyId);
            var user = _userForAuditingRepository.GetByIdAndCompanyId(request.UserId, request.CompanyId);
            riskAssessor.MarkForDelete(user);
            _riskAssessorRepository.SaveOrUpdate(riskAssessor);
        }