public async Task <IActionResult> CreateCoin([FromBody] CoinCreationDto coin, [FromHeader(Name = "Accept")] string mediaType) { if (coin == null) { return(BadRequest()); } if ((coin.Note == coin.Subject) && (coin.Note != null || coin.Subject != null)) { ModelState.AddModelError(nameof(CoinCreationDto), "The provided note should be different from the coin's subject"); } if (!ModelState.IsValid) { return(new UnprocessableEntityObjectResult(ModelState)); } if (!await _countryService.CountryExists(coin.CountryId)) { return(BadRequest()); } var newCoin = _mapper.Map <Coin>(coin); var existingCollectorValue = await _collectorValueService.FindCollectorValueByValues(newCoin.CollectorValue); newCoin.CollectorValueId = existingCollectorValue == null?Guid.NewGuid() : existingCollectorValue.Id; await _coinService.CreateCoin(newCoin); if (!await _coinService.Save()) { throw new Exception("Creating a coin failed on save."); } var returnedCoin = _mapper.Map <CoinDto>(newCoin); if (mediaType == "application/json+hateoas") { var links = CreateCoinLinks(returnedCoin.Id, null); var linkedResource = returnedCoin.ShapeData(null) as IDictionary <string, object>; linkedResource.Add("links", links); return(CreatedAtRoute("GetCoin", new { id = returnedCoin.Id }, linkedResource)); } else { return(CreatedAtRoute("GetCoin", new { id = returnedCoin.Id }, returnedCoin)); } }
public async Task CreateCoin_CreatesNewCoin() { //Arrange Guid id = new Guid("60e55387-ee18-4e5c-866f-7ca1d2d09c0f"); Coin newCoin = new Coin { Id = id, Type = "Cent", CountryId = new Guid("c8f2031e-c780-4d27-bf13-1ee48a7207a3"), CollectorValueId = new Guid("2c716f5b-6792-4753-9f1a-fa8bcd4eabfb") }; //Act await _coinService.CreateCoin(newCoin); await _unitOfWork.Save(); //Assert Assert.Equal(7, (await _coinService.FindCoins(resourceParameters)).Count()); Assert.Equal("Cent", (await _coinService.FindCoinById(id)).Type); }