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

            var retrievedCoin = await _coinService.FindCoinById(id);

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

            var coin       = _mapper.Map <CoinDto>(retrievedCoin);
            var shapedCoin = coin.ShapeData(fields);

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

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

                linkedResource.Add("links", links);

                return(Ok(linkedResource));
            }
            else
            {
                return(Ok(shapedCoin));
            }
        }
예제 #2
0
        public async Task FindCoinById_ReturnsCoin_GivenValidCoinId()
        {
            //Arrange
            Guid id = new Guid("3a7fd6a5-d654-4647-8374-eba27001b0d3");

            //Act
            var result = await _coinService.FindCoinById(id);

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