public async Task <IActionResult> Put([FromBody] RelatedCareersSegmentModel relatedCareersSegmentModel) { logService.LogInformation($"{PutActionName} has been called"); if (relatedCareersSegmentModel == null) { return(BadRequest()); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var existingDocument = await relatedCareersSegmentService.GetByIdAsync(relatedCareersSegmentModel.DocumentId).ConfigureAwait(false); if (existingDocument == null) { return(new StatusCodeResult((int)HttpStatusCode.NotFound)); } if (relatedCareersSegmentModel.SequenceNumber <= existingDocument.SequenceNumber) { return(new StatusCodeResult((int)HttpStatusCode.AlreadyReported)); } relatedCareersSegmentModel.Etag = existingDocument.Etag; relatedCareersSegmentModel.SocLevelTwo = existingDocument.SocLevelTwo; var response = await relatedCareersSegmentService.UpsertAsync(relatedCareersSegmentModel).ConfigureAwait(false); logService.LogInformation($"{PutActionName} has upserted content for: {relatedCareersSegmentModel.CanonicalName}"); return(new StatusCodeResult((int)response)); }
public async Task PostSegmentEndpointsReturnCreated() { // Arrange var relatedCareersSegmentModel = new RelatedCareersSegmentModel() { DocumentId = Guid.NewGuid(), CanonicalName = Guid.NewGuid().ToString(), SocLevelTwo = "12PostSoc", Data = new RelatedCareerSegmentDataModel { LastReviewed = DateTime.UtcNow, RelatedCareers = new List <RelatedCareerDataModel> { new RelatedCareerDataModel { ProfileLink = "relatedJobName", Id = Guid.NewGuid(), Title = "relatedJobTitle", }, }, }, }; var client = factory.CreateClient(); client.DefaultRequestHeaders.Accept.Clear(); // Act var response = await client.PostAsync(SegmentUrl, relatedCareersSegmentModel, new JsonMediaTypeFormatter()).ConfigureAwait(false); // Assert response.EnsureSuccessStatusCode(); Assert.Equal(HttpStatusCode.Created, response.StatusCode); }
public async Task PostWhenUpdateExistingArticleReturnsAlreadyReported() { // Arrange var relatedCareersSegmentModel = new RelatedCareersSegmentModel() { DocumentId = DataSeeding.MainArticleGuid, CanonicalName = DataSeeding.Job1CanonicalName, SocLevelTwo = DataSeeding.MainJobSocLevelTwo, Data = new RelatedCareerSegmentDataModel { LastReviewed = DateTime.UtcNow, RelatedCareers = new List <RelatedCareerDataModel> { new RelatedCareerDataModel { ProfileLink = "relatedJobName", Id = Guid.NewGuid(), Title = "relatedJobTitle", }, }, }, }; var client = factory.CreateClient(); client.DefaultRequestHeaders.Accept.Clear(); // Act var response = await client.PostAsync(SegmentUrl, relatedCareersSegmentModel, new JsonMediaTypeFormatter()).ConfigureAwait(false); // Assert response.EnsureSuccessStatusCode(); Assert.Equal(HttpStatusCode.AlreadyReported, response.StatusCode); }
public async Task SegmentControllerGetBodyJsonReturnsSuccess(string mediaTypeName) { // Arrange var relatedCareersSegmentModel = new RelatedCareersSegmentModel { CanonicalName = "SomeCanonicalName" }; var fakeRelatedCareerApiModel = new List <RelatedCareerApiModel> { new RelatedCareerApiModel { Title = "SomeTitle1", Url = "someurl1", }, }; var controller = BuildSegmentController(mediaTypeName); A.CallTo(() => FakeRelatedCareersSegmentService.GetByIdAsync(A <Guid> .Ignored)).Returns(relatedCareersSegmentModel); A.CallTo(() => FakeMapper.Map <List <RelatedCareerApiModel> >(A <RelatedCareersSegmentModel> .Ignored)).Returns(fakeRelatedCareerApiModel); // Act var result = await controller.Body(documentId).ConfigureAwait(false); // Assert A.CallTo(() => FakeRelatedCareersSegmentService.GetByIdAsync(A <Guid> .Ignored)).MustHaveHappenedOnceExactly(); A.CallTo(() => FakeMapper.Map <List <RelatedCareerApiModel> >(A <RelatedCareersSegmentModel> .Ignored)).MustHaveHappenedOnceExactly(); var jsonResult = Assert.IsType <OkObjectResult>(result); Assert.IsAssignableFrom <List <RelatedCareerApiModel> >(jsonResult.Value); controller.Dispose(); }
private async Task <HttpStatusCode> UpsertAndRefreshSegmentModel(RelatedCareersSegmentModel 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(RelatedCareersSegmentModel relatedCareersSegmentModel) { if (relatedCareersSegmentModel == null) { throw new ArgumentNullException(nameof(relatedCareersSegmentModel)); } if (relatedCareersSegmentModel.Data == null) { relatedCareersSegmentModel.Data = new RelatedCareerSegmentDataModel(); } return(await UpsertAndRefreshSegmentModel(relatedCareersSegmentModel).ConfigureAwait(false)); }
public async Task SegmentControllerUpsertReturnsBadResultWhenModelIsInvalid(string mediaTypeName) { // Arrange var relatedCareersSegmentModel = new RelatedCareersSegmentModel(); var controller = BuildSegmentController(mediaTypeName); controller.ModelState.AddModelError(string.Empty, "Model is not valid"); // Act var result = await controller.Put(relatedCareersSegmentModel).ConfigureAwait(false); // Assert var statusResult = Assert.IsType <BadRequestObjectResult>(result); Assert.Equal((int)HttpStatusCode.BadRequest, statusResult.StatusCode); controller.Dispose(); }
public async Task <HttpStatusCode> PutAsync(RelatedCareersSegmentModel relatedCareersSegmentModel) { var url = new Uri($"{segmentClientOptions?.BaseAddress}segment"); ConfigureHttpClient(); using (var content = new ObjectContent(typeof(RelatedCareersSegmentModel), relatedCareersSegmentModel, new JsonMediaTypeFormatter(), MediaTypeNames.Application.Json)) { 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(RelatedCareersSegmentModel)}, Id: {relatedCareersSegmentModel?.DocumentId}"); response.EnsureSuccessStatusCode(); } return(response.StatusCode); } }
public async Task DeleteSegmentEndpointsReturnSuccessWhenFound() { // Arrange var documentId = Guid.NewGuid(); var deleteUri = new Uri($"{SegmentUrl}/{documentId}", UriKind.Relative); var relatedCareersSegmentModel = new RelatedCareersSegmentModel() { DocumentId = documentId, CanonicalName = documentId.ToString().ToLowerInvariant(), SocLevelTwo = "12345", Data = new RelatedCareerSegmentDataModel { LastReviewed = DateTime.UtcNow, RelatedCareers = new List <RelatedCareerDataModel> { new RelatedCareerDataModel { ProfileLink = "relatedJobName", Id = Guid.NewGuid(), Title = "relatedJobTitle", }, }, }, }; var client = factory.CreateClient(); client.DefaultRequestHeaders.Accept.Clear(); await client.PostAsync(SegmentUrl, relatedCareersSegmentModel, new JsonMediaTypeFormatter()).ConfigureAwait(false); // Act var response = await client.DeleteAsync(deleteUri).ConfigureAwait(false); // Assert Assert.Equal(HttpStatusCode.OK, response.StatusCode); }