public async Task <IEnumerable <ActionPlanResource> > GetIncompleteActionPlanResources(int delegateId) { var incompleteLearningLogItems = learningLogItemsDataService.GetLearningLogItems(delegateId) .Where( i => i.CompletedDate == null && i.ArchivedDate == null ).ToList(); return(await MapLearningLogItemsToActionPlanResources(incompleteLearningLogItems)); }
public async Task <IEnumerable <RecommendedResource> > GetRecommendedLearningForSelfAssessment( int selfAssessmentId, int delegateId ) { var competencyIds = selfAssessmentDataService.GetCompetencyIdsForSelfAssessment(selfAssessmentId); var competencyLearningResources = new List <CompetencyLearningResource>(); foreach (var competencyId in competencyIds) { var learningHubResourceReferencesForCompetency = competencyLearningResourcesDataService.GetCompetencyLearningResourcesByCompetencyId( competencyId ); competencyLearningResources.AddRange(learningHubResourceReferencesForCompetency); } var resourceReferences = competencyLearningResources.Select( clr => (clr.LearningHubResourceReferenceId, clr.LearningResourceReferenceId) ).Distinct().ToDictionary(x => x.LearningHubResourceReferenceId, x => x.LearningResourceReferenceId); var uniqueLearningHubReferenceIds = competencyLearningResources .Select(clr => clr.LearningHubResourceReferenceId).Distinct(); var resources = await learningHubApiClient.GetBulkResourcesByReferenceIds(uniqueLearningHubReferenceIds); var delegateLearningLogItems = learningLogItemsDataService.GetLearningLogItems(delegateId); var recommendedResources = resources.ResourceReferences.Select( rr => { var learningLogItemsForResource = delegateLearningLogItems.Where( ll => ll.ArchivedDate == null && ll.LearningHubResourceReferenceId == rr.RefId ).ToList(); var incompleteLearningLogItem = learningLogItemsForResource.SingleOrDefault(ll => ll.CompletedDate == null); return(new RecommendedResource( resourceReferences[rr.RefId], rr, incompleteLearningLogItem, learningLogItemsForResource.Any(ll => ll.CompletedDate != null), CalculateRecommendedLearningScore(rr, competencyLearningResources, selfAssessmentId, delegateId) )); } ); return(recommendedResources); }
GetIncompleteActionPlanResources_returns_empty_list_if_no_incomplete_learning_log_items_found() { // Given const int delegateId = 1; var invalidLearningLogItems = Builder <LearningLogItem> .CreateListOfSize(3) .All().With(i => i.CompletedDate = null).And(i => i.ArchivedDate = null) .And(i => i.LearningHubResourceReferenceId = 1) .TheFirst(1).With(i => i.Activity = "completed").And(i => i.CompletedDate = DateTime.UtcNow) .TheNext(1).With(i => i.Activity = "removed").And(i => i.ArchivedDate = DateTime.UtcNow) .TheNext(1).With(i => i.Activity = "no resource link").And(i => i.LearningHubResourceReferenceId = null) .Build(); A.CallTo(() => learningLogItemsDataService.GetLearningLogItems(delegateId)) .Returns(invalidLearningLogItems); // When var result = await actionPlanService.GetIncompleteActionPlanResources(delegateId); // Then result.resources.Should().BeEmpty(); result.apiIsAccessible.Should().BeTrue(); A.CallTo(() => learningHubResourceService.GetBulkResourcesByReferenceIds(A <List <int> > ._)) .MustNotHaveHappened(); }
GetRecommendedLearningForSelfAssessment_returns_correctly_populated_resource_when_learning_log_empty() { // Given GivenResourceForSelfAssessmentIsReturnedByLearningHubApi(); A.CallTo(() => learningLogItemsDataService.GetLearningLogItems(DelegateId)) .Returns(new List <LearningLogItem>()); var expectedResource = GetExpectedResource(false, false, null); // When var result = (await recommendedLearningService.GetRecommendedLearningForSelfAssessment(SelfAssessmentId, DelegateId)) .ToList(); // Then result.Should().HaveCount(1); result.Single().Should().BeEquivalentTo(expectedResource); }
GetRecommendedLearningForSelfAssessment_returns_correctly_populated_resource_when_learning_log_empty() { // Given GivenResourceForSelfAssessmentIsReturnedByLearningHubApi(); GivenQuestionParametersAreReturned(true, true, 1, 10); GivenSelfAssessmentHasResultsForFirstCompetency(5, 5); A.CallTo(() => learningLogItemsDataService.GetLearningLogItems(DelegateId)) .Returns(new List <LearningLogItem>()); var expectedResource = GetExpectedResource(false, false, null, 175); // When var result = (await recommendedLearningService.GetRecommendedLearningForSelfAssessment(SelfAssessmentId, DelegateId)) .recommendedResources.ToList(); // Then result.Should().HaveCount(1); result.Single().Should().BeEquivalentTo(expectedResource); }
GetRecommendedLearningForSelfAssessment( int selfAssessmentId, int delegateId ) { var hasMaxSignpostedResources = Int32.TryParse( configDataService.GetConfigValue(ConfigDataService.MaxSignpostedResources), out var maxSignpostedResources ); var competencyIds = selfAssessmentDataService.GetCompetencyIdsForSelfAssessment(selfAssessmentId); var competencyLearningResources = new List <CompetencyLearningResource>(); foreach (var competencyId in competencyIds) { var learningHubResourceReferencesForCompetency = competencyLearningResourcesDataService.GetActiveCompetencyLearningResourcesByCompetencyId( competencyId ); competencyLearningResources.AddRange(learningHubResourceReferencesForCompetency); } var resourceReferences = competencyLearningResources.Select( clr => (clr.LearningHubResourceReferenceId, clr.LearningResourceReferenceId) ).Distinct().ToDictionary( x => x.LearningHubResourceReferenceId, x => x.LearningResourceReferenceId ); var uniqueLearningHubReferenceIds = competencyLearningResources.Select( clr => clr.LearningHubResourceReferenceId ).Distinct().ToList(); var resources = learningHubResourceService.GetResourceReferenceDetailsByReferenceIds(uniqueLearningHubReferenceIds); var delegateLearningLogItems = learningLogItemsDataService.GetLearningLogItems(delegateId); var recommendedResources = resources.Select( rr => GetPopulatedRecommendedResource( selfAssessmentId, delegateId, resourceReferences[rr.RefId], delegateLearningLogItems, rr, competencyLearningResources ) ) .WhereNotNull() .OrderByDescending(resource => resource.RecommendationScore); var bestRecommendedResources = hasMaxSignpostedResources ? recommendedResources.Take(maxSignpostedResources).ToList() : recommendedResources.ToList(); var apiResources = await learningHubResourceService.GetBulkResourcesByReferenceIds( bestRecommendedResources.Select(resource => resource.LearningHubReferenceId).ToList() ); var recommendedResourcesPresentInApi = bestRecommendedResources.Where( resource => !apiResources.bulkResourceReferences.UnmatchedResourceReferenceIds.Contains( resource.LearningHubReferenceId ) ).ToList(); return(recommendedResourcesPresentInApi, apiResources.apiIsAccessible); }
public void GetLearningLogItems_returns_all_learning_hub_resource_log_items_for_delegate() { // Given const int learningResourceReferenceId = 1; const int learningHubResourceReferenceId = 2; const int delegateId = 2; const int differentDelegateId = 3; const string firstActivityName = "activity 1"; const string secondActivityName = "activity 2"; const string firstResourceLink = "link 1"; const string secondResourceLink = "link 2"; var addedDate = new DateTime(2021, 11, 1); using (new TransactionScope()) { competencyLearningResourcesTestHelper.InsertLearningResourceReference( learningResourceReferenceId, learningHubResourceReferenceId, 7, "Resource" ); competencyLearningResourcesTestHelper.InsertCompetencyLearningResource( 1, 1, learningResourceReferenceId, 7 ); service.InsertLearningLogItem( delegateId, addedDate, firstActivityName, firstResourceLink, learningResourceReferenceId ); service.InsertLearningLogItem( delegateId, addedDate, secondActivityName, secondResourceLink, learningResourceReferenceId ); service.InsertLearningLogItem( differentDelegateId, addedDate, "activity 3", "resource link 3", learningResourceReferenceId ); // When var result = service.GetLearningLogItems(delegateId).ToList(); // Then using (new AssertionScope()) { result.Count.Should().Be(2); AssertLearningLogItemHasCorrectValuesForLearningHubResource( result[0], delegateId, addedDate, learningResourceReferenceId, firstActivityName, firstResourceLink ); AssertLearningLogItemHasCorrectValuesForLearningHubResource( result[1], delegateId, addedDate, learningResourceReferenceId, secondActivityName, secondResourceLink ); } } }