Esempio n. 1
0
        public void BuildUrl_WithSpacesInFields_FixesSpaces()
        {
            const string ExpectedUrl =
                BaseUrl2 + "tweets/search/recent?" +
                "query=LINQ%20to%20Twitter&" +
                "expansions=author_id%2Cgeo.place_id&" +
                "media.fields=url%2Cduration_ms&" +
                "place.fields=full_name%2Ccountry&" +
                "poll.fields=voting_status%2Coptions&" +
                "tweet.fields=text%2Ccreated_at&" +
                "user.fields=username%2Clocation";
            var searchReqProc = new TwitterSearchRequestProcessor <TwitterSearch> {
                BaseUrl = BaseUrl2
            };
            var parameters =
                new Dictionary <string, string>
            {
                { nameof(TwitterSearch.Type), SearchType.RecentSearch.ToString() },
                { nameof(TwitterSearch.Query), "LINQ to Twitter" },
                { nameof(TwitterSearch.Expansions), ExpansionField.AuthorID + ", " + ExpansionField.PlaceID },
                { nameof(TwitterSearch.MediaFields), MediaField.Url + ", " + MediaField.Duration },
                { nameof(TwitterSearch.PlaceFields), PlaceField.FullName + ", " + PlaceField.Country },
                { nameof(TwitterSearch.PollFields), PollField.VotingStatus + ", " + PollField.Options },
                { nameof(TwitterSearch.TweetFields), TweetField.Text + ", " + TweetField.CreatedAt },
                { nameof(TwitterSearch.UserFields), UserField.UserName + ", " + UserField.Location },
            };

            Request req = searchReqProc.BuildUrl(parameters);

            Assert.AreEqual(ExpectedUrl, req.FullUrl);
        }
Esempio n. 2
0
        public void ProcessResults_WithErrors_PopulatesErrorList()
        {
            var searchProc = new TwitterSearchRequestProcessor <TwitterSearch> {
                BaseUrl = "https://api.twitter.com/1.1/search/"
            };

            List <TwitterSearch> searches = searchProc.ProcessResults(SearchErrorJson);

            Assert.IsNotNull(searches);
            TwitterSearch search = searches.SingleOrDefault();

            Assert.IsNotNull(search);
            List <TwitterError> errors = search.Errors;

            Assert.IsNotNull(errors);
            Assert.AreEqual(2, errors.Count);
            TwitterError error = errors.FirstOrDefault();

            Assert.IsNotNull(error);
            Assert.AreEqual("tweet", error.ResourceType);
            Assert.AreEqual("non_public_metrics.impression_count", error.Field);
            Assert.AreEqual("Field Authorization Error", error.Title);
            Assert.AreEqual("data", error.Section);
            Assert.AreEqual("Sorry, you are not authorized to access non_public_metrics.impression_count on a Tweet.", error.Detail);
            Assert.AreEqual("https://api.twitter.com/2/problems/not-authorized-for-field", error.Type);
        }
Esempio n. 3
0
        public void BuildUrl_Throws_When_Parameters_Null()
        {
            var searchReqProc = new TwitterSearchRequestProcessor <Search> {
                BaseUrl = BaseUrl2
            };

            L2TAssert.Throws <NullReferenceException>(() =>
            {
                searchReqProc.BuildUrl(null);
            });
        }
Esempio n. 4
0
        public void BuildUrl_Encodes_Query()
        {
            var searchReqProc = new TwitterSearchRequestProcessor <Search> {
                BaseUrl = BaseUrl2
            };
            string expected   = searchReqProc.BaseUrl + "tweets/search/recent?query=Contains%20Space";
            var    parameters =
                new Dictionary <string, string>
            {
                { nameof(TwitterSearch.Type), SearchType.RecentSearch.ToString() },
                { nameof(TwitterSearch.Query), "Contains Space" }
            };

            Request req = searchReqProc.BuildUrl(parameters);

            Assert.AreEqual(expected, req.FullUrl);
        }
Esempio n. 5
0
        public void BuildUrl_Requires_Query()
        {
            var searchReqProc = new TwitterSearchRequestProcessor <Search> {
                BaseUrl = BaseUrl2
            };
            var parameters =
                new Dictionary <string, string>
            {
                { nameof(TwitterSearch.Type), SearchType.RecentSearch.ToString() },
                { nameof(TwitterSearch.Query), null }
            };

            ArgumentException ex =
                L2TAssert.Throws <ArgumentNullException>(() =>
                                                         searchReqProc.BuildUrl(parameters));

            Assert.AreEqual(nameof(TwitterSearch.Query), ex.ParamName);
        }
