public ISearchUsersParameters CloneUserSearchParameters(ISearchUsersParameters searchUsersParameters) { var clone = new SearchUsersParameters(searchUsersParameters.SearchQuery) { IncludeEntities = searchUsersParameters.IncludeEntities, Page = searchUsersParameters.Page, MaximumNumberOfResults = searchUsersParameters.MaximumNumberOfResults }; return(clone); }
public void SearchUsers_ReturnsExpectedQuery() { // arrange var parameters = new SearchUsersParameters("plop") { Page = 42, PageSize = 50, IncludeEntities = true, CustomQueryParameters = { new Tuple <string, string>("hello", "world") } }; // act var url = _searchQueryGenerator.GetSearchUsersQuery(parameters); // assert Assert.Equal(url, "https://api.twitter.com/1.1/users/search.json?q=plop&page=42&count=50&include_entities=true&hello=world"); }
public ITwitterPageIterator <IFilteredTwitterResult <UserDTO[]>, int?> GetSearchUsersIterator(ISearchUsersParameters parameters, ITwitterRequest request) { var pageNumber = parameters.Page ?? 1; var previousResultIds = new HashSet <long>(); return(new TwitterPageIterator <IFilteredTwitterResult <UserDTO[]>, int?>( parameters.Page, async cursor => { var cursoredParameters = new SearchUsersParameters(parameters) { Page = cursor }; var page = await _searchQueryExecutor.SearchUsersAsync(cursoredParameters, new TwitterRequest(request)).ConfigureAwait(false); return new FilteredTwitterResult <UserDTO[]>(page) { FilteredDTO = page.Model.Where(x => !previousResultIds.Contains(x.Id)).ToArray() }; }, page => { if (page.Model.Length == 0) { return null; } return ++pageNumber; }, page => { var requestUserIds = page.Model.Select(x => x.Id).ToArray(); var newItemIds = requestUserIds.Except(previousResultIds).ToArray(); foreach (var newItemId in newItemIds) { previousResultIds.Add(newItemId); } return newItemIds.Length == 0 || page.Model.Length == 0; })); }