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);
        }
Esempio n. 4
0
        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();
        }
Esempio n. 8
0
        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);
        }