public async Task <IActionResult> Post([FromBody] HowToBecomeSegmentModel upsertHowToBecomeSegmentModel)
        {
            logService.LogInformation($"{PostActionName} has been called");

            if (upsertHowToBecomeSegmentModel == null)
            {
                return(BadRequest());
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var existingDocument = await howToBecomeSegmentService.GetByIdAsync(upsertHowToBecomeSegmentModel.DocumentId).ConfigureAwait(false);

            if (existingDocument != null)
            {
                return(new StatusCodeResult((int)HttpStatusCode.AlreadyReported));
            }

            var response = await howToBecomeSegmentService.UpsertAsync(upsertHowToBecomeSegmentModel)
                           .ConfigureAwait(false);

            logService.LogInformation($"{PostActionName} has upserted content for: {upsertHowToBecomeSegmentModel.CanonicalName}");

            return(new StatusCodeResult((int)response));
        }
        public async Task <IActionResult> Put([FromBody] HowToBecomeSegmentModel upsertHowToBecomeSegmentModel)
        {
            logService.LogInformation($"{PutActionName} has been called");

            if (upsertHowToBecomeSegmentModel == null)
            {
                return(BadRequest());
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var existingDocument = await howToBecomeSegmentService.GetByIdAsync(upsertHowToBecomeSegmentModel.DocumentId).ConfigureAwait(false);

            if (existingDocument == null)
            {
                return(new StatusCodeResult((int)HttpStatusCode.NotFound));
            }

            if (upsertHowToBecomeSegmentModel.SequenceNumber <= existingDocument.SequenceNumber)
            {
                return(new StatusCodeResult((int)HttpStatusCode.AlreadyReported));
            }

            upsertHowToBecomeSegmentModel.Etag        = existingDocument.Etag;
            upsertHowToBecomeSegmentModel.SocLevelTwo = existingDocument.SocLevelTwo;

            var response = await howToBecomeSegmentService.UpsertAsync(upsertHowToBecomeSegmentModel).ConfigureAwait(false);

            return(new StatusCodeResult((int)response));
        }
Beispiel #3
0
        public async Task DeleteSegmentEndpointsReturnSuccessWhenFound()
        {
            // Arrange
            var documentId = Guid.NewGuid();

            var deleteUri = new Uri($"{SegmentUrl}/{documentId}", UriKind.Relative);

            var howToBecomeSegmentModel = new HowToBecomeSegmentModel
            {
                DocumentId    = documentId,
                CanonicalName = documentId.ToString().ToLowerInvariant(),
                SocLevelTwo   = "12345",
                Data          = new HowToBecomeSegmentDataModel {
                    LastReviewed = DateTime.UtcNow
                },
            };

            var client = factory.CreateClient();

            client.DefaultRequestHeaders.Accept.Clear();

            await client.PostAsync(SegmentUrl, howToBecomeSegmentModel, new JsonMediaTypeFormatter())
            .ConfigureAwait(false);

            // Act
            var response = await client.DeleteAsync(deleteUri).ConfigureAwait(false);

            // Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
Beispiel #4
0
        public async Task SegmentControllerGetBodyJsonReturnsSuccess(string mediaTypeName)
        {
            // Arrange
            var howToBecomeSegmentModel = new HowToBecomeSegmentModel {
                CanonicalName = "SomeCanonicalName"
            };
            var fakeHowToBecomeApiModel = A.Dummy <HowToBecomeApiModel>();

            var controller = BuildSegmentController(mediaTypeName);

            A.CallTo(() => FakeHowToBecomeSegmentService.GetByIdAsync(A <Guid> .Ignored)).Returns(howToBecomeSegmentModel);
            A.CallTo(() => FakeMapper.Map <HowToBecomeApiModel>(A <HowToBecomeSegmentDataModel> .Ignored)).Returns(fakeHowToBecomeApiModel);

            // Act
            var result = await controller.Body(documentId).ConfigureAwait(false);

            // Assert
            A.CallTo(() => FakeHowToBecomeSegmentService.GetByIdAsync(A <Guid> .Ignored)).MustHaveHappenedOnceExactly();
            A.CallTo(() => FakeMapper.Map <HowToBecomeApiModel>(A <HowToBecomeSegmentDataModel> .Ignored)).MustHaveHappenedOnceExactly();

            var jsonResult = Assert.IsType <OkObjectResult>(result);

            Assert.IsAssignableFrom <HowToBecomeApiModel>(jsonResult.Value);

            controller.Dispose();
        }
Beispiel #5
0
        public async Task PutSegmentEndpointsReturnOk()
        {
            // Arrange
            var howToBecomeSegmentModel = new HowToBecomeSegmentModel
            {
                DocumentId    = Guid.NewGuid(),
                CanonicalName = Guid.NewGuid().ToString(),
                SocLevelTwo   = "11PutSoc",
                Data          = GetDefaultHowToBecomeSegmentDataModel(nameof(PutSegmentEndpointsReturnOk)),
            };
            var client = factory.CreateClient();

            client.DefaultRequestHeaders.Accept.Clear();

            await client.PostAsync(SegmentUrl, howToBecomeSegmentModel, new JsonMediaTypeFormatter())
            .ConfigureAwait(false);

            // Act
            howToBecomeSegmentModel.SequenceNumber++;
            var response = await client.PutAsync(SegmentUrl, howToBecomeSegmentModel, new JsonMediaTypeFormatter())
                           .ConfigureAwait(false);

            // Assert
            response.EnsureSuccessStatusCode();
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
        }
 public static CommonRoutes GetExistingCommonRoute(this HowToBecomeSegmentModel existingSegmentModel, RouteName routeName)
 {
     return(existingSegmentModel
            ?.Data
            ?.EntryRoutes
            ?.CommonRoutes
            .FirstOrDefault(e => e.RouteName == routeName));
 }
Beispiel #7
0
        private async Task <HttpStatusCode> SendMessageData(HowToBecomeSegmentModel fullModel)
        {
            var result = await httpClientService.PutFullJobProfileAsync(fullModel).ConfigureAwait(false);

            if (result == HttpStatusCode.NotFound)
            {
                return(await httpClientService.PostFullJobProfileAsync(fullModel).ConfigureAwait(false));
            }

            return(result);
        }
Beispiel #8
0
        private async Task <HttpStatusCode> UpsertAndRefreshSegmentModel(HowToBecomeSegmentModel 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);
        }
Beispiel #9
0
        public async Task <HttpStatusCode> UpsertAsync(HowToBecomeSegmentModel howToBecomeSegmentModel)
        {
            if (howToBecomeSegmentModel == null)
            {
                throw new ArgumentNullException(nameof(howToBecomeSegmentModel));
            }

            if (howToBecomeSegmentModel.Data == null)
            {
                howToBecomeSegmentModel.Data = new HowToBecomeSegmentDataModel();
            }

            return(await UpsertAndRefreshSegmentModel(howToBecomeSegmentModel).ConfigureAwait(false));
        }
        public async Task HowToBecomeSegmentServicePatchRegistrationReturnsNotFoundWhenDocumentNotExists()
        {
            // arrange
            var patchModel = A.Fake <PatchRegistrationModel>();
            var documentId = Guid.NewGuid();
            HowToBecomeSegmentModel existingSegmentModel = null;
            var expectedResult = HttpStatusCode.NotFound;

            A.CallTo(() => repository.GetAsync(A <Expression <Func <HowToBecomeSegmentModel, bool> > > .Ignored)).Returns(existingSegmentModel);

            // act
            var result = await howToBecomeSegmentService.PatchRegistrationAsync(patchModel, documentId).ConfigureAwait(false);

            // assert
            A.CallTo(() => repository.GetAsync(A <Expression <Func <HowToBecomeSegmentModel, bool> > > .Ignored)).MustHaveHappenedOnceExactly();
            Assert.Equal(expectedResult, result);
        }
Beispiel #11
0
        public async Task SeedDefaultArticle(CustomWebApplicationFactory <Startup> factory)
        {
            const string url = "/segment";

            var model = new HowToBecomeSegmentModel
            {
                DocumentId    = MainArticleGuid,
                CanonicalName = Job1CanonicalName,
                SocLevelTwo   = MainJobSocLevelTwo,
                Data          = GetDefaultHowToBecomeSegmentDataModel(),
            };

            var client = factory?.CreateClient();

            client?.DefaultRequestHeaders.Accept.Clear();

            await client.PostAsync(url, model, new JsonMediaTypeFormatter()).ConfigureAwait(false);
        }
        public async Task <HttpStatusCode> PutFullJobProfileAsync(HowToBecomeSegmentModel howToBecomeSegmentModel)
        {
            var url = new Uri($"{segmentClientOptions?.BaseAddress}segment");

            ConfigureHttpClient();

            using (var content = new ObjectContent(typeof(HowToBecomeSegmentModel), howToBecomeSegmentModel, 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(HowToBecomeSegmentModel)}, Id: {howToBecomeSegmentModel?.DocumentId}");
                    response.EnsureSuccessStatusCode();
                }

                return(response.StatusCode);
            }
        }
Beispiel #13
0
        public async Task PostSegmentEndpointsForDefaultArticleRefreshAllReturnOk()
        {
            // Arrange
            var howToBecomeSegmentModel = new HowToBecomeSegmentModel
            {
                DocumentId    = DataSeeding.MainArticleGuid,
                CanonicalName = DataSeeding.Job1CanonicalName,
                SocLevelTwo   = DataSeeding.MainJobSocLevelTwo,
                Data          = GetDefaultHowToBecomeSegmentDataModel(nameof(PostSegmentEndpointsForDefaultArticleRefreshAllReturnOk)),
            };

            var client = factory.CreateClient();

            client.DefaultRequestHeaders.Accept.Clear();

            // Act
            var response = await client.PostAsync(SegmentUrl, howToBecomeSegmentModel, new JsonMediaTypeFormatter()).ConfigureAwait(false);

            // Assert
            Assert.True(response.IsSuccessStatusCode);
        }