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));
            }
        }
Exemple #2
0
        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);
        }