public async Task <IActionResult> GetBanknote(Guid id, [FromQuery] string fields,
                                                      [FromHeader(Name = "Accept")] string mediaType)
        {
            if (!TypeHelper.TypeHasProperties <BanknoteDto>(fields))
            {
                return(BadRequest());
            }

            var retrievedBanknote = await _banknoteService.FindBanknoteById(id);

            if (retrievedBanknote == null)
            {
                return(NotFound());
            }

            var banknote       = _mapper.Map <BanknoteDto>(retrievedBanknote);
            var shapedBanknote = banknote.ShapeData(fields);

            if (mediaType == "application/json+hateoas")
            {
                if (!string.IsNullOrEmpty(fields) && !fields.ToLowerInvariant().Contains("id"))
                {
                    return(BadRequest("Field parameter 'id' is required"));
                }

                var links          = CreateBanknoteLinks(id, fields);
                var linkedResource = shapedBanknote as IDictionary <string, object>;

                linkedResource.Add("links", links);

                return(Ok(linkedResource));
            }
            else
            {
                return(Ok(shapedBanknote));
            }
        }
        public async Task FindBanknoteById_ReturnsBanknote_GivenValidBanknoteId()
        {
            //Arrange
            Guid id = new Guid("3da0c34f-dbfb-41a3-801f-97b7f4cdde89");

            //Act
            var result = await _banknoteService.FindBanknoteById(id);

            //Assert
            Assert.NotNull(result);
            Assert.Equal(id, result.Id);
            Assert.Equal("Pounds", result.Type);
        }