示例#1
0
        private IActionResult ValidateMarkup(BodyViewModel bodyViewModel, JobProfileModel jobProfileModel)
        {
            if (bodyViewModel.Segments != null)
            {
                foreach (var segmentModel in bodyViewModel.Segments)
                {
                    var markup = segmentModel.Markup.Value;

                    if (!string.IsNullOrWhiteSpace(markup))
                    {
                        continue;
                    }

                    switch (segmentModel.Segment)
                    {
                    case JobProfileSegment.Overview:
                    case JobProfileSegment.HowToBecome:
                    case JobProfileSegment.WhatItTakes:
                        throw new InvalidProfileException($"JobProfile with Id {jobProfileModel.DocumentId} is missing markup for segment {segmentModel.Segment.ToString()}");

                    case JobProfileSegment.RelatedCareers:
                    case JobProfileSegment.CurrentOpportunities:
                    case JobProfileSegment.WhatYouWillDo:
                    case JobProfileSegment.CareerPathsAndProgression:
                    {
                        segmentModel.Markup = segmentService.GetOfflineSegment(segmentModel.Segment).OfflineMarkup;
                        break;
                    }
                    }
                }
            }

            return(this.NegotiateContentResult(bodyViewModel, jobProfileModel.Segments));
        }
示例#2
0
        public async Task JobProfileServiceRefreshSegmentReturnsOfflineMarkupWhenFailedAndExistingSegmentNull()
        {
            // arrange
            var refreshJobProfileSegmentModel = A.Fake <RefreshJobProfileSegment>();
            var existingJobProfileModel       = A.Fake <JobProfileModel>();

            existingJobProfileModel.Segments = new List <SegmentModel>
            {
                new SegmentModel
                {
                    Segment = Data.JobProfileSegment.Overview,
                },
            };

            var jobProfileModel      = A.Fake <JobProfileModel>();
            var existingSegmentModel = A.Dummy <SegmentModel>();
            var segmentModel         = A.Dummy <SegmentModel>();

            segmentModel.RefreshStatus = Data.Enums.RefreshStatus.Failed;
            var offlineModel = new OfflineSegmentModel
            {
                OfflineMarkup = new HtmlString("This is offline markup"),
                OfflineJson   = "This is offline json",
            };

            var expectedResult = HttpStatusCode.FailedDependency;

            A.CallTo(() => repository.GetAsync(A <Expression <Func <JobProfileModel, bool> > > .Ignored)).Returns(existingJobProfileModel);
            A.CallTo(() => segmentService.RefreshSegmentAsync(refreshJobProfileSegmentModel)).Returns(segmentModel);
            A.CallTo(() => segmentService.GetOfflineSegment(refreshJobProfileSegmentModel.Segment)).Returns(offlineModel);
            A.CallTo(() => repository.UpsertAsync(A <JobProfileModel> .Ignored)).Returns(HttpStatusCode.OK);

            // act
            var result = await jobProfileService.RefreshSegmentsAsync(refreshJobProfileSegmentModel).ConfigureAwait(false);

            // assert
            A.CallTo(() => repository.GetAsync(A <Expression <Func <JobProfileModel, bool> > > .Ignored)).MustHaveHappenedOnceExactly();
            A.CallTo(() => segmentService.RefreshSegmentAsync(refreshJobProfileSegmentModel)).MustHaveHappenedOnceExactly();
            A.CallTo(() => repository.UpsertAsync(A <JobProfileModel> .That.Matches(m =>
                                                                                    m.Segments[0].Markup.Value == offlineModel.OfflineMarkup.Value &&
                                                                                    m.Segments[0].Json == offlineModel.OfflineJson))).MustHaveHappenedOnceExactly();

            result.Should().Be(expectedResult);
        }
示例#3
0
        public async Task <HttpStatusCode> RefreshSegmentsAsync(RefreshJobProfileSegment refreshJobProfileSegmentModel)
        {
            if (refreshJobProfileSegmentModel is null)
            {
                throw new ArgumentNullException(nameof(refreshJobProfileSegmentModel));
            }

            //Check existing document
            var existingJobProfile = await GetByIdAsync(refreshJobProfileSegmentModel.JobProfileId).ConfigureAwait(false);

            if (existingJobProfile is null)
            {
                return(HttpStatusCode.NotFound);
            }

            var existingItem = existingJobProfile.Segments.SingleOrDefault(s => s.Segment == refreshJobProfileSegmentModel.Segment);

            if (existingItem?.RefreshSequence > refreshJobProfileSegmentModel.SequenceNumber)
            {
                return(HttpStatusCode.AlreadyReported);
            }

            var offlineSegmentData = segmentService.GetOfflineSegment(refreshJobProfileSegmentModel.Segment);
            var segmentData        = await segmentService.RefreshSegmentAsync(refreshJobProfileSegmentModel).ConfigureAwait(false);

            if (existingItem is null)
            {
                segmentData.Markup = !string.IsNullOrEmpty(segmentData.Markup?.Value) ? segmentData.Markup : offlineSegmentData.OfflineMarkup;
                segmentData.Json ??= offlineSegmentData.OfflineJson;
                existingJobProfile.Segments.Add(segmentData);
            }
            else
            {
                var index          = existingJobProfile.Segments.IndexOf(existingItem);
                var fallbackMarkup = !string.IsNullOrEmpty(existingItem.Markup?.Value) ? existingItem.Markup : offlineSegmentData.OfflineMarkup;
                segmentData.Markup = !string.IsNullOrEmpty(segmentData.Markup?.Value) ? segmentData.Markup : fallbackMarkup;
                segmentData.Json ??= existingItem.Json ?? offlineSegmentData.OfflineJson;

                existingJobProfile.Segments[index] = segmentData;
            }

            var result = await repository.UpsertAsync(existingJobProfile).ConfigureAwait(false);

            return(segmentData.RefreshStatus == Data.Enums.RefreshStatus.Success ? result : HttpStatusCode.FailedDependency);
        }