public async Task <UserIdentificationResultDto> IdentifyUser(IdentityUrlDto urlDto)
        {
            var url = await urlRepository.GetByIdAsync(id : urlDto.Id);

            var urlValidator        = new UrlValidator();
            var urlValidationResult = urlValidator.Validate(url);

            UserIdentificationResultDto userIdentificationResult;

            if (!urlValidationResult.IsValid)
            {
                userIdentificationResult            = mapper.Map <UserIdentificationResultDto>(urlValidationResult);
                userIdentificationResult.IsUrlValid = false;
                return(userIdentificationResult);
            }

            if (url.NumberOfRuns.HasValue && url.NumberOfRuns > 0)
            {
                --url.NumberOfRuns;
                urlRepository.Update(url);
                await unitOfWork.SaveAsync();
            }

            var intervieweeNameValidator        = new UrlIntervieweeNameValidator(urlDto.IntervieweeName);
            var intervieweeNameValidationResult = intervieweeNameValidator.Validate(url);

            userIdentificationResult            = mapper.Map <UserIdentificationResultDto>(intervieweeNameValidationResult);
            userIdentificationResult.IsUrlValid = true;
            return(userIdentificationResult);
        }
        public void Validate_IntervieweeNamesAreTheSame_IsValid()
        {
            var intervieweeName = "IntervieweeName";
            var url             = new Entities.Url
            {
                IntervieweeName = intervieweeName
            };
            var urlIntervieweeNameValidator = new UrlIntervieweeNameValidator(actualIntervieweeName: intervieweeName);

            var validationResult = urlIntervieweeNameValidator.Validate(url);

            Assert.IsTrue(validationResult.IsValid);
        }
        public void Validate_IntervieweeNamesAreDifferent_IsNotValid()
        {
            var url = new Entities.Url
            {
                IntervieweeName = "First IntervieweeName"
            };
            var actualIntervieweeName       = "Second IntervieweeName";
            var urlIntervieweeNameValidator = new UrlIntervieweeNameValidator(actualIntervieweeName);

            var validationResult = urlIntervieweeNameValidator.Validate(url);

            Assert.IsFalse(validationResult.IsValid);
        }
        public void Validate_UrlPropertiesAreDefault_IsValid()
        {
            var url = new Entities.Url
            {
                IntervieweeName = default
            };
            var actualIntervieweeName       = "IntervieweeName";
            var urlIntervieweeNameValidator = new UrlIntervieweeNameValidator(actualIntervieweeName);

            var validationResult = urlIntervieweeNameValidator.Validate(url);

            Assert.IsTrue(validationResult.IsValid);
        }