public async Task LmiSocImportServiceImportReturnsSuccess()
        {
            // arrange
            var socJobProfileMapping = new SocJobProfileMappingModel
            {
                Soc         = 3231,
                JobProfiles = A.CollectionOfDummy <SocJobProfileItemModel>(2).ToList(),
            };
            var dummyLmiPredictedModel = A.Dummy <LmiPredictedModel>();

            dummyLmiPredictedModel.PredictedEmployment = A.CollectionOfDummy <LmiPredictedYearModel>(2).ToList();

            A.CallTo(() => fakeLmiApiConnector.ImportAsync <LmiSocDatasetModel>(A <Uri> .Ignored)).Returns(A.Dummy <LmiSocDatasetModel>());
            A.CallTo(() => fakeLmiApiConnector.ImportAsync <LmiPredictedModel>(A <Uri> .Ignored)).Returns(dummyLmiPredictedModel);
            A.CallTo(() => fakeLmiApiConnector.ImportAsync <LmiBreakdownModel>(A <Uri> .Ignored)).Returns(A.Dummy <LmiBreakdownModel>());

            // act
            var result = await lmiSocImportService.ImportAsync(socJobProfileMapping.Soc.Value, socJobProfileMapping.JobProfiles).ConfigureAwait(false);

            // assert
            A.CallTo(() => fakeLmiApiConnector.ImportAsync <LmiSocDatasetModel>(A <Uri> .Ignored)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeLmiApiConnector.ImportAsync <LmiPredictedModel>(A <Uri> .Ignored)).MustHaveHappened(2, Times.Exactly);
            A.CallTo(() => fakeLmiApiConnector.ImportAsync <LmiBreakdownModel>(A <Uri> .Ignored)).MustHaveHappened(3, Times.Exactly);
            Assert.NotNull(result);
            Assert.NotNull(result !.JobProfiles);
            Assert.NotNull(result.JobGrowth);
            Assert.NotNull(result.QualificationLevel);
            Assert.NotNull(result.EmploymentByRegion);
            Assert.NotNull(result.TopIndustriesInJobGroup);
        }
        public async Task <HttpStatusCode> GraphRefreshSocOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context)
        {
            _ = context ?? throw new ArgumentNullException(nameof(context));

            var socRequest = context.GetInput <SocRequestModel>();

            if (socJobProfilesMappingsCachedModel.SocJobProfileMappings == null || !socJobProfilesMappingsCachedModel.SocJobProfileMappings.Any())
            {
                socJobProfilesMappingsCachedModel.SocJobProfileMappings = await context.CallActivityAsync <IList <SocJobProfileMappingModel>?>(nameof(GetJobProfileSocMappingsActivity), null).ConfigureAwait(true);
            }

            var socJobProfileMapping = new SocJobProfileMappingModel {
                Soc = socRequest.Soc, JobProfiles = socJobProfilesMappingsCachedModel.SocJobProfileMappings.FirstOrDefault(f => f.Soc == socRequest.Soc)?.JobProfiles
            };

            await context.CallActivityAsync(nameof(GraphPurgeSocActivity), socRequest.Soc).ConfigureAwait(true);

            var eventGridPostPurgeRequest = new EventGridPostRequestModel
            {
                ItemId      = socRequest.SocId,
                Api         = $"{eventGridClientOptions.ApiEndpoint}/{socRequest.SocId}",
                DisplayText = $"LMI SOC purged: {socRequest.Soc}",
                EventType   = socRequest.IsDraftEnvironment ? EventTypeForDraftDiscarded : EventTypeForDeleted,
            };

            await context.CallActivityAsync(nameof(PostGraphEventActivity), eventGridPostPurgeRequest).ConfigureAwait(true);

            var itemId = await context.CallActivityAsync <Guid?>(nameof(ImportSocItemActivity), socJobProfileMapping).ConfigureAwait(true);

            if (itemId != null)
            {
                var eventGridPostRequest = new EventGridPostRequestModel
                {
                    ItemId      = itemId,
                    Api         = $"{eventGridClientOptions.ApiEndpoint}/{itemId}",
                    DisplayText = $"LMI SOC refreshed: {socRequest.Soc}",
                    EventType   = socRequest.IsDraftEnvironment ? EventTypeForDraft : EventTypeForPublished,
                };

                await context.CallActivityAsync(nameof(PostGraphEventActivity), eventGridPostRequest).ConfigureAwait(true);

                return(HttpStatusCode.OK);
            }

            return(HttpStatusCode.NoContent);
        }
示例#3
0
        public async Task LmiImportOrchestrationTriggerImportSocItemActivityReturnsNullItemId()
        {
            // Arrange
            LmiSocDatasetModel?nullLmiSocDatasetModel = null;
            var socJobProfileMapping = new SocJobProfileMappingModel {
                Soc = 1234
            };

            A.CallTo(() => fakeLmiSocImportService.ImportAsync(A <int> .Ignored, A <List <SocJobProfileItemModel> > .Ignored)).Returns(nullLmiSocDatasetModel);

            // Act
            var result = await lmiImportOrchestrationTrigger.ImportSocItemActivity(socJobProfileMapping).ConfigureAwait(false);

            // Assert
            A.CallTo(() => fakeLmiSocImportService.ImportAsync(A <int> .Ignored, A <List <SocJobProfileItemModel> > .Ignored)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeMapLmiToGraphService.Map(A <LmiSocDatasetModel> .Ignored)).MustNotHaveHappened();
            A.CallTo(() => fakeGraphService.ImportAsync(A <GraphSocDatasetModel> .Ignored, A <GraphReplicaSet> .Ignored)).MustNotHaveHappened();
            Assert.Null(result);
        }
        public async Task <Guid?> ImportSocItemActivity([ActivityTrigger] SocJobProfileMappingModel socJobProfileMapping)
        {
            _ = socJobProfileMapping ?? throw new ArgumentNullException(nameof(socJobProfileMapping));

            logger.LogInformation($"Importing SOC: {socJobProfileMapping.Soc}");

            var lmiSocDataset = await lmiSocImportService.ImportAsync(socJobProfileMapping.Soc !.Value, socJobProfileMapping.JobProfiles).ConfigureAwait(false);

            if (lmiSocDataset != null)
            {
                var graphSocDataset = mapLmiToGraphService.Map(lmiSocDataset);

                if (await graphService.ImportAsync(graphSocDataset).ConfigureAwait(false))
                {
                    return(graphSocDataset !.ItemId);
                }
            }

            return(null);
        }
        public async Task LmiSocImportServiceImportReturnsnullWhenNoData()
        {
            // arrange
            var socJobProfileMapping = new SocJobProfileMappingModel
            {
                Soc         = 3231,
                JobProfiles = A.CollectionOfDummy <SocJobProfileItemModel>(2).ToList(),
            };
            LmiSocDatasetModel?nullLmiSocDatasetModel = null;

            A.CallTo(() => fakeLmiApiConnector.ImportAsync <LmiSocDatasetModel>(A <Uri> .Ignored)).Returns(nullLmiSocDatasetModel);

            // act
            var result = await lmiSocImportService.ImportAsync(socJobProfileMapping.Soc.Value, socJobProfileMapping.JobProfiles).ConfigureAwait(false);

            // assert
            A.CallTo(() => fakeLmiApiConnector.ImportAsync <LmiSocDatasetModel>(A <Uri> .Ignored)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeLmiApiConnector.ImportAsync <LmiPredictedModel>(A <Uri> .Ignored)).MustNotHaveHappened();
            A.CallTo(() => fakeLmiApiConnector.ImportAsync <LmiBreakdownModel>(A <Uri> .Ignored)).MustNotHaveHappened();
            Assert.Null(result);
        }
示例#6
0
        public async Task LmiImportOrchestrationTriggerImportSocItemActivityIsSuccessful()
        {
            // Arrange
            var dummyLmiSocDatasetModel   = A.Dummy <LmiSocDatasetModel>();
            var dummyGraphSocDatasetModel = A.Dummy <GraphSocDatasetModel>();
            var socJobProfileMapping      = new SocJobProfileMappingModel {
                Soc = 1234
            };

            A.CallTo(() => fakeLmiSocImportService.ImportAsync(A <int> .Ignored, A <List <SocJobProfileItemModel> > .Ignored)).Returns(dummyLmiSocDatasetModel);
            A.CallTo(() => fakeMapLmiToGraphService.Map(A <LmiSocDatasetModel> .Ignored)).Returns(dummyGraphSocDatasetModel);
            A.CallTo(() => fakeGraphService.ImportAsync(A <GraphSocDatasetModel> .Ignored)).Returns(true);

            // Act
            var result = await lmiImportOrchestrationTrigger.ImportSocItemActivity(socJobProfileMapping).ConfigureAwait(false);

            // Assert
            A.CallTo(() => fakeLmiSocImportService.ImportAsync(A <int> .Ignored, A <List <SocJobProfileItemModel> > .Ignored)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeMapLmiToGraphService.Map(A <LmiSocDatasetModel> .Ignored)).MustHaveHappenedOnceExactly();
            A.CallTo(() => fakeGraphService.ImportAsync(A <GraphSocDatasetModel> .Ignored)).MustHaveHappenedOnceExactly();
            Assert.NotNull(result);
        }