Esempio n. 6
0
        public void BuildUrl_Includes_Parameters()
        {
            const string ExpectedUrl =
                BaseUrl2 + "tweets/search/recent?" +
                "query=LINQ%20to%20Twitter&" +
                "end_time=2021-01-01T12%3A59%3A59Z&" +
                "expansions=attachments.poll_ids%2Cauthor_id&" +
                "max_results=10&" +
                "media.fields=height%2Cwidth&" +
                "next_token=abc&" +
                "place.fields=country&" +
                "poll.fields=duration_minutes%2Cend_datetime&" +
                "since_id=123&" +
                "start_time=2020-12-31T00%3A00%3A01Z&" +
                "tweet.fields=author_id%2Ccreated_at&" +
                "until_id=525&" +
                "user.fields=created_at%2Cverified";
            var searchReqProc = new TwitterSearchRequestProcessor <Search> {
                BaseUrl = BaseUrl2
            };
            var parameters =
                new Dictionary <string, string>
            {
                { nameof(TwitterSearch.Query), "LINQ to Twitter" },
                { nameof(TwitterSearch.Type), SearchType.RecentSearch.ToString() },
                { nameof(TwitterSearch.EndTime), new DateTime(2021, 1, 1, 12, 59, 59).ToString() },
                { nameof(TwitterSearch.Expansions), "attachments.poll_ids,author_id" },
                { nameof(TwitterSearch.MaxResults), 10.ToString() },
                { nameof(TwitterSearch.MediaFields), "height,width" },
                { nameof(TwitterSearch.NextToken), "abc" },
                { nameof(TwitterSearch.PlaceFields), "country" },
                { nameof(TwitterSearch.PollFields), "duration_minutes,end_datetime" },
                { nameof(TwitterSearch.SinceID), "123" },
                { nameof(TwitterSearch.StartTime), new DateTime(2020, 12, 31, 0, 0, 1).ToString() },
                { nameof(TwitterSearch.TweetFields), "author_id,created_at" },
                { nameof(TwitterSearch.UntilID), "525" },
                { nameof(TwitterSearch.UserFields), "created_at,verified" },
            };

            Request req = searchReqProc.BuildUrl(parameters);

            Assert.AreEqual(ExpectedUrl, req.FullUrl);
        }
Esempio n. 7
0
        public void ProcessResults_Populates_Input_Parameters()
        {
            var searchProc = new TwitterSearchRequestProcessor <TwitterSearch>()
            {
                BaseUrl     = BaseUrl2,
                Type        = SearchType.RecentSearch,
                EndTime     = new DateTime(2020, 12, 31),
                Expansions  = "123",
                MaxResults  = 100,
                MediaFields = "456",
                NextToken   = "789",
                PlaceFields = "012",
                PollFields  = "345",
                Query       = "JoeMayo",
                SinceID     = "1",
                StartTime   = new DateTime(2020, 1, 1),
                TweetFields = "678",
                UntilID     = "901",
                UserFields  = "234"
            };

            var searchResult = searchProc.ProcessResults(SearchDefaultJson);

            Assert.IsNotNull(searchResult);
            Assert.AreEqual(1, searchResult.Count);
            var search = searchResult.Single();

            Assert.IsNotNull(search);
            Assert.AreEqual(SearchType.RecentSearch, search.Type);
            Assert.AreEqual(new DateTime(2020, 12, 31), search.EndTime);
            Assert.AreEqual("123", search.Expansions);
            Assert.AreEqual(100, search.MaxResults);
            Assert.AreEqual("456", search.MediaFields);
            Assert.AreEqual("789", search.NextToken);
            Assert.AreEqual("012", search.PlaceFields);
            Assert.AreEqual("345", search.PollFields);
            Assert.AreEqual("JoeMayo", search.Query);
            Assert.AreEqual("1", search.SinceID);
            Assert.AreEqual(new DateTime(2020, 1, 1), search.StartTime);
            Assert.AreEqual("678", search.TweetFields);
            Assert.AreEqual("901", search.UntilID);
            Assert.AreEqual("234", search.UserFields);
        }
Esempio n. 8
0
        public void ProcessResults_Populates_Meta()
        {
            var searchProc = new TwitterSearchRequestProcessor <TwitterSearch> {
                BaseUrl = BaseUrl2
            };

            List <TwitterSearch> results = searchProc.ProcessResults(SearchDefaultJson);

            Assert.IsNotNull(results);
            TwitterSearch search = results.SingleOrDefault();

            Assert.IsNotNull(search);
            TwitterSearchMeta meta = search.Meta;

            Assert.IsNotNull(meta);
            Assert.AreEqual("1317802724407316480", meta.NewestID);
            Assert.AreEqual("1316030424850800640", meta.OldestID);
            Assert.AreEqual(4, meta.Count);
        }
