コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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();
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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
                        );
                }
            }
        }