public async Task GetNewStories_Allcached_ReturnsStoriesFromCache()
        {
            var cachedIds = new List <int> {
                3
            };
            var result = await _storyProvider.GetNewStories(cachedIds);

            Assert.That(result, Is.Not.Null);
            Assert.That(result, Has.Exactly(1).Items);
            _mockStoryService.Verify(x => x.GetItems(It.IsAny <IEnumerable <int> >()), Times.Never);
        }
        public async Task <IActionResult> NewStories([FromQuery] ApiQueryModel query)
        {
            var newStoryIds = await _storyProvider.GetNewStoryIds();

            if (newStoryIds == null)
            {
                return(BadRequest("Error loading new story list"));
            }

            var pageOffset = (query.Page - 1) * query.PageSize;

            if (pageOffset >= newStoryIds.Count())
            {
                return(BadRequest("Invalid requested range"));
            }

            var pageList = newStoryIds.Skip(pageOffset).Take(query.PageSize);
            var stories  = await _storyProvider.GetNewStories(pageList);

            if (stories == null)
            {
                return(BadRequest("Error pulling new stories"));
            }

            var paginatedResult = pageList.Select(id => stories.GetValueOrDefault(id));
            var currentPage     = query.Page;
            var lastPage        = (int)Math.Ceiling((double)newStoryIds.Count() / query.PageSize);

            var result = new ApiPagedList <Item>(
                paginatedResult,
                currentPage,
                lastPage
                );

            return(Ok(result));
        }