public async Task <IActionResult> CreateBanknote([FromBody] BanknoteCreationDto banknote,
                                                         [FromHeader(Name = "Accept")] string mediaType)
        {
            if (banknote == null)
            {
                return(BadRequest());
            }

            if (!ModelState.IsValid)
            {
                return(new UnprocessableEntityObjectResult(ModelState));
            }

            if (!await _countryService.CountryExists(banknote.CountryId))
            {
                return(BadRequest());
            }

            var newBanknote = _mapper.Map <Banknote>(banknote);

            var existingCollectorValue = await _collectorValueService.FindCollectorValueByValues(newBanknote.CollectorValue);

            newBanknote.CollectorValueId = existingCollectorValue == null?Guid.NewGuid() : existingCollectorValue.Id;

            await _banknoteService.CreateBanknote(newBanknote);

            if (!await _banknoteService.Save())
            {
                throw new Exception("Creating a banknote failed on save.");
            }

            var returnedBanknote = _mapper.Map <BanknoteDto>(newBanknote);

            if (mediaType == "application/json+hateoas")
            {
                var links          = CreateBanknoteLinks(returnedBanknote.Id, null);
                var linkedResource = returnedBanknote.ShapeData(null) as IDictionary <string, object>;

                linkedResource.Add("links", links);

                return(CreatedAtRoute("GetBanknote",
                                      new { id = returnedBanknote.Id },
                                      linkedResource));
            }
            else
            {
                return(CreatedAtRoute("GetBanknote",
                                      new { id = returnedBanknote.Id },
                                      returnedBanknote));
            }
        }
        public async Task CreateBanknote_CreatesNewBanknote()
        {
            //Arrange
            Guid     id          = new Guid("86dbe5cf-df75-41a5-af56-6e2f2de181a4");
            Banknote newBanknote = new Banknote
            {
                Id               = id,
                Type             = "Euros",
                CountryId        = new Guid("1b38bfce-567c-4d49-9dd2-e0fbef480367"),
                CollectorValueId = new Guid("5e9cb33b-b12c-4e20-8113-d8e002aeb38d")
            };

            //Act
            await _banknoteService.CreateBanknote(newBanknote);

            await _unitOfWork.Save();

            //Assert
            Assert.Equal(7, (await _banknoteService.FindBanknotes(resourceParameters)).Count());
            Assert.Equal("Euros", (await _banknoteService.FindBanknoteById(id)).Type);
        }