private static BreadcrumbViewModel BuildBreadcrumb(JobProfileOverviewSegmentModel model, string routePrefix) { var viewModel = new BreadcrumbViewModel { Paths = new List <BreadcrumbPathViewModel>() { new BreadcrumbPathViewModel() { Route = $"/explore-careers", Title = "Home: Explore careers", }, }, }; if (model != null) { var breadcrumbPathViewModel = new BreadcrumbPathViewModel { Route = $"/{routePrefix}/{model.CanonicalName}", Title = model.Data.Title, }; viewModel.Paths.Add(breadcrumbPathViewModel); } viewModel.Paths.Last().AddHyperlink = false; return(viewModel); }
public async Task <IActionResult> Put([FromBody] JobProfileOverviewSegmentModel jobProfileOverviewSegmentModel) { logService.LogInformation($"{PutActionName} has been called"); if (jobProfileOverviewSegmentModel == null) { return(BadRequest()); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var existingDocument = await jobProfileOverviewSegmentService.GetByIdAsync(jobProfileOverviewSegmentModel.DocumentId).ConfigureAwait(false); if (existingDocument == null) { return(new StatusCodeResult((int)HttpStatusCode.NotFound)); } if (jobProfileOverviewSegmentModel.SequenceNumber <= existingDocument.SequenceNumber) { return(new StatusCodeResult((int)HttpStatusCode.AlreadyReported)); } jobProfileOverviewSegmentModel.Etag = existingDocument.Etag; jobProfileOverviewSegmentModel.SocLevelTwo = existingDocument.SocLevelTwo; var response = await jobProfileOverviewSegmentService.UpsertAsync(jobProfileOverviewSegmentModel).ConfigureAwait(false); return(new StatusCodeResult((int)response)); }
public async Task <IActionResult> Post([FromBody] JobProfileOverviewSegmentModel jobProfileOverviewSegmentModel) { logService.LogInformation($"{PostActionName} has been called"); if (jobProfileOverviewSegmentModel == null) { return(BadRequest()); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var existingDocument = await jobProfileOverviewSegmentService.GetByIdAsync(jobProfileOverviewSegmentModel.DocumentId).ConfigureAwait(false); if (existingDocument != null) { return(new StatusCodeResult((int)HttpStatusCode.AlreadyReported)); } var response = await jobProfileOverviewSegmentService.UpsertAsync(jobProfileOverviewSegmentModel).ConfigureAwait(false); logService.LogInformation($"{PostActionName} has upserted content for: {jobProfileOverviewSegmentModel.CanonicalName}"); return(new StatusCodeResult((int)response)); }
private async Task <HttpStatusCode> UpsertAndRefreshSegmentModel(JobProfileOverviewSegmentModel existingSegmentModel) { var result = await repository.UpsertAsync(existingSegmentModel).ConfigureAwait(false); if (result == HttpStatusCode.OK || result == HttpStatusCode.Created) { var refreshJobProfileSegmentServiceBusModel = mapper.Map <RefreshJobProfileSegmentServiceBusModel>(existingSegmentModel); await jobProfileSegmentRefreshService.SendMessageAsync(refreshJobProfileSegmentServiceBusModel).ConfigureAwait(false); } return(result); }
public async Task <HttpStatusCode> UpsertAsync(JobProfileOverviewSegmentModel jobProfileOverviewSegmentModel) { if (jobProfileOverviewSegmentModel == null) { throw new ArgumentNullException(nameof(jobProfileOverviewSegmentModel)); } if (jobProfileOverviewSegmentModel.Data == null) { jobProfileOverviewSegmentModel.Data = new JobProfileOverviewSegmentDataModel(); } return(await UpsertAndRefreshSegmentModel(jobProfileOverviewSegmentModel).ConfigureAwait(false)); }
public async Task SegmentServiceGetByNameReturnsNullWhenMissingInRepository() { // arrange JobProfileOverviewSegmentModel expectedResult = null; A.CallTo(() => repository.GetAsync(A <Expression <Func <JobProfileOverviewSegmentModel, bool> > > .Ignored)).Returns(expectedResult); // act var result = await jobProfileOverviewSegmentService.GetByNameAsync("article-name").ConfigureAwait(false); // assert A.CallTo(() => repository.GetAsync(A <Expression <Func <JobProfileOverviewSegmentModel, bool> > > .Ignored)).MustHaveHappenedOnceExactly(); Assert.Equal(expectedResult, result); }
public async Task JobProfileOverviewSegmentServicePatchSocCodeDataReturnsNotFoundWhenDocumentNotExists() { // arrange var patchModel = A.Fake <PatchSocDataModel>(); var documentId = Guid.NewGuid(); JobProfileOverviewSegmentModel existingSegmentModel = null; var expectedResult = HttpStatusCode.NotFound; A.CallTo(() => repository.GetAsync(A <Expression <Func <JobProfileOverviewSegmentModel, bool> > > .Ignored)).Returns(existingSegmentModel); // act var result = await jobProfileOverviewSegmentService.PatchSocCodeDataAsync(patchModel, documentId).ConfigureAwait(false); // assert A.CallTo(() => repository.GetAsync(A <Expression <Func <JobProfileOverviewSegmentModel, bool> > > .Ignored)).MustHaveHappenedOnceExactly(); Assert.Equal(expectedResult, result); }
public async Task SegmentControllerPostReturnsBadResultWhenModelIsInvalid(string mediaTypeName) { // Arrange var overviewSegmentModel = new JobProfileOverviewSegmentModel(); var controller = BuildSegmentController(mediaTypeName); controller.ModelState.AddModelError(string.Empty, "Model is not valid"); // Act var result = await controller.Post(overviewSegmentModel).ConfigureAwait(false); // Assert var statusResult = Assert.IsType <BadRequestObjectResult>(result); Assert.Equal((int)HttpStatusCode.BadRequest, statusResult.StatusCode); controller.Dispose(); }
public async Task ReturnsNoContentWhenNoData(string mediaTypeName) { // Arrange JobProfileOverviewSegmentModel expectedResult = null; var controller = BuildSegmentController(mediaTypeName); A.CallTo(() => FakeJobProfileOverviewSegmentService.GetByNameAsync(A <string> .Ignored)).Returns(expectedResult); // Act var result = await controller.Document(JobProfileName).ConfigureAwait(false); // Assert A.CallTo(() => FakeJobProfileOverviewSegmentService.GetByNameAsync(A <string> .Ignored)).MustHaveHappenedOnceExactly(); var statusResult = Assert.IsType <NoContentResult>(result); Assert.Equal((int)HttpStatusCode.NoContent, statusResult.StatusCode); controller.Dispose(); }
public async Task <HttpStatusCode> PutAsync(JobProfileOverviewSegmentModel overviewSegmentModel) { var url = new Uri($"{segmentClientOptions?.BaseAddress}segment"); using (var content = new ObjectContent(typeof(JobProfileOverviewSegmentModel), overviewSegmentModel, new JsonMediaTypeFormatter(), MediaTypeNames.Application.Json)) { ConfigureHttpClient(); var response = await httpClient.PutAsync(url, content).ConfigureAwait(false); if (!response.IsSuccessStatusCode && response.StatusCode != HttpStatusCode.NotFound) { var responseContent = await response.Content.ReadAsStringAsync().ConfigureAwait(false); logService.LogError($"Failure status code '{response.StatusCode}' received with content '{responseContent}', for Put type {typeof(JobProfileOverviewSegmentModel)}, Id: {overviewSegmentModel?.DocumentId}"); response.EnsureSuccessStatusCode(); } return(response.StatusCode); } }
public async Task WhenUpdateExistingArticleReturnsAlreadyReported() { // Arrange var overviewSegmentModel = new JobProfileOverviewSegmentModel() { DocumentId = dataSeeding.Article2Id, CanonicalName = "article2_modified", SocLevelTwo = dataSeeding.Article2SocCode, Data = new JobProfileOverviewSegmentDataModel(), }; var client = factory.CreateClient(); client.DefaultRequestHeaders.Accept.Clear(); // Act var response = await client.PostAsync(Url, overviewSegmentModel, new JsonMediaTypeFormatter()).ConfigureAwait(false); // Assert response.EnsureSuccessStatusCode(); response.StatusCode.Should().Be(HttpStatusCode.AlreadyReported); }
public async Task WhenAddingNewArticleReturnCreated() { // Arrange var documentId = Guid.NewGuid(); var overviewSegmentModel = new JobProfileOverviewSegmentModel() { DocumentId = documentId, CanonicalName = documentId.ToString().ToLowerInvariant(), SocLevelTwo = "12PostSoc", Data = new JobProfileOverviewSegmentDataModel(), }; var client = factory.CreateClient(); client.DefaultRequestHeaders.Accept.Clear(); // Act var response = await client.PostAsync(Url, overviewSegmentModel, new JsonMediaTypeFormatter()).ConfigureAwait(false); // Assert response.EnsureSuccessStatusCode(); Assert.Equal(HttpStatusCode.Created, response.StatusCode); }