private DasProvider ExportProvider( int ukprn, int exportKey, IEnumerable <Provider> providers, List <Apprenticeship> apprenticeships, Core.DataStore.CosmosDb.Models.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 { VenueId = Guid.NewGuid(), VenueName = "TestVenueName" }; var lars = new Core.Search.Models.Lars { LearnAimRef = "00112233", LearnAimRefTitle = "TestLearnAimRefTitle" }; var courseRun = new CourseRun { CourseRunId = Guid.NewGuid(), CourseRunStatus = CourseStatus.Live, DurationUnit = CourseDurationUnit.Months, DurationValue = 3, VenueId = venue.VenueId }; var alternativeCourseRun = new CourseRun { CourseRunId = Guid.NewGuid(), CourseRunStatus = CourseStatus.Live, DurationUnit = CourseDurationUnit.Months, DurationValue = 3, VenueId = venue.VenueId }; var course = new Course { CourseId = Guid.NewGuid(), ProviderUkprn = 12345678, LearnAimRef = lars.LearnAimRef, CourseRuns = new[] { courseRun, alternativeCourseRun } }; var provider = new Provider { Id = Guid.NewGuid(), UnitedKingdomProviderReferenceNumber = "12345678", ProviderContact = new[] { new Core.DataStore.CosmosDb.Models.ProviderContact { ContactEmail = "*****@*****.**", ContactType = "P" } } }; var sqlProvider = new Core.DataStore.Sql.Models.Provider { ProviderId = provider.Id, ProviderName = "TestProviderAlias", DisplayNameSource = ProviderDisplayNameSource.ProviderName }; var feChoice = new Core.DataStore.CosmosDb.Models.FeChoice { UKPRN = course.ProviderUkprn, EmployerSatisfaction = 1.2M, LearnerSatisfaction = 3.4M }; SqlQueryDispatcher.Setup(s => s.ExecuteQuery(It.IsAny <GetCourse>())) .ReturnsAsync(course); CosmosDbQueryDispatcher.Setup(s => s.ExecuteQuery(It.IsAny <Core.DataStore.CosmosDb.Queries.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 } } }); SqlQueryDispatcher.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.CourseId, courseRun.CourseRunId)); 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.CourseId); 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.CourseRunId); resultJson["courseRunId"].ToObject <Guid>().Should().Be(courseRun.CourseRunId); } }
public DasProvider CreateDasProviderFromProvider(int exportKey, Models.Providers.Provider provider, Core.DataStore.CosmosDb.Models.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); } }