Ejemplo n.º 1
0
        private DasProvider ExportProvider(
            int ukprn,
            int exportKey,
            IEnumerable <Provider> providers,
            List <Apprenticeship> apprenticeships,
            FeChoice feChoice)
        {
            var evt = new EventTelemetry {
                Name = "ComposeProviderForExport"
            };

            evt.Properties.TryAdd("UKPRN", $"{ukprn}");
            evt.Metrics.TryAdd("ProviderApprenticeships", apprenticeships.Count());
            evt.Metrics.TryAdd("MatchingProviders", providers?.Count() ?? 0);

            if (!(providers?.Any() ?? false))
            {
                throw new ProviderNotFoundException(ukprn);
            }

            try
            {
                var dasProvider = _DASHelper.CreateDasProviderFromProvider(exportKey, providers.First(), feChoice);

                if (dasProvider != null)
                {
                    var apprenticeshipLocations = apprenticeships.Where(x => x.ApprenticeshipLocations != null)
                                                  .SelectMany(x => x.ApprenticeshipLocations).Distinct(new ApprenticeshipLocationSameAddress());

                    var index         = 1000;
                    var locationIndex = new Dictionary <string, ApprenticeshipLocation>(apprenticeshipLocations
                                                                                        .Where(x => x.RecordStatus == RecordStatus.Live)
                                                                                        .Select(x => new KeyValuePair <string, ApprenticeshipLocation>($"{exportKey:D4}{index++:D4}", x)));

                    var exportStandards  = apprenticeships.Where(x => x.StandardCode.HasValue);
                    var exportFrameworks = apprenticeships.Where(x => x.FrameworkCode.HasValue);

                    evt.Metrics.TryAdd("Provider Locations", locationIndex.Count());
                    evt.Metrics.TryAdd("Provider Standards", exportStandards.Count());
                    evt.Metrics.TryAdd("Provider Frameworks", exportFrameworks.Count());

                    dasProvider.Locations  = _DASHelper.ApprenticeshipLocationsToLocations(exportKey, locationIndex);
                    dasProvider.Standards  = _DASHelper.ApprenticeshipsToStandards(exportKey, exportStandards, locationIndex);
                    dasProvider.Frameworks = _DASHelper.ApprenticeshipsToFrameworks(exportKey, exportFrameworks, locationIndex);

                    _telemetryClient.TrackEvent(evt);

                    return(dasProvider);
                }
            }
            catch (Exception e)
            {
                throw new ProviderExportException(ukprn, e);
            }

            throw new ProviderNotFoundException(ukprn);
        }
        public async Task Handle_WithValidCourseIdAndCourseRunId_ReturnsOkWithResult()
        {
            var venue = new Venue
            {
                Id        = Guid.NewGuid(),
                VenueName = "TestVenueName"
            };

            var lars = new Core.Search.Models.Lars
            {
                LearnAimRef      = "00112233",
                LearnAimRefTitle = "TestLearnAimRefTitle"
            };

            var courseRun = new CourseRun
            {
                Id           = Guid.NewGuid(),
                RecordStatus = CourseStatus.Live,
                VenueId      = venue.Id
            };

            var alternativeCourseRun = new CourseRun
            {
                Id           = Guid.NewGuid(),
                RecordStatus = CourseStatus.Live,
                VenueId      = venue.Id
            };

            var course = new Course
            {
                Id            = Guid.NewGuid(),
                ProviderUKPRN = 12345678,
                LearnAimRef   = lars.LearnAimRef,
                CourseRuns    = new[]
                {
                    courseRun,
                    alternativeCourseRun
                }
            };

            var provider = new Provider
            {
                Id = Guid.NewGuid(),
                UnitedKingdomProviderReferenceNumber = "12345678",
                ProviderContact = new[]
                {
                    new ProviderContact
                    {
                        ContactEmail = "*****@*****.**",
                        ContactType  = "P"
                    }
                }
            };

            var sqlProvider = new Core.DataStore.Sql.Models.Provider
            {
                ProviderId        = provider.Id,
                ProviderName      = "TestProviderAlias",
                DisplayNameSource = ProviderDisplayNameSource.ProviderName
            };

            var feChoice = new FeChoice
            {
                UKPRN = course.ProviderUKPRN,
                EmployerSatisfaction = 1.2M,
                LearnerSatisfaction  = 3.4M
            };

            CosmosDbQueryDispatcher.Setup(s => s.ExecuteQuery(It.IsAny <GetCourseById>()))
            .ReturnsAsync(course);

            CosmosDbQueryDispatcher.Setup(s => s.ExecuteQuery(It.IsAny <GetProviderByUkprn>()))
            .ReturnsAsync(provider);

            LarsSearchClient.Setup(s => s.Search(It.IsAny <LarsLearnAimRefSearchQuery>()))
            .ReturnsAsync(new SearchResult <Core.Search.Models.Lars>
            {
                Items = new[] { new SearchResultItem <Core.Search.Models.Lars> {
                                    Record = lars
                                } }
            });

            CosmosDbQueryDispatcher.Setup(s => s.ExecuteQuery(It.IsAny <GetVenuesByProvider>()))
            .ReturnsAsync(new[] { venue });

            CosmosDbQueryDispatcher.Setup(s => s.ExecuteQuery(It.IsAny <GetFeChoiceForProvider>()))
            .ReturnsAsync(feChoice);

            SqlQueryDispatcher.Setup(s => s.ExecuteQuery(It.IsAny <Core.DataStore.Sql.Queries.GetProviderById>()))
            .ReturnsAsync(sqlProvider);

            var result = await HttpClient.GetAsync(CourseRunDetailUrl(course.Id, courseRun.Id));

            result.StatusCode.Should().Be(StatusCodes.Status200OK);

            var resultJson = JObject.Parse(await result.Content.ReadAsStringAsync());

            using (new AssertionScope())
            {
                resultJson.ToObject <object>().Should().NotBeNull();
                resultJson["provider"].ToObject <object>().Should().NotBeNull();
                resultJson["provider"]["ukprn"].ToObject <int>().Should().Be(provider.Ukprn);
                resultJson["provider"]["providerName"].ToObject <string>().Should().Be(sqlProvider.DisplayName);
                resultJson["provider"]["tradingName"].ToObject <string>().Should().Be(sqlProvider.DisplayName);
                resultJson["provider"]["email"].ToObject <string>().Should().Be(provider.ProviderContact.Single().ContactEmail);
                resultJson["provider"]["learnerSatisfaction"].ToObject <decimal>().Should().Be(feChoice.LearnerSatisfaction);
                resultJson["provider"]["employerSatisfaction"].ToObject <decimal>().Should().Be(feChoice.EmployerSatisfaction);
                resultJson["course"].ToObject <object>().Should().NotBeNull();
                resultJson["course"]["courseId"].ToObject <Guid>().Should().Be(course.Id);
                resultJson["venue"].ToObject <object>().Should().NotBeNull();
                resultJson["venue"]["venueName"].ToObject <string>().Should().Be(venue.VenueName);
                resultJson["qualification"].ToObject <object>().Should().NotBeNull();
                resultJson["qualification"]["learnAimRef"].ToObject <string>().Should().Be(lars.LearnAimRef);
                resultJson["qualification"]["learnAimRefTitle"].ToObject <string>().Should().Be(lars.LearnAimRefTitle);
                resultJson["alternativeCourseRuns"][0]["courseRunId"].ToObject <Guid>().Should().Be(alternativeCourseRun.Id);
                resultJson["courseRunId"].ToObject <Guid>().Should().Be(courseRun.Id);
            }
        }
Ejemplo n.º 3
0
        public DasProvider CreateDasProviderFromProvider(int exportKey, Provider provider, FeChoice feChoice)
        {
            if (!int.TryParse(provider.UnitedKingdomProviderReferenceNumber, out var ukprn))
            {
                throw new InvalidUkprnException(provider.UnitedKingdomProviderReferenceNumber);
            }

            if (!provider.ProviderContact.Any())
            {
                throw new MissingContactException();
            }

            try
            {
                var contactDetails = provider.ProviderContact.FirstOrDefault();

                return(new DasProvider
                {
                    Id = provider.ProviderId ?? _intIdentifier + exportKey,
                    Email = contactDetails?.ContactEmail,
                    EmployerSatisfaction = feChoice?.EmployerSatisfaction,
                    LearnerSatisfaction = feChoice?.LearnerSatisfaction,
                    MarketingInfo = provider.MarketingInformation,
                    Name = provider.Name,
                    TradingName = provider.Name,
                    NationalProvider = provider.NationalApprenticeshipProvider,
                    UKPRN = ukprn,
                    Website = contactDetails?.ContactWebsiteAddress,
                    Phone = !string.IsNullOrWhiteSpace(contactDetails?.ContactTelephone1)
                        ? contactDetails?.ContactTelephone1
                        : contactDetails?.ContactTelephone2
                });
            }

            catch (Exception e)
            {
                throw new ProviderExportException(ukprn, e);
            }
        }