コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        public void BuildUrl_WithNoParameters_Fails()
        {
            var twitterUserReqProc = new TwitterUserRequestProcessor <TwitterUserQuery> {
                BaseUrl = BaseUrl2
            };

            L2TAssert.Throws <NullReferenceException>(() =>
            {
                twitterUserReqProc.BuildUrl(null);
            });
        }
コード例 #9
0
        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")));
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
        }