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 NextPageFromPage2_ShouldReturnSecondPageAsync()
        {
            // arrange
            var iterator = new TwitterPageIterator <ITwitterResult <long>, string>("cursor_for_page_2", _getNextPage, _extractNextCursor, _isLastPage);

            // 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_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);
        }
Beispiel #4
0
        public ITwitterPageIterator <ITwitterResult <IIdsCursorQueryResultDTO> > GetFollowerIdsIterator(IGetFollowerIdsParameters parameters, ITwitterRequest request)
        {
            var twitterCursorResult = new TwitterPageIterator <ITwitterResult <IIdsCursorQueryResultDTO> >(
                parameters.Cursor,
                cursor =>
            {
                var cursoredParameters = new GetFollowerIdsParameters(parameters)
                {
                    Cursor = cursor
                };

                return(_userQueryExecutor.GetFollowerIds(cursoredParameters, new TwitterRequest(request)));
            },
                page => page.DataTransferObject.NextCursorStr,
                page => page.DataTransferObject.NextCursorStr == "0");

            return(twitterCursorResult);
        }
Beispiel #5
0
        // Friend Ids
        public ITwitterPageIterator <ITwitterResult <IIdsCursorQueryResultDTO> > GetFriendIdsIterator(IGetFriendIdsParameters parameters, ITwitterRequest request)
        {
            var twitterCursorResult = new TwitterPageIterator <ITwitterResult <IIdsCursorQueryResultDTO> >(
                parameters.Cursor,
                cursor =>
            {
                var cursoredParameters = new GetFriendIdsParameters(parameters)
                {
                    Cursor = cursor
                };

                return(_userQueryExecutor.GetFriendIdsAsync(cursoredParameters, new TwitterRequest(request)));
            },
                page => page.Model.NextCursorStr,
                page => page.Model.NextCursorStr == "0");

            return(twitterCursorResult);
        }
Beispiel #6
0
        public ITwitterPageIterator <ITwitterResult <SearchTweetsV2Response>, string> GetSearchTweetsV2Iterator(ISearchTweetsV2Parameters parameters, ITwitterRequest request)
        {
            Func <string, Task <ITwitterResult <SearchTweetsV2Response> > > getNext = nextToken =>
            {
                var cursoredParameters = new SearchTweetsV2Parameters(parameters)
                {
                    NextToken = nextToken
                };

                return(_searchQueryExecutor.SearchTweetsAsync(cursoredParameters, new TwitterRequest(request)));
            };

            var twitterCursorResult = new TwitterPageIterator <ITwitterResult <SearchTweetsV2Response>, string>(
                parameters.NextToken,
                getNext,
                page =>
            {
                if (page.Model.Tweets.Length == 0)
                {
                    return(null);
                }

                return(page.Model.SearchMetadata.NextToken);
            },
                page =>
            {
                if (page.Model.Tweets.Length == 0)
                {
                    return(true);
                }

                return(page.Model.SearchMetadata.NextToken == null);
            });

            return(twitterCursorResult);
        }