public async Task TableStorageService_GetAllProviders_Returns_Expected_Results() { var providerEntities = new ProviderEntityListBuilder() .Add() .Build(); var locationEntities = new LocationEntityListBuilder() .Add() .Build(); var providerRepository = Substitute.For <ICloudTableRepository <ProviderEntity> >(); providerRepository .GetAll() .Returns(providerEntities); var locationRepository = Substitute.For <ICloudTableRepository <LocationEntity> >(); locationRepository .GetAll() .Returns(locationEntities); var service = BuildTableStorageService(locationRepository, providerRepository); var providers = new ProviderListBuilder() .Add() .Build(); var result = await service.GetAllProviders(); result.Should().BeEquivalentTo(providers); }
public async Task TableStorageService_GetAllProviders_Returns_Expected_Results() { var providerEntities = new ProviderEntityListBuilder() .Add() .Build(); var locationEntities = new LocationEntityListBuilder() .Add() .Build(); var providerRepository = Substitute.For <ICloudTableRepository <ProviderEntity> >(); providerRepository .GetAll() .Returns(providerEntities); var locationRepository = Substitute.For <ICloudTableRepository <LocationEntity> >(); locationRepository .GetByPartitionKey(Arg.Any <string>()) .Returns(callInfo => { var partitionKey = callInfo.ArgAt <string>(0); var results = locationEntities.Where(p => p.PartitionKey == partitionKey); return(results.ToList()); }); var service = BuildTableStorageService(locationRepository, providerRepository); var providers = new ProviderListBuilder() .Add() .Build(); var result = await service.GetAllProviders(); result.Should().BeEquivalentTo(providers); }
public async Task Search_Returns_ProviderLocations_With_Expected_Details() { var providers = new ProviderListBuilder() .Add() .Build() .AsQueryable(); const int numberOfItems = 1; const string postcode = "CV1 2WT"; var searchRequest = new SearchRequest { NumberOfItems = numberOfItems, Postcode = postcode, OriginLatitude = "1.5", OriginLongitude = "50" }; var deliveryYears = new List <DeliveryYear> { new() { Year = providers.First().Locations.First().DeliveryYears.First().Year, Qualifications = new List <Qualification>() { new() { Id = providers.First().Locations.First().DeliveryYears.First() .Qualifications.First(), Name = "Test qualification" } } } }; var providerLocations = new List <ProviderLocation> { new() { ProviderName = providers.First().Name, Name = providers.First().Locations.First().Name, Postcode = providers.First().Locations.First().Postcode, Town = providers.First().Locations.First().Town, Latitude = providers.First().Locations.First().Latitude, Longitude = providers.First().Locations.First().Longitude, DistanceInMiles = 0, DeliveryYears = deliveryYears, Website = providers.First().Locations.First().Website, JourneyUrl = "" } }.AsQueryable();
public async Task TableStorageService_SaveProviders_Returns_Expected_Count_Of_Items_Saved() { var providers = new ProviderListBuilder() .Add(3) .Build(); var providerRepository = Substitute.For <ICloudTableRepository <ProviderEntity> >(); providerRepository .Save(Arg.Any <IList <ProviderEntity> >()) .Returns(args => ((IList <ProviderEntity>)args[0]).Count); var service = BuildTableStorageService(providerRepository: providerRepository); var result = await service.SaveProviders(providers); result.Should().Be(providers.Count); }
public void TempProviderDataExtensions_Merges_Data_Into_Existing_List() { TempProviderDataExtensions .ProviderData .Should() .NotBeNullOrEmpty(); var providers = new ProviderListBuilder() .CreateKnownList() .Build(); var tempProvidersCount = TempProviderDataExtensions .ProviderData .Count; var originalProvidersCount = providers.Count; var expectedCount = tempProvidersCount + originalProvidersCount; var result = providers .MergeTempProviders(true); result.Should().NotBeNullOrEmpty(); result.Count.Should().Be(expectedCount); }
public async Task CourseDirectoryDataService_ImportProviders_With_Multiple_Items_Returns_Expected_Result() { var httpClientFactory = Substitute.For <IHttpClientFactory>(); httpClientFactory .CreateClient(nameof(CourseDirectoryDataService)) .Returns(new TestHttpClientFactory() .CreateHttpClientWithBaseUri(SettingsBuilder.FindCourseApiBaseUri, CourseDirectoryDataService.CourseDetailEndpoint, new CourseDirectoryJsonBuilder() .BuildValidTLevelsMultiItemResponse())); var deletedProviders = new List <Provider>(); var savedProviders = new List <Provider>(); //Get a list of providers and change one var providers = new ProviderListBuilder().CreateKnownList().Build(); providers.Single(p => p.UkPrn == 10000055) .Locations.First() .Name = "Old Venue Name"; var tableStorageService = Substitute.For <ITableStorageService>(); tableStorageService .GetAllProviders() .Returns(providers); tableStorageService .RemoveProviders( Arg.Do <IList <Provider> >(p => deletedProviders.AddRange(p))) .Returns(x => ((IList <Provider>)x[0]).Count); tableStorageService .SaveProviders( Arg.Do <IList <Provider> >(p => savedProviders.AddRange(p))) .Returns(x => ((IList <Provider>)x[0]).Count); var logger = Substitute.For <ILogger <CourseDirectoryDataService> >(); logger.IsEnabled(LogLevel.Warning).Returns(true); var service = BuildCourseDirectoryDataService(httpClientFactory, tableStorageService, logger); var(savedCount, deletedCount) = await service .ImportProvidersFromCourseDirectoryApi(); savedCount.Should().Be(1); deletedCount.Should().Be(1); savedProviders.Should().HaveCount(1); deletedProviders.Should().HaveCount(1); deletedProviders.Should().HaveCount(1); ValidateProvider(deletedProviders[0], 10000001, "TEST COLLEGE TO BE DELETED"); var provider = savedProviders.OrderBy(p => p.Name).First(); ValidateProvider(provider, 10000055, "ABINGDON AND WITNEY COLLEGE"); provider.Locations.Should().HaveCount(1); var firstLocation = provider.Locations.OrderBy(l => l.Name).First(); ValidateLocation(firstLocation, "ABINGDON CAMPUS", "OX14 1GG", "Abingdon", "http://www.abingdon-witney.ac.uk", 51.680637, -1.286943); ValidateDeliveryYear(firstLocation.DeliveryYears.First(), 2021, new[] { 36 }); const string expectedMessage = "Venue name for 10000055 ABINGDON AND WITNEY COLLEGE OX14 1GG changed from 'Old Venue Name' to 'ABINGDON CAMPUS'"; logger.ReceivedCalls() .Where(call => (LogLevel)call.GetArguments()[0] == LogLevel.Warning) .Select(call => call.GetArguments()) .Count(callArguments => { if (callArguments.Length <= 2) { return(false); } var logLevel = (LogLevel)callArguments[0]; var logValues = (IReadOnlyList <KeyValuePair <string, object> >)callArguments[2]; return(logLevel.Equals(LogLevel.Warning) && logValues != null && logValues.ToString() !.Equals(expectedMessage)); }) .Should() .Be(1); }
public async Task Search_Returns_ProviderLocations_With_Expected_Details() { var providers = new ProviderListBuilder() .Add() .Build() .AsQueryable(); _providerDataService.GetProviders().Returns(providers); const int numberOfItems = 1; const string postcode = "CV1 2WT"; var searchRequest = new SearchRequest { NumberOfItems = numberOfItems, Postcode = postcode, OriginLatitude = "1.5", OriginLongitude = "50" }; var locations = new List <Location> { providers.First().Locations.First() }.AsQueryable(); _providerDataService.GetLocations( Arg.Is <IQueryable <Provider> >(p => p == providers), Arg.Any <int?>()) .Returns(locations); var deliveryYears = new List <DeliveryYear> { new DeliveryYear { Year = providers.First().Locations.First().DeliveryYears.First().Year, Qualifications = new List <Qualification>() { new Qualification() { Id = providers.First().Locations.First().DeliveryYears.First() .Qualifications.First(), Name = "Test qualification" } } } }; var providerLocations = new List <ProviderLocation> { new ProviderLocation { ProviderName = providers.First().Name, Name = providers.First().Locations.First().Name, Postcode = providers.First().Locations.First().Postcode, Town = providers.First().Locations.First().Town, Latitude = providers.First().Locations.First().Latitude, Longitude = providers.First().Locations.First().Longitude, DistanceInMiles = 0, DeliveryYears = deliveryYears, Website = providers.First().Locations.First().Website, JourneyUrl = "" } }.AsQueryable(); _providerDataService.GetProviderLocations( Arg.Is <IQueryable <Location> >(l => l == locations), Arg.Is <IQueryable <Provider> >(p => p == providers)) .Returns(providerLocations); _distanceCalculationService.CalculateProviderLocationDistanceInMiles( Arg.Is <PostcodeLocation>(p => p.Postcode == searchRequest.Postcode), Arg.Any <IQueryable <ProviderLocation> >()) .Returns(args => { var pList = ((IEnumerable <ProviderLocation>)args[1]).ToList(); pList.ForEach(x => x.DistanceInMiles = 10); return(pList); }); _journeyService .GetDirectionsLink(searchRequest.Postcode, Arg.Any <ProviderLocation>()) .Returns("https://x.com"); var(totalCount, searchResults) = await _service.Search(searchRequest); totalCount.Should().Be(providerLocations.Count()); var searchResultsList = searchResults.ToList(); searchResultsList.Count.Should().Be(numberOfItems); var firstResult = searchResultsList.First(); firstResult.ProviderName.Should().Be(providers.First().Name); firstResult.Name.Should().Be(providers.First().Locations.First().Name); firstResult.Postcode.Should().Be(providers.First().Locations.First().Postcode); firstResult.Town.Should().Be(providers.First().Locations.First().Town); firstResult.Latitude.Should().Be(providers.First().Locations.First().Latitude); firstResult.Longitude.Should().Be(providers.First().Locations.First().Longitude); firstResult.Website.Should().Be(providers.First().Locations.First().Website); firstResult.DeliveryYears.Should().HaveCount(1); firstResult.DeliveryYears.First().Year.Should() .Be(providers.First().Locations.First().DeliveryYears.First().Year); firstResult.DeliveryYears.First().Qualifications.Should().HaveCount(1); firstResult.DeliveryYears.First().Qualifications.First().Id.Should() .Be(providers.First().Locations.First().DeliveryYears.First().Qualifications.First()); firstResult.DeliveryYears.First().Qualifications.First().Name.Should() .Be("Test qualification"); firstResult.JourneyUrl.Should().Be("https://x.com"); firstResult.DistanceInMiles.Should().Be(10); }