public void WhenPageRangeRequested_ItsDataIsReturned(PageRangeDto pageRange, int expectedCardsCount) { var sut = new CardsInfoRetriever(); var maxPageProvider = Mock.Of <IMaxPageProvider>(provider => provider.GetMaxPage() == 3); var cardDetailsFetcher = Mock.Of <ICardDetailsFetcher>(fetcher => fetcher.GetCardDetails(1) == new List <CardInfoDto> { new CardInfoDto(), new CardInfoDto() } && fetcher.GetCardDetails(2) == new List <CardInfoDto> { new CardInfoDto() } && fetcher.GetCardDetails(3) == new List <CardInfoDto> { new CardInfoDto(), new CardInfoDto(), new CardInfoDto() }); Assert.AreEqual(expectedCardsCount, sut.GetCardsInfo(maxPageProvider, cardDetailsFetcher, pageRange).Count); }
public List <CardInfoDto> GetCardsInfo(IMaxPageProvider maxPageProvider, ICardDetailsFetcher cardDetailsFetcher, PageRangeDto pageRange) { if (maxPageProvider == null) { throw new ArgumentNullException(nameof(maxPageProvider)); } if (cardDetailsFetcher == null) { throw new ArgumentNullException(nameof(cardDetailsFetcher)); } if (pageRange == null) { throw new ArgumentNullException(nameof(pageRange)); } int actualMaxPage = maxPageProvider.GetMaxPage(); int minRange = pageRange.Min.HasValue && pageRange.Min.Value >= MinPage ? pageRange.Min.Value : MinPage; int maxRange = pageRange.Max.HasValue && pageRange.Max.Value <= actualMaxPage ? pageRange.Max.Value : actualMaxPage; var cards = new List <CardInfoDto>(); for (int pageNumber = minRange; pageNumber <= maxRange; pageNumber++) { cards.AddRange(cardDetailsFetcher.GetCardDetails(pageNumber)); } return(cards); }