public void ProcessResults_WithErrors_PopulatesErrorList() { var twitterUserProc = new TwitterUserRequestProcessor <TwitterUserQuery> { BaseUrl = "https://api.twitter.com/1.1/search/" }; List <TwitterUserQuery> results = twitterUserProc.ProcessResults(ErrorTweet); Assert.IsNotNull(results); TwitterUserQuery twitterUserQuery = results.SingleOrDefault(); Assert.IsNotNull(twitterUserQuery); List <TwitterError> errors = twitterUserQuery.Errors; Assert.IsNotNull(errors); Assert.AreEqual(1, errors.Count); TwitterError error = errors.FirstOrDefault(); Assert.IsNotNull(error); Assert.AreEqual("Could not find tweet with ids: [1].", error.Detail); Assert.AreEqual("Not Found Error", error.Title); Assert.AreEqual("tweet", error.ResourceType); Assert.AreEqual("ids", error.Parameter); Assert.AreEqual("1", error.Value); Assert.AreEqual("https://api.twitter.com/2/problems/resource-not-found", error.Type); }
public void BuildUrl_WithUsernames_IncludesParameters() { const string ExpectedUrl = BaseUrl2 + "users/by?" + "usernames=joemayo%2Clinq2twitr&" + "expansions=attachments.poll_ids%2Cauthor_id&" + "tweet.fields=author_id%2Ccreated_at&" + "user.fields=created_at%2Cverified"; var twitterUserReqProc = new TwitterUserRequestProcessor <TwitterUserQuery> { BaseUrl = BaseUrl2 }; var parameters = new Dictionary <string, string> { { nameof(TwitterUserQuery.Type), UserType.UsernameLookup.ToString() }, { nameof(TwitterUserQuery.Usernames), "joemayo,linq2twitr" }, { nameof(TwitterUserQuery.Expansions), "attachments.poll_ids,author_id" }, { nameof(TwitterUserQuery.TweetFields), "author_id,created_at" }, { nameof(TwitterUserQuery.UserFields), "created_at,verified" }, }; Request req = twitterUserReqProc.BuildUrl(parameters); Assert.AreEqual(ExpectedUrl, req.FullUrl); }
public void BuildUrl_WithSpacesInFields_FixesSpaces() { const string ExpectedUrl = BaseUrl2 + "users?" + "ids=2%2C3&" + "expansions=attachments.poll_ids%2Cauthor_id&" + "tweet.fields=author_id%2Ccreated_at&" + "user.fields=created_at%2Cverified"; var twitterUserReqProc = new TwitterUserRequestProcessor <TwitterUserQuery> { BaseUrl = BaseUrl2 }; var parameters = new Dictionary <string, string> { { nameof(TwitterUserQuery.Type), UserType.IdLookup.ToString() }, { nameof(TwitterUserQuery.Ids), "2, 3" }, { nameof(TwitterUserQuery.Expansions), "attachments.poll_ids, author_id" }, { nameof(TwitterUserQuery.TweetFields), "author_id, created_at" }, { nameof(TwitterUserQuery.UserFields), "created_at, verified" }, }; Request req = twitterUserReqProc.BuildUrl(parameters); Assert.AreEqual(ExpectedUrl, req.FullUrl); }
public void ProcessResults_Populates_Input_Parameters() { var twitterUserReqProc = new TwitterUserRequestProcessor <TwitterUserQuery>() { BaseUrl = BaseUrl2, Type = UserType.IdLookup, Ids = "3,7", Usernames = "9,0", Expansions = "123", TweetFields = "678", UserFields = "234" }; var results = twitterUserReqProc.ProcessResults(UsersJson); Assert.IsNotNull(results); Assert.AreEqual(1, results.Count); var twitterUserQuery = results.Single(); Assert.IsNotNull(twitterUserQuery); Assert.AreEqual(UserType.IdLookup, twitterUserQuery.Type); Assert.AreEqual("3,7", twitterUserQuery.Ids); Assert.AreEqual("9,0", twitterUserQuery.Usernames); Assert.AreEqual("123", twitterUserQuery.Expansions); Assert.AreEqual("678", twitterUserQuery.TweetFields); Assert.AreEqual("234", twitterUserQuery.UserFields); }
public void ProcessResults_Populates_PublicMetrics() { var twitterUserReqProc = new TwitterUserRequestProcessor <TwitterUserQuery> { BaseUrl = BaseUrl2 }; List <TwitterUserQuery> results = twitterUserReqProc.ProcessResults(UsersJson); Assert.IsNotNull(results); TwitterUserQuery twitterUserQuery = results.SingleOrDefault(); Assert.IsNotNull(twitterUserQuery); List <TwitterUser> users = twitterUserQuery.Users; Assert.IsNotNull(users); Assert.AreEqual(2, users.Count); TwitterUser user = users.FirstOrDefault(); Assert.IsNotNull(user); TwitterUserPublicMetrics metrics = user.PublicMetrics; Assert.IsNotNull(metrics); Assert.AreEqual(10024, metrics.FollowersCount); Assert.AreEqual(3539, metrics.FollowingCount); Assert.AreEqual(270, metrics.ListedCount); Assert.AreEqual(3800, metrics.TweetCount); }
public void ProcessResults_Populates_Users() { var twitterUserProc = new TwitterUserRequestProcessor <TwitterUserQuery> { BaseUrl = BaseUrl2 }; List <TwitterUserQuery> results = twitterUserProc.ProcessResults(UsersJson); Assert.IsNotNull(results); TwitterUserQuery twitterUserQuery = results.SingleOrDefault(); Assert.IsNotNull(twitterUserQuery); List <TwitterUser> users = twitterUserQuery.Users; Assert.IsNotNull(users); Assert.AreEqual(2, users.Count); TwitterUser user = users.FirstOrDefault(); Assert.IsNotNull(user); Assert.AreEqual(DateTime.Parse("2008-07-13").Date, user.CreatedAt.Date); Assert.AreEqual("Author, Instructor, and Independent Consultant. Author of Programming the Microsoft Bot Framework/MS Press.\n#ai #chatbots #csharp #linq2twitter #twitterapi", user.Description); Assert.AreEqual("15411837", user.ID); Assert.AreEqual("Las Vegas, NV", user.Location); Assert.AreEqual("Joe Mayo", user.Name); Assert.AreEqual("1258043891434962945", user.PinnedTweetId); Assert.AreEqual("https://pbs.twimg.com/profile_images/1185764990403268613/8GoXoOtz_normal.jpg", user.ProfileImageUrl); Assert.IsTrue(user.Protected); Assert.AreEqual("https://t.co/Y6dXyWxanS", user.Url); Assert.AreEqual("JoeMayo", user.Username); Assert.IsTrue(user.Verified); }
public void BuildUrl_ForFollowers_IncludesParameters() { const string ExpectedUrl = BaseUrl2 + "users/123/followers?" + "max_results=50&" + "pagination_token=456&" + "expansions=attachments.poll_ids%2Cauthor_id&" + "tweet.fields=author_id%2Ccreated_at&" + "user.fields=created_at%2Cverified"; var twitterUserReqProc = new TwitterUserRequestProcessor <TwitterUserQuery> { BaseUrl = BaseUrl2 }; var parameters = new Dictionary <string, string> { { nameof(TwitterUserQuery.Type), UserType.Followers.ToString() }, { nameof(TwitterUserQuery.ID), "123" }, { nameof(TwitterUserQuery.Expansions), "attachments.poll_ids,author_id" }, { nameof(TwitterUserQuery.MaxResults), "50" }, { nameof(TwitterUserQuery.PaginationToken), "456" }, { nameof(TwitterUserQuery.TweetFields), "author_id,created_at" }, { nameof(TwitterUserQuery.UserFields), "created_at,verified" }, }; Request req = twitterUserReqProc.BuildUrl(parameters); Assert.AreEqual(ExpectedUrl, req.FullUrl); }
public void BuildUrl_WithNoParameters_Fails() { var twitterUserReqProc = new TwitterUserRequestProcessor <TwitterUserQuery> { BaseUrl = BaseUrl2 }; L2TAssert.Throws <NullReferenceException>(() => { twitterUserReqProc.BuildUrl(null); }); }
public void GetParametersTest() { var target = new TwitterUserRequestProcessor <TwitterUserQuery>(); Expression <Func <TwitterUserQuery, bool> > expression = tweet => tweet.Type == UserType.IdLookup && tweet.ID == "456" && tweet.Ids == "2,3" && tweet.Usernames == "joemayo,linq2twitr" && tweet.MaxResults == 50 && tweet.PaginationToken == "123" && tweet.Expansions == "attachments.poll_ids,author_id" && tweet.TweetFields == "author_id,created_at" && tweet.UserFields == "created_at,verified"; var lambdaExpression = expression as LambdaExpression; Dictionary <string, string> queryParams = target.GetParameters(lambdaExpression); Assert.IsTrue( queryParams.Contains( new KeyValuePair <string, string>(nameof(TwitterUserQuery.Type), ((int)UserType.IdLookup).ToString(CultureInfo.InvariantCulture)))); Assert.IsTrue( queryParams.Contains( new KeyValuePair <string, string>(nameof(TwitterUserQuery.ID), "456"))); Assert.IsTrue( queryParams.Contains( new KeyValuePair <string, string>(nameof(TwitterUserQuery.Ids), "2,3"))); Assert.IsTrue( queryParams.Contains( new KeyValuePair <string, string>(nameof(TwitterUserQuery.Usernames), "joemayo,linq2twitr"))); Assert.IsTrue( queryParams.Contains( new KeyValuePair <string, string>(nameof(TwitterUserQuery.Expansions), "attachments.poll_ids,author_id"))); Assert.IsTrue( queryParams.Contains( new KeyValuePair <string, string>(nameof(TwitterUserQuery.MaxResults), "50"))); Assert.IsTrue( queryParams.Contains( new KeyValuePair <string, string>(nameof(TwitterUserQuery.PaginationToken), "123"))); Assert.IsTrue( queryParams.Contains( new KeyValuePair <string, string>(nameof(TwitterUserQuery.TweetFields), "author_id,created_at"))); Assert.IsTrue( queryParams.Contains( new KeyValuePair <string, string>(nameof(TwitterUserQuery.UserFields), "created_at,verified"))); }
public void ProcessResults_Handles_Response_With_No_Results() { var twitterUserReqProc = new TwitterUserRequestProcessor <TwitterUserQuery> { BaseUrl = BaseUrl2 }; List <TwitterUserQuery> results = twitterUserReqProc.ProcessResults(ErrorTweet); Assert.IsNotNull(results); TwitterUserQuery twitterUserQuery = results.SingleOrDefault(); Assert.IsNotNull(twitterUserQuery); List <TwitterUser> users = twitterUserQuery.Users; Assert.IsNull(users); }
public void BuildUrl_WithoutUsernamesOnUsernameLookup_Throws() { var twitterUserReqProc = new TwitterUserRequestProcessor <TwitterUserQuery> { BaseUrl = BaseUrl2 }; var parameters = new Dictionary <string, string> { { nameof(TwitterUserQuery.Type), UserType.UsernameLookup.ToString() }, //{ nameof(TwitterUserQuery.Usernames), null } }; ArgumentNullException ex = L2TAssert.Throws <ArgumentNullException>(() => twitterUserReqProc.BuildUrl(parameters)); Assert.AreEqual(nameof(TwitterUserQuery.Usernames), ex.ParamName); }
public void ProcessResults_Populates_Entities() { var twitterUserProc = new TwitterUserRequestProcessor <TwitterUserQuery> { BaseUrl = BaseUrl2 }; List <TwitterUserQuery> results = twitterUserProc.ProcessResults(UsersJson); Assert.IsNotNull(results); TwitterUserQuery twitterUserQuery = results.SingleOrDefault(); Assert.IsNotNull(twitterUserQuery); List <TwitterUser> users = twitterUserQuery.Users; Assert.IsNotNull(users); Assert.AreEqual(2, users.Count); TwitterUser user = users.FirstOrDefault(); Assert.IsNotNull(user); TwitterUserEntity entities = user.Entities; Assert.IsNotNull(entities); TweetEntityUrl url = entities?.Url?.Urls?.FirstOrDefault(); Assert.IsNotNull(url); Assert.AreEqual(0, url.Start); Assert.AreEqual(23, url.End); Assert.AreEqual("https://t.co/Y6dXyWxanS", url.Url); Assert.AreEqual("https://github.com/JoeMayo", url.ExpandedUrl); Assert.AreEqual("github.com/JoeMayo", url.DisplayUrl); TweetEntityHashtag hashtag = entities?.Description?.Hashtags?.FirstOrDefault(); Assert.IsNotNull(hashtag); Assert.AreEqual(108, hashtag.Start); Assert.AreEqual(111, hashtag.End); Assert.AreEqual("ai", hashtag.Tag); }
public void ProcessResults_WithFullUserExpansionsAndTweets_Deserializes() { var twitterUserReqProc = new TwitterUserRequestProcessor <TwitterUserQuery> { BaseUrl = BaseUrl2 }; List <TwitterUserQuery> results = twitterUserReqProc.ProcessResults(FullUserWithTweet); Assert.IsNotNull(results); TwitterUserQuery twitterUserQuery = results.SingleOrDefault(); Assert.IsNotNull(twitterUserQuery); TwitterInclude includes = twitterUserQuery.Includes; Assert.IsNotNull(includes); List <Tweet> tweets = includes.Tweets; Assert.IsNotNull(tweets); Assert.IsTrue(tweets.Any()); Tweet tweet = tweets.First(); Assert.IsNotNull(tweet); Assert.AreEqual(TweetReplySettings.Everyone, tweet.ReplySettings); }