public async Task <List <Standard> > Handle(SearchStandardsRequest request, CancellationToken cancellationToken)
        {
            _logger.LogInformation("Handling Search Standards Request");

            var searchstring       = _cleanser.UnescapeAndRemoveNonAlphanumericCharacters(request.SearchTerm);
            var validationResponse = _validator.ValidatorSearchStandardsRequest(new SearchStandardsValidationRequest {
                Searchstring = searchstring
            });

            if (!validationResponse.IsValid)
            {
                var message = validationResponse.Errors.Aggregate(string.Empty, (current, error) => current + error.ErrorMessage + "; ");
                _logger.LogError(message);
                if (validationResponse.Errors.Any(x => x.StatusCode == ValidationStatusCode.BadRequest.ToString()))
                {
                    throw new BadRequestException(message);
                }

                throw new Exception(message);
            }

            var isAnInt = int.TryParse(searchstring, out var intSearchString);

            var allStandards = await _standardService.GetLatestStandardVersions();

            return(isAnInt
                ? allStandards.Where(x => x.LarsCode == intSearchString).ToList()
                : allStandards.Where(x =>
                                     _cleanser.UnescapeAndRemoveNonAlphanumericCharacters(x.Title.ToLower()).Contains(searchstring.ToLower())).ToList());
        }
        public void SearchStandardsThrowsBadRequestExceptionIfSearchStringTooShort(string search)
        {
            var request = new SearchStandardsRequest {
                SearchTerm = search
            };

            _cleanserService.Setup(c => c.UnescapeAndRemoveNonAlphanumericCharacters(search)).Returns(search.Trim());
            _validator.Setup(v => v.ValidatorSearchStandardsRequest(It.IsAny <SearchStandardsValidationRequest>())).Returns(errorResponse);
            Assert.ThrowsAsync <BadRequestException>(() => _searchStandardsHandler.Handle(request, new CancellationToken()));
        }
        public void SearchStandardsWithValidWordSearchReturnsZeroResults()
        {
            var searchstring = "no match";
            var request      = new SearchStandardsRequest {
                SearchTerm = searchstring
            };

            _cleanserService.Setup(c => c.UnescapeAndRemoveNonAlphanumericCharacters(searchstring)).Returns(searchstring);
            _standardService.Setup(r => r.GetAllStandards())
            .Returns(Task.FromResult(_expectedStandards.AsEnumerable()));
            var standardSummaries = _searchStandardsHandler.Handle(request, new CancellationToken()).Result;

            standardSummaries.Count.Should().Be(0);
        }
        public void SearchStandardsWithValidStandardId()
        {
            var searchstring = _standardSummary1.LarsCode.ToString();
            var request      = new SearchStandardsRequest {
                SearchTerm = searchstring
            };

            _cleanserService.Setup(c => c.UnescapeAndRemoveNonAlphanumericCharacters(searchstring)).Returns(searchstring);
            _standardService.Setup(r => r.GetLatestStandardVersions())
            .Returns(Task.FromResult(_expectedStandards.AsEnumerable()));
            var standards = _searchStandardsHandler.Handle(request, new CancellationToken()).Result;

            standards.Count.Should().Be(1);
            standards.Should().Contain(_standardSummary1);
        }