private List <ICard> MapCardsList(RootCardListDto cardListDto)
        {
            if (cardListDto == null)
            {
                throw new ArgumentNullException(nameof(cardListDto));
            }

            if (cardListDto.Cards == null)
            {
                return(new List <ICard>());
            }

            return(cardListDto.Cards
                   .Select(x => ModelMapper.MapCard(x))
                   .ToList());
        }
Example #2
0
        /// <summary>
        /// Maps a collection of card DTO objects to the card model.
        /// </summary>
        /// <param name="cardListDto">The list of cards DTO objects.</param>
        /// <returns>A list of card models.</returns>
        public static List <Card> MapCardsList(RootCardListDto cardListDto)
        {
            if (cardListDto == null)
            {
                throw new ArgumentNullException("cardListDto");
            }

            if (cardListDto.Cards == null)
            {
                return(null);
            }

            return(cardListDto.Cards
                   .Select(x => new Card(x))
                   .ToList());
        }
        public async Task AllAsync_Success()
        {
            // arrange
            const string CARD_NAME = "cardname1";

            _mockRateLimit.Setup(x => x.IsTurnedOn).Returns(false);

            _mockHeaderManager.Setup(x => x.Update(It.IsAny <IReadOnlyNameValueList <string> >()));
            _mockHeaderManager.Setup(x => x.Get <int>(ResponseHeader.TotalCount)).Returns(2000);
            _mockHeaderManager.Setup(x => x.Get <int>(ResponseHeader.PageSize)).Returns(1000);

            var cardDto = new CardDto()
            {
                Name = CARD_NAME
            };
            var rootCardList = new RootCardListDto()
            {
                Cards = new List <CardDto> {
                    cardDto
                },
            };

            _mockModelMapper.Setup(x => x.MapCard(It.IsAny <CardDto>())).Returns(new Card()
            {
                Name = CARD_NAME
            });

            using var httpTest = new HttpTest();
            httpTest.RespondWithJson(rootCardList);

            var service = new CardService(
                _mockHeaderManager.Object,
                _mockModelMapper.Object,
                ApiVersion.V1,
                _mockRateLimit.Object);

            // act
            var result = await service.AllAsync();

            // assert
            Assert.True(result.IsSuccess);
            _mockRepository.VerifyAll();
        }
        public async Task Reset_Success()
        {
            const string CARD_NAME = "cardname1";

            _mockRateLimit.Setup(x => x.IsTurnedOn).Returns(false);

            _mockHeaderManager.Setup(x => x.Update(It.IsAny <IReadOnlyNameValueList <string> >()));
            _mockHeaderManager.Setup(x => x.Get <int>(ResponseHeader.TotalCount)).Returns(2000);
            _mockHeaderManager.Setup(x => x.Get <int>(ResponseHeader.PageSize)).Returns(1000);

            var cardDto = new CardDto()
            {
                Name = CARD_NAME
            };
            var rootCardList = new RootCardListDto()
            {
                Cards = new List <CardDto> {
                    cardDto
                },
            };

            using var httpTest = new HttpTest();
            httpTest.RespondWithJson(rootCardList);

            _mockModelMapper.Setup(x => x.MapCard(It.IsAny <CardDto>())).Returns(new Card());

            var service = new CardService(
                _mockHeaderManager.Object,
                _mockModelMapper.Object,
                ApiVersion.V1,
                _mockRateLimit.Object);

            service.Where(x => x.Name, "test");

            // act
            service.Reset();

            // assert
            await service.AllAsync();

            httpTest.ShouldHaveCalled("https://api.magicthegathering.io/v1/cards");
        }
        public async Task Where_AddsIdParameter_Success()
        {
            const string MULTIPLE_IDS =
                "896a92b1-ed29-5daf-bf89-2502224f8f11|516dd7a4-fad8-5eed-bcdb-c05088762303";

            const string ID_PARAM = "id";

            _mockRateLimit.Setup(x => x.IsTurnedOn).Returns(false);

            _mockHeaderManager.Setup(x => x.Update(It.IsAny <IReadOnlyNameValueList <string> >()));
            _mockHeaderManager.Setup(x => x.Get <int>(ResponseHeader.TotalCount)).Returns(2000);
            _mockHeaderManager.Setup(x => x.Get <int>(ResponseHeader.PageSize)).Returns(1000);

            var rootCardList = new RootCardListDto()
            {
                Cards = new List <CardDto> {
                    new CardDto()
                },
            };

            using var httpTest = new HttpTest();
            httpTest.RespondWithJson(rootCardList);

            _mockModelMapper.Setup(x => x.MapCard(It.IsAny <CardDto>())).Returns(new Card());

            var service = new CardService(
                _mockHeaderManager.Object,
                _mockModelMapper.Object,
                ApiVersion.V1,
                _mockRateLimit.Object);

            // act
            await service
            .Where(x => x.Id, MULTIPLE_IDS)
            .AllAsync();

            // assert
            httpTest
            .ShouldHaveCalled("https://api.magicthegathering.io/v1/cards*")
            .WithQueryParams(ID_PARAM);
        }
        public async Task Where_AddsQueryParameters_Success()
        {
            const string NAME     = "name1";
            const string LANGUAGE = "English";

            _mockRateLimit.Setup(x => x.IsTurnedOn).Returns(false);

            _mockHeaderManager.Setup(x => x.Update(It.IsAny <IReadOnlyNameValueList <string> >()));
            _mockHeaderManager.Setup(x => x.Get <int>(ResponseHeader.TotalCount)).Returns(2000);
            _mockHeaderManager.Setup(x => x.Get <int>(ResponseHeader.PageSize)).Returns(1000);

            var rootCardList = new RootCardListDto()
            {
                Cards = new List <CardDto> {
                    new CardDto()
                },
            };

            using var httpTest = new HttpTest();
            httpTest.RespondWithJson(rootCardList);

            _mockModelMapper.Setup(x => x.MapCard(It.IsAny <CardDto>())).Returns(new Card());

            var service = new CardService(
                _mockHeaderManager.Object,
                _mockModelMapper.Object,
                ApiVersion.V1,
                _mockRateLimit.Object);

            // act
            service
            .Where(x => x.Name, NAME)
            .Where(x => x.Language, LANGUAGE);

            // assert
            await service.AllAsync();

            httpTest
            .ShouldHaveCalled("https://api.magicthegathering.io/v1/cards*")
            .WithQueryParams("name", "language");
        }
        public async Task Where_AddMultiverseIdParameter_Success()
        {
            const string MULTIPLE_MULTIS = "3|4";
            const string MULTI_PARAM     = "multiverseid";

            _mockRateLimit.Setup(x => x.IsTurnedOn).Returns(false);

            _mockHeaderManager.Setup(x => x.Update(It.IsAny <IReadOnlyNameValueList <string> >()));
            _mockHeaderManager.Setup(x => x.Get <int>(ResponseHeader.TotalCount)).Returns(2000);
            _mockHeaderManager.Setup(x => x.Get <int>(ResponseHeader.PageSize)).Returns(1000);

            var rootCardList = new RootCardListDto()
            {
                Cards = new List <CardDto> {
                    new CardDto()
                },
            };

            using var httpTest = new HttpTest();
            httpTest.RespondWithJson(rootCardList);

            _mockModelMapper.Setup(x => x.MapCard(It.IsAny <CardDto>())).Returns(new Card());

            var service = new CardService(
                _mockHeaderManager.Object,
                _mockModelMapper.Object,
                ApiVersion.V1,
                _mockRateLimit.Object);

            // act
            await service
            .Where(x => x.MultiverseId, MULTIPLE_MULTIS)
            .AllAsync();

            // assert
            httpTest
            .ShouldHaveCalled("https://api.magicthegathering.io/v1/cards*")
            .WithQueryParams(MULTI_PARAM);
        }
        public async Task GenerateBoosterAsync_Exception_ReturnsFailure()
        {
            // arrange
            const string CARD_NAME = "cardname1";

            _mockRateLimit.Setup(x => x.IsTurnedOn).Returns(false);

            _mockHeaderManager.Setup(x => x.Update(It.IsAny <IReadOnlyNameValueList <string> >()));

            var cardDto = new CardDto()
            {
                Name = CARD_NAME
            };
            var rootCardList = new RootCardListDto()
            {
                Cards = new List <CardDto> {
                    cardDto
                },
            };

            _mockModelMapper.Setup(x => x.MapCard(It.IsAny <CardDto>())).Throws(new Exception());

            using var httpTest = new HttpTest();
            httpTest.RespondWithJson(rootCardList);

            var service = new SetService(
                _mockHeaderManager.Object,
                _mockModelMapper.Object,
                ApiVersion.V1,
                _mockRateLimit.Object);

            // act
            var result = await service.GenerateBoosterAsync("12345");

            // assert
            Assert.False(result.IsSuccess);
            _mockRepository.VerifyAll();
        }