Esempio n. 1
0
    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();
Esempio n. 4
0
    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);
    }
Esempio n. 5
0
    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);
        }