private void GivenLearningHubApiReturnsResources(decimal rating) { var clientResponse = new BulkResourceReferences { ResourceReferences = new List <ResourceReferenceWithResourceDetails> { new ResourceReferenceWithResourceDetails { ResourceId = 0, RefId = LearningHubResourceReferenceId, Title = ResourceName, Description = ResourceDescription, Catalogue = new Catalogue { Name = ResourceCatalogue }, ResourceType = ResourceType, Rating = rating, Link = ResourceLink, }, }, UnmatchedResourceReferenceIds = new List <int>(), }; A.CallTo(() => learningHubResourceService.GetResourceReferenceDetailsByReferenceIds(A <List <int> > ._)) .Returns(clientResponse.ResourceReferences); A.CallTo(() => learningHubResourceService.GetBulkResourcesByReferenceIds(A <List <int> > ._)) .Returns((clientResponse, false)); }
GetBulkResourcesByReferenceIdsAndPopulateDeletedDetailsFromDatabase_returns_fallback_data_without_marking_resources_as_deleted_if_API_throws_exception() { // Given var resource1 = Builder <ResourceReferenceWithResourceDetails> .CreateNew() .With(r => r.RefId = 1).And(r => r.AbsentInLearningHub = false).Build(); var resource2 = Builder <ResourceReferenceWithResourceDetails> .CreateNew() .With(r => r.RefId = 2).And(r => r.AbsentInLearningHub = false).Build(); var resourceReferenceIdsToRetrieve = new[] { 1, 2, 3 }; var bulkResources = new BulkResourceReferences { ResourceReferences = new List <ResourceReferenceWithResourceDetails> { resource1, resource2, }, UnmatchedResourceReferenceIds = new List <int> { 3 }, }; A.CallTo(() => learningHubApiClient.GetBulkResourcesByReferenceIds(A <IEnumerable <int> > ._)) .Throws(new LearningHubResponseException("exception", HttpStatusCode.Unauthorized)); A.CallTo( () => learningResourceReferenceDataService.GetResourceReferenceDetailsByReferenceIds( A <IEnumerable <int> > ._ ) ).Returns(new List <ResourceReferenceWithResourceDetails> { resource1, resource2 }); // When var(bulkResourceReferences, apiIsAccessible) = (await learningHubResourceService.GetBulkResourcesByReferenceIdsAndPopulateDeletedDetailsFromDatabase( resourceReferenceIdsToRetrieve )) !; // Then using (new AssertionScope()) { bulkResourceReferences.Should().BeEquivalentTo(bulkResources); bulkResourceReferences.ResourceReferences[0].AbsentInLearningHub.Should().BeFalse(); bulkResourceReferences.ResourceReferences[1].AbsentInLearningHub.Should().BeFalse(); apiIsAccessible.Should().BeFalse(); A.CallTo( () => learningHubApiClient.GetBulkResourcesByReferenceIds( A <IEnumerable <int> > .That.IsSameSequenceAs(resourceReferenceIdsToRetrieve) ) ) .MustHaveHappenedOnceExactly(); A.CallTo( () => learningResourceReferenceDataService.GetResourceReferenceDetailsByReferenceIds( A <IEnumerable <int> > .That.IsSameSequenceAs(resourceReferenceIdsToRetrieve) ) ) .MustHaveHappenedOnceExactly(); } }
public async Task GetCompleteActionPlanResources_returns_correctly_matched_action_plan_items_with_repeated_resource() { // Given const int delegateId = 1; var learningLogIds = new List <int> { 4, 5, 6 }; var learningResourceIds = new List <int> { 15, 26, 15 }; var expectedLearningResourceIdsUsedInApiCall = new List <int> { 15, 26 }; var learningLogItems = Builder <LearningLogItem> .CreateListOfSize(3).All() .With(i => i.CompletedDate = DateTime.UtcNow) .And(i => i.ArchivedDate = null) .And((i, index) => i.LearningHubResourceReferenceId = learningResourceIds[index]) .And((i, index) => i.LearningLogItemId = learningLogIds[index]) .Build(); A.CallTo(() => learningLogItemsDataService.GetLearningLogItems(delegateId)) .Returns(learningLogItems); var matchedResources = Builder <ResourceReferenceWithResourceDetails> .CreateListOfSize(2).All() .With((r, index) => r.RefId = learningResourceIds[index]) .And((r, index) => r.Title = $"Title {learningResourceIds[index]}") .And(r => r.Catalogue = genericCatalogue).Build().ToList(); var unmatchedResourceReferences = new List <int>(); var bulkReturnedItems = new BulkResourceReferences { ResourceReferences = matchedResources, UnmatchedResourceReferenceIds = unmatchedResourceReferences, }; A.CallTo(() => learningHubApiClient.GetBulkResourcesByReferenceIds(A <IEnumerable <int> > ._)) .Returns(bulkReturnedItems); // When var result = await actionPlanService.GetCompletedActionPlanResources(delegateId); // Then List <(int id, string title)> resultIdsAndTitles = result.Select(r => (r.Id, r.Name)).ToList(); using (new AssertionScope()) { resultIdsAndTitles.Count.Should().Be(3); resultIdsAndTitles[0].Should().Be((4, "Title 15")); resultIdsAndTitles[1].Should().Be((5, "Title 26")); resultIdsAndTitles[2].Should().Be((6, "Title 15")); A.CallTo( () => learningHubApiClient.GetBulkResourcesByReferenceIds( A <IEnumerable <int> > .That.IsSameSequenceAs(expectedLearningResourceIdsUsedInApiCall) ) ) .MustHaveHappenedOnceExactly(); } }
GetRecommendedLearningForSelfAssessment_calls_learning_hub_resource_service_with_only_the_first_MaxSignpostedResources_ids_ordered_by_descending_recommendation_score() { // Given var competencyLearningResources = Builder <CompetencyLearningResource> .CreateListOfSize(50).Build(); var resourceReferences = Builder <ResourceReferenceWithResourceDetails> .CreateListOfSize(50) .All() .With(rr => rr.Catalogue = new Catalogue { Name = ResourceCatalogue }) .Build() .ToList(); var clientResponse = new BulkResourceReferences { ResourceReferences = resourceReferences, UnmatchedResourceReferenceIds = new List <int>(), }; A.CallTo(() => configDataService.GetConfigValue("MaxSignpostedResources")).Returns("3"); A.CallTo(() => learningHubResourceService.GetResourceReferenceDetailsByReferenceIds(A <List <int> > ._)) .Returns(resourceReferences); A.CallTo(() => learningHubResourceService.GetBulkResourcesByReferenceIds(A <List <int> > ._)) .Returns((clientResponse, false)); A.CallTo(() => selfAssessmentDataService.GetCompetencyIdsForSelfAssessment(SelfAssessmentId)) .Returns(new[] { CompetencyId }); A.CallTo( () => competencyLearningResourcesDataService.GetActiveCompetencyLearningResourcesByCompetencyId( CompetencyId ) ).Returns(competencyLearningResources); // When await recommendedLearningService.GetRecommendedLearningForSelfAssessment(SelfAssessmentId, DelegateId); // Then A.CallTo( () => learningHubResourceService.GetResourceReferenceDetailsByReferenceIds( A <List <int> > .That.IsSameSequenceAs(Enumerable.Range(1, 50).ToList()) ) ) .MustHaveHappenedOnceExactly(); A.CallTo( () => learningHubResourceService.GetBulkResourcesByReferenceIds( A <List <int> > .That.IsSameSequenceAs(new List <int> { 50, 49, 48 }) ) ).MustHaveHappenedOnceExactly(); }
public async Task GetBulkResourcesByReferenceIds_returns_API_data_if_retrieved() { // Given var resource1 = Builder <ResourceReferenceWithResourceDetails> .CreateNew() .With(r => r.RefId = 1).And(r => r.AbsentInLearningHub = false).Build(); var resource2 = Builder <ResourceReferenceWithResourceDetails> .CreateNew() .With(r => r.RefId = 2).And(r => r.AbsentInLearningHub = false).Build(); var resourceReferenceIdsToRetrieve = new[] { 1, 2, 3 }; var bulkResources = new BulkResourceReferences { ResourceReferences = new List <ResourceReferenceWithResourceDetails> { resource1, resource2, }, UnmatchedResourceReferenceIds = new List <int> { 3 }, }; A.CallTo(() => learningHubApiClient.GetBulkResourcesByReferenceIds(A <IEnumerable <int> > ._)) .Returns(bulkResources); // When var result = (await learningHubResourceService.GetBulkResourcesByReferenceIds(resourceReferenceIdsToRetrieve)) !; // Then using (new AssertionScope()) { result.bulkResourceReferences.Should().BeEquivalentTo(bulkResources); result.apiIsAccessible.Should().BeTrue(); A.CallTo( () => learningHubApiClient.GetBulkResourcesByReferenceIds( A <IEnumerable <int> > .That.IsSameSequenceAs(resourceReferenceIdsToRetrieve) ) ) .MustHaveHappenedOnceExactly(); A.CallTo( () => learningResourceReferenceDataService.GetResourceReferenceDetailsByReferenceIds( A <IEnumerable <int> > ._ ) ) .MustNotHaveHappened(); } }
public async Task GetRecommendedLearningForSelfAssessment_calls_learning_hub_api_with_distinct_ids() { // Given A.CallTo(() => selfAssessmentDataService.GetCompetencyIdsForSelfAssessment(SelfAssessmentId)) .Returns(new[] { 1, 2, 3, 4, 5 }); var competencyLearningResources = Builder <CompetencyLearningResource> .CreateListOfSize(5).All() .With(clr => clr.LearningHubResourceReferenceId = LearningHubResourceReferenceId) .And(clr => clr.LearningResourceReferenceId = LearningResourceReferenceId).Build(); A.CallTo( () => competencyLearningResourcesDataService.GetCompetencyLearningResourcesByCompetencyId(A <int> ._) ).Returns(competencyLearningResources); var clientResponse = new BulkResourceReferences { ResourceReferences = new List <ResourceReferenceWithResourceDetails> { new ResourceReferenceWithResourceDetails { ResourceId = 0, RefId = LearningHubResourceReferenceId, Title = ResourceName, Description = ResourceDescription, Catalogue = new Catalogue { Name = ResourceCatalogue }, ResourceType = ResourceType, Rating = 0, Link = ResourceLink, }, }, }; A.CallTo(() => learningHubApiClient.GetBulkResourcesByReferenceIds(A <IEnumerable <int> > ._)) .Returns(clientResponse); // When await recommendedLearningService.GetRecommendedLearningForSelfAssessment(SelfAssessmentId, DelegateId); // Then A.CallTo( () => learningHubApiClient.GetBulkResourcesByReferenceIds( A <IEnumerable <int> > .That.Matches(i => i.Single() == LearningHubResourceReferenceId) ) ) .MustHaveHappenedOnceExactly(); }
private void GivenResourceForSelfAssessmentIsReturnedByLearningHubApi(decimal rating = 0) { A.CallTo(() => selfAssessmentDataService.GetCompetencyIdsForSelfAssessment(SelfAssessmentId)) .Returns(new[] { CompetencyId }); var competencyLearningResource = new CompetencyLearningResource { Id = CompetencyLearningResourceId, CompetencyId = CompetencyId, LearningResourceReferenceId = LearningResourceReferenceId, AdminId = 7, LearningHubResourceReferenceId = LearningHubResourceReferenceId, }; A.CallTo( () => competencyLearningResourcesDataService.GetCompetencyLearningResourcesByCompetencyId(CompetencyId) ).Returns(new List <CompetencyLearningResource> { competencyLearningResource }); var clientResponse = new BulkResourceReferences { ResourceReferences = new List <ResourceReferenceWithResourceDetails> { new ResourceReferenceWithResourceDetails { ResourceId = 0, RefId = LearningHubResourceReferenceId, Title = ResourceName, Description = ResourceDescription, Catalogue = new Catalogue { Name = ResourceCatalogue }, ResourceType = ResourceType, Rating = rating, Link = ResourceLink, }, }, }; A.CallTo(() => learningHubApiClient.GetBulkResourcesByReferenceIds(A <IEnumerable <int> > ._)) .Returns(clientResponse); }
private void GivenLearningHubApiBulkResponseReturnsExpectedResources(IList <int> learningResourceIds) { var matchedResources = Builder <ResourceReferenceWithResourceDetails> .CreateListOfSize(3).All() .With((r, index) => r.RefId = learningResourceIds[index]) .And((r, index) => r.Title = $"Title {learningResourceIds[index]}") .And(r => r.Catalogue = genericCatalogue).Build().ToList(); var unmatchedResourceReferences = new List <int> { learningResourceIds[3], learningResourceIds[4], }; var bulkReturnedItems = new BulkResourceReferences { ResourceReferences = matchedResources, UnmatchedResourceReferenceIds = unmatchedResourceReferences, }; A.CallTo(() => learningHubApiClient.GetBulkResourcesByReferenceIds(A <IEnumerable <int> > ._)) .Returns(bulkReturnedItems); }
private void GivenLearningHubResourceServiceBulkResponseReturnsExpectedResources(IList <int> learningResourceIds) { var matchedResources = Builder <ResourceReferenceWithResourceDetails> .CreateListOfSize(3).All() .With((r, index) => r.RefId = learningResourceIds[index]) .And((r, index) => r.Title = $"Title {learningResourceIds[index]}") .And(r => r.Catalogue = genericCatalogue).Build().ToList(); var unmatchedResourceReferences = new List <int> { learningResourceIds[3], learningResourceIds[4], }; var bulkReturnedItems = new BulkResourceReferences { ResourceReferences = matchedResources, UnmatchedResourceReferenceIds = unmatchedResourceReferences, }; A.CallTo( () => learningHubResourceService .GetBulkResourcesByReferenceIdsAndPopulateDeletedDetailsFromDatabase(A <List <int> > ._) ) .Returns((bulkReturnedItems, false)); }
GetBulkResourcesByReferenceIdsAndPopulateDeletedDetailsFromDatabase_returns_API_data_and_fetches_fallback_data_for_unmatched_reference_ids() { // Given var resource1 = Builder <ResourceReferenceWithResourceDetails> .CreateNew() .With(r => r.RefId = 1).And(r => r.AbsentInLearningHub = false).Build(); var resource2 = Builder <ResourceReferenceWithResourceDetails> .CreateNew() .With(r => r.RefId = 2).And(r => r.AbsentInLearningHub = false).Build(); var resource3 = Builder <ResourceReferenceWithResourceDetails> .CreateNew() .With(r => r.RefId = 3).And(r => r.AbsentInLearningHub = false).Build(); var resourceReferenceIdsToRetrieve = new[] { 1, 2, 3, 4 }; var initiallyUnmatchedResourceReferenceIds = new List <int> { 3, 4 }; var bulkResources = new BulkResourceReferences { ResourceReferences = new List <ResourceReferenceWithResourceDetails> { resource1, resource2, }, UnmatchedResourceReferenceIds = initiallyUnmatchedResourceReferenceIds, }; A.CallTo(() => learningHubApiClient.GetBulkResourcesByReferenceIds(A <IEnumerable <int> > ._)) .Returns(bulkResources); A.CallTo( () => learningResourceReferenceDataService.GetResourceReferenceDetailsByReferenceIds( A <IEnumerable <int> > ._ ) ) .Returns(new List <ResourceReferenceWithResourceDetails> { resource3 }); // When var(bulkResourceReferences, apiIsAccessible) = (await learningHubResourceService.GetBulkResourcesByReferenceIdsAndPopulateDeletedDetailsFromDatabase( resourceReferenceIdsToRetrieve )) !; // Then using (new AssertionScope()) { bulkResourceReferences.ResourceReferences[0].Should().BeEquivalentTo(resource1); bulkResourceReferences.ResourceReferences[0].AbsentInLearningHub.Should().BeFalse(); bulkResourceReferences.ResourceReferences[1].Should().BeEquivalentTo(resource2); bulkResourceReferences.ResourceReferences[1].AbsentInLearningHub.Should().BeFalse(); bulkResourceReferences.ResourceReferences[2].Should().BeEquivalentTo( resource3, options => options.Excluding(r => r.AbsentInLearningHub) ); bulkResourceReferences.ResourceReferences[2].AbsentInLearningHub.Should().BeTrue(); bulkResourceReferences.UnmatchedResourceReferenceIds.Should().BeEquivalentTo(new List <int> { 4 }); apiIsAccessible.Should().BeTrue(); A.CallTo( () => learningHubApiClient.GetBulkResourcesByReferenceIds( A <IEnumerable <int> > .That.IsSameSequenceAs(resourceReferenceIdsToRetrieve) ) ) .MustHaveHappenedOnceExactly(); A.CallTo( () => learningResourceReferenceDataService.GetResourceReferenceDetailsByReferenceIds( A <IEnumerable <int> > .That.IsSameSequenceAs(initiallyUnmatchedResourceReferenceIds) ) ) .MustHaveHappenedOnceExactly(); } }