Esempio n. 9
0
        public void BuildUrl_WithAllParameters_SendsParameters()
        {
            const string ExpectedUrl =
                BaseUrl2 + "tweets/search/recent?" +
                "query=LINQ%20to%20Twitter&" +
                "end_time=2021-01-01T12%3A59%3A59Z&" +
                "expansions=author_id&" +
                "max_results=10&" +
                "media.fields=url&" +
                "next_token=abc&" +
                "place.fields=full_name&" +
                "poll.fields=voting_status&" +
                "since_id=123&" +
                "start_time=2020-12-31T00%3A00%3A01Z&" +
                "tweet.fields=text&" +
                "until_id=525&" +
                "user.fields=username";
            var searchReqProc = new TwitterSearchRequestProcessor <TwitterSearch> {
                BaseUrl = BaseUrl2
            };
            var parameters =
                new Dictionary <string, string>
            {
                { nameof(TwitterSearch.Type), SearchType.RecentSearch.ToString() },
                { nameof(TwitterSearch.Query), "LINQ to Twitter" },
                { nameof(TwitterSearch.EndTime), new DateTime(2021, 01, 01, 12, 59, 59).ToString() },
                { nameof(TwitterSearch.Expansions), ExpansionField.AuthorID },
                { nameof(TwitterSearch.MaxResults), 10.ToString() },
                { nameof(TwitterSearch.MediaFields), MediaField.Url },
                { nameof(TwitterSearch.NextToken), "abc" },
                { nameof(TwitterSearch.PlaceFields), PlaceField.FullName },
                { nameof(TwitterSearch.PollFields), PollField.VotingStatus },
                { nameof(TwitterSearch.SinceID), 123.ToString() },
                { nameof(TwitterSearch.StartTime), new DateTime(2020, 12, 31, 00, 00, 01).ToString() },
                { nameof(TwitterSearch.TweetFields), TweetField.Text },
                { nameof(TwitterSearch.UntilID), 525.ToString() },
                { nameof(TwitterSearch.UserFields), UserField.UserName },
            };

            Request req = searchReqProc.BuildUrl(parameters);

            Assert.AreEqual(ExpectedUrl, req.FullUrl);
        }
Esempio n. 10
0
        public void ProcessResults_Populates_DefaultTweets()
        {
            var searchProc = new TwitterSearchRequestProcessor <TwitterSearch> {
                BaseUrl = BaseUrl2
            };

            List <TwitterSearch> results = searchProc.ProcessResults(SearchDefaultJson);

            Assert.IsNotNull(results);
            TwitterSearch search = results.SingleOrDefault();

            Assert.IsNotNull(search);
            List <Tweet> tweets = search.Tweets;

            Assert.IsNotNull(tweets);
            Assert.AreEqual(4, tweets.Count);
            Tweet firstTweet = tweets.FirstOrDefault();

            Assert.IsNotNull(firstTweet);
            Assert.AreEqual("1317802724407316480", firstTweet.ID);
            Assert.AreEqual("Test Data 1", firstTweet.Text);
        }
Esempio n. 11
0
        public void ProcessResults_Handles_Response_With_No_Results()
        {
            var searchProc = new TwitterSearchRequestProcessor <TwitterSearch> {
                BaseUrl = "https://api.twitter.com/1.1/search/"
            };

            List <TwitterSearch> searches = searchProc.ProcessResults(EmptyResponse);

            Assert.IsNotNull(searches);
            TwitterSearch search = searches.SingleOrDefault();

            Assert.IsNotNull(search);
            List <Tweet> results = search.Tweets;

            Assert.IsNull(results);

            TwitterSearchMeta meta = search.Meta;

            Assert.IsNotNull(meta);
            Assert.IsNull(meta.NewestID);
            Assert.IsNull(meta.OldestID);
            Assert.AreEqual(0, meta.Count);
        }
Esempio n. 12
0
        public void GetParametersTest()
        {
            var target = new TwitterSearchRequestProcessor <Search>();

            var endTime   = new DateTime(2020, 8, 30);
            var startTime = new DateTime(2020, 8, 1);
            Expression <Func <TwitterSearch, bool> > expression =
                search =>
                search.Type == SearchType.RecentSearch &&
                search.EndTime == endTime &&
                search.Expansions == "attachments.poll_ids,author_id" &&
                search.MaxResults == 10 &&
                search.MediaFields == "height,width" &&
                search.NextToken == "abc" &&
                search.PlaceFields == "country" &&
                search.PollFields == "duration_minutes,end_datetime" &&
                search.Query == "LINQ to Twitter" &&
                search.SinceID == "123" &&
                search.StartTime == startTime &&
                search.TweetFields == "author_id,created_at" &&
                search.UntilID == "525" &&
                search.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(TwitterSearch.Type), ((int)SearchType.RecentSearch).ToString(CultureInfo.InvariantCulture))));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.EndTime), "08/30/2020 00:00:00")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.Expansions), "attachments.poll_ids,author_id")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.MaxResults), "10")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.MediaFields), "height,width")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.NextToken), "abc")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.PlaceFields), "country")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.PollFields), "duration_minutes,end_datetime")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.Query), "LINQ to Twitter")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.SinceID), "123")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.StartTime), "08/01/2020 00:00:00")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.TweetFields), "author_id,created_at")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.UntilID), "525")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>(nameof(TwitterSearch.UserFields), "created_at,verified")));
        }