public async Task NextPageTwice_ReturnsSecondPageAsync()
        {
            // arrange
            var iterator = new TwitterPageIterator <ITwitterResult <long>, string>(null, _getNextPage, _extractNextCursor, _isLastPage);

            // 1st iteration
            await iterator.NextPageAsync();

            // act
            var result = await iterator.NextPageAsync();

            // assert
            Assert.Equal("cursor_for_page_3", result.NextCursor);
            Assert.Equal("cursor_for_page_3", iterator.NextCursor);

            Assert.True(result.IsLastPage);
            Assert.True(iterator.Completed);

            Assert.Same(result.Content, _secondPage);
        }
        public async Task NextPage_WhenAlreadyCompleted_ThrowsExceptionAsync()
        {
            // arrange
            A.CallTo(() => _isLastPage(_firstPage)).Returns(true);

            var iterator = new TwitterPageIterator <ITwitterResult <long>, string>(null, _getNextPage, _extractNextCursor, _isLastPage);

            // 1st iteration
            await iterator.NextPageAsync();

            // act - assert
            await Assert.ThrowsAsync <TwitterIteratorAlreadyCompletedException>(async() => await iterator.NextPageAsync());

            Assert.Equal("cursor_for_page_2", iterator.NextCursor);
            Assert.True(iterator.Completed);
        }
        public async Task NextPage_ReturnsPageFromLambdaAsync()
        {
            // arrange
            var iterator = new TwitterPageIterator <ITwitterResult <long>, string>(null, _getNextPage, _extractNextCursor, _isLastPage);

            // act
            var result = await iterator.NextPageAsync();

            // assert
            Assert.Equal("cursor_for_page_2", result.NextCursor);
            Assert.Equal("cursor_for_page_2", iterator.NextCursor);

            Assert.False(result.IsLastPage);
            Assert.False(iterator.Completed);

            Assert.Same(result.Content, _firstPage);
        }