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));
        }
Exemple #6
0
        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();
        }
Exemple #9
0
        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);
            }
        }
Exemple #11
0
        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);
        }
Exemple #12
0
        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);
        }