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); }
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)); }
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); }
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); }
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); }