public async Task SuccessfulRequestReturnsCreatedResult() { var locationDetailsRequestModel = CreateValidLocationDetailsRequestModel(); var formByteArray = ToByteArray(locationDetailsRequestModel); _httpRequest.Setup(x => x.Body).Returns(new MemoryStream(formByteArray)); var addResult = new WriteRequestResult { Status = WriteRequestStatus.Success, ItemId = Guid.NewGuid() }; _locationDetailsService.Setup(x => x.Add(It.IsAny <LocationDetailsDto>())).Returns(Task.FromResult(addResult)); _mapper.Setup(x => x.Map <LocationDetailsDto>(It.IsAny <LocationDetailsRequestModel>())) .Returns((LocationDetailsRequestModel source) => { return(new LocationDetailsDto() { GameOverviewList = new Dictionary <string, int>() }); }); Environment.SetEnvironmentVariable("ReadBaseUrl", "testConfigValue"); var expected = new CreatedResult("", new { }); var actual = await _sut.Run(_httpRequest.Object, _log.Object); Assert.Equal(expected.GetType(), actual.GetType()); Environment.SetEnvironmentVariable("ReadBaseUrl", null); }
public async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req, ILogger log) { try { ValidatableRequestModel <LocationDetailsRequestModel> addLocationRequest = await req.GetJsonBody <LocationDetailsRequestModel, LocationDetailsRequestModelValidator>(); if (!addLocationRequest.IsValid) { return(addLocationRequest.ToBadRequest()); } WriteRequestResult result = await _locationDetailsService.Add(CreateLocationDto(addLocationRequest.Value)); switch (result.Status) { case WriteRequestStatus.Success: return(new CreatedResult(GetResourceLocation(result.ItemId, log), new { Id = result.ItemId })); case WriteRequestStatus.Duplicate: return(new AcceptedResult(GetResourceLocation(result.ItemId, log), new { Id = result.ItemId })); default: return(new StatusCodeResult(StatusCodes.Status500InternalServerError)); } } catch (Exception ex) { log.LogError($"AddLocation had an unexpexpected error: {ex.Message}"); return(new StatusCodeResult(StatusCodes.Status500InternalServerError)); } }