Exemple #1
0
        public async Task<IActionResult> PostNewPerson([FromBody] CreatePersonRequestObject personRequestObject)
        {
            var token = _tokenFactory.Create(_contextWrapper.GetContextRequestHeaders(HttpContext));

            var person = await _newPersonUseCase.ExecuteAsync(personRequestObject, token)
                .ConfigureAwait(false);

            return Created(new Uri($"api/v1/persons/{person.Id}", UriKind.Relative), person);
        }
Exemple #2
0
        public async Task <PersonResponseObject> ExecuteAsync(CreatePersonRequestObject personRequestObject, Token token)
        {
            var person = await _gateway.PostNewPersonAsync(personRequestObject).ConfigureAwait(false);

            var personSnsMessage = _snsFactory.Create(person, token);
            var topicArn         = Environment.GetEnvironmentVariable("PERSON_SNS_ARN");
            await _snsGateway.Publish(personSnsMessage, topicArn).ConfigureAwait(false);

            return(_responseFactory.ToResponse(person));
        }
Exemple #3
0
        public async Task <Person> PostNewPersonAsync(CreatePersonRequestObject requestObject)
        {
            _logger.LogDebug($"Calling IDynamoDBContext.SaveAsync");
            var personDbEntity = requestObject.ToDatabase();

            personDbEntity.LastModified = DateTime.UtcNow;
            await _dynamoDbContext.SaveAsync(personDbEntity).ConfigureAwait(false);

            return(personDbEntity.ToDomain());
        }
        /// <summary>
        /// You can use jwt.io to decode the token - it is the same one we'd use on dev, etc.
        /// </summary>
        /// <param name="requestObject"></param>
        /// <returns></returns>
        public async Task WhenTheCreatePersonApiIsCalled(CreatePersonRequestObject requestObject)
        {
            var token =
                "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMTUwMTgxMTYwOTIwOTg2NzYxMTMiLCJlbWFpbCI6ImUyZS10ZXN0aW5nQGRldmVsb3BtZW50LmNvbSIsImlzcyI6IkhhY2tuZXkiLCJuYW1lIjoiVGVzdGVyIiwiZ3JvdXBzIjpbImUyZS10ZXN0aW5nIl0sImlhdCI6MTYyMzA1ODIzMn0.SooWAr-NUZLwW8brgiGpi2jZdWjyZBwp4GJikn0PvEw";
            var uri = new Uri($"api/v1/persons", UriKind.Relative);

            var message = new HttpRequestMessage(HttpMethod.Post, uri);

            message.Content = new StringContent(JsonConvert.SerializeObject(requestObject), Encoding.UTF8, "application/json");
            message.Method  = HttpMethod.Post;
            message.Headers.Add("Authorization", token);

            _httpClient.DefaultRequestHeaders
            .Accept
            .Add(new MediaTypeWithQualityHeaderValue("application/json"));

            _lastResponse = await _httpClient.SendAsync(message).ConfigureAwait(false);
        }
Exemple #5
0
        public void CreatePersonByIdAsyncExceptionIsThrown()
        {
            // Arrange
            var personRequest = new CreatePersonRequestObject();
            var token         = new Token();
            var exception     = new ApplicationException("Test exception");

            _mockGateway.Setup(x => x.PostNewPersonAsync(personRequest)).ThrowsAsync(exception);

            // Act
            Func <Task <PersonResponseObject> > func = async() => await _classUnderTest.ExecuteAsync(personRequest, token).ConfigureAwait(false);

            // Assert
            func.Should().Throw <ApplicationException>().WithMessage(exception.Message);

            _mockSnsFactory.Verify(x => x.Create(It.IsAny <Person>(), It.IsAny <Token>()), Times.Never);
            _mockSnsGateway.Verify(x => x.Publish(It.IsAny <PersonSns>(), It.IsAny <string>(), It.IsAny <string>()), Times.Never);
        }
Exemple #6
0
        public async Task CreatePersonByIdAsyncFoundReturnsResponse()
        {
            // Arrange
            var personRequest = new CreatePersonRequestObject();
            var token         = new Token();

            var person = _fixture.Create <Person>();

            _mockGateway.Setup(x => x.PostNewPersonAsync(personRequest)).ReturnsAsync(person);

            // Act
            var response = await _classUnderTest.ExecuteAsync(personRequest, token)
                           .ConfigureAwait(false);

            // Assert
            response.Should().BeEquivalentTo(_responseFactory.ToResponse(person));

            _mockSnsFactory.Verify(x => x.Create(person, token), Times.Once);
            _mockSnsGateway.Verify(x => x.Publish(It.IsAny <PersonSns>(), It.IsAny <string>(), It.IsAny <string>()), Times.Once);
        }