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)); }
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); }
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); }