public When_ProviderVenueService_Is_Called_To_Get_Venue_With_Trimmed_Postcode()
        {
            var config = new MapperConfiguration(c => c.AddMaps(typeof(ProviderVenueMapper).Assembly));
            var mapper = new Mapper(config);

            var mockProviderVenueDbSet = new List <Domain.Models.ProviderVenue>
            {
                new Domain.Models.ProviderVenue
                {
                    Id                   = ProviderVenueId,
                    ProviderId           = ProviderId,
                    Name                 = Name,
                    Postcode             = Postcode,
                    IsRemoved            = IsRemoved,
                    IsEnabledForReferral = IsEnabledForReferral,
                    Source               = DataSource
                }
            }
            .AsQueryable()
            .BuildMockDbSet();

            _providerVenueRepository = Substitute.For <IProviderVenueRepository>();
            _providerVenueRepository.GetManyAsync(Arg.Any <Expression <Func <Domain.Models.ProviderVenue, bool> > >())
            .Returns(mockProviderVenueDbSet);

            var googleMapApiClient = Substitute.For <IGoogleMapApiClient>();
            var locationService    = Substitute.For <ILocationApiClient>();

            var providerVenueService = new ProviderVenueService(mapper, _providerVenueRepository, locationService, googleMapApiClient);

            _result = providerVenueService.GetVenueWithTrimmedPostcodeAsync(ProviderId, Postcode).GetAwaiter().GetResult();
        }
        public async Task <ProviderVenueDetailViewModel> GetVenueWithTrimmedPostcodeAsync(int providerId, string postcode)
        {
            //Query split because it uses client-side evaluation
            var venues = await _providerVenueRepository.GetManyAsync(pv =>
                                                                     pv.ProviderId == providerId)
                         .AsNoTracking()
                         .ToListAsync();

            var venue = venues
                        .SingleOrDefault(pv =>
                                         string.Compare(pv.Postcode.ToLetterOrDigit(),
                                                        postcode.ToLetterOrDigit(),
                                                        StringComparison.OrdinalIgnoreCase) == 0);

            var dto = venue == null ? null : _mapper.Map <ProviderVenue, ProviderVenueDetailViewModel>(venue);

            return(dto);
        }