/// <summary>
        /// Removes one or more users from a Site Stream
        /// </summary>
        /// <param name="ctx">Twitter Context</param>
        /// <param name="userIDs">List of user IDs to remove from Site Stream</param>
        /// <param name="streamID">ID of Site Stream to remove users from</param>
        /// <param name="callback">Async Callback</param>
        /// <returns>Control Stream with CommandResponse property for Twitter's response message</returns>
        public static ControlStream RemoveSiteStreamUser(this TwitterContext ctx, List<ulong> userIDs, string streamID, Action<TwitterAsyncResponse<ControlStream>> callback)
        {
            if (string.IsNullOrEmpty(streamID)) throw new ArgumentNullException("streamID", "streamID is required.");

            var newUrl = ctx.SiteStreamUrl + "site/c/" + streamID + "/remove_user.json";

            string userIDString = string.Join(",", userIDs.Select(user => user.ToString()).ToArray());

            var reqProc = new ControlStreamRequestProcessor<ControlStream>();

            var twitExe = ctx.TwitterExecutor;

            twitExe.AsyncCallback = callback;
            var resultsJson =
                twitExe.PostToTwitter(
                    newUrl,
                    new Dictionary<string, string>
                    {
                        {"user_id", userIDString}
                    },
                    response => reqProc.ProcessActionResult(response, ControlStreamType.Info));

            ControlStream cs = reqProc.ProcessActionResult(resultsJson, ControlStreamType.Info);
            return cs;
        }
Ejemplo n.º 2
0
        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()
        {
            var reqProc = new ControlStreamRequestProcessor <ControlStream> {
                SiteStreamUrl = "https://sitestream.twitter.com/1.1/"
            };

            var csList = reqProc.ProcessResults(string.Empty);

            Assert.False(csList.Any());
        }
Ejemplo n.º 3
0
        public void BuildUrl_Followers_Requires_UserID()
        {
            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = "https://sitestream.twitter.com/1.1/" };
            var parameters =
                new Dictionary<string, string>
                {
                    { "Type", ((int)ControlStreamType.Followers).ToString(CultureInfo.InvariantCulture) },
                    //{ "UserID", "478805447" },
                    { "StreamID", "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f" }
                };

            Assert.Throws<ArgumentNullException>(() => reqProc.BuildUrl(parameters));
        }
Ejemplo n.º 4
0
        public void BuildUrl_Info_Requires_StreamID()
        {
            var reqProc = new ControlStreamRequestProcessor <ControlStream> {
                SiteStreamUrl = "https://sitestream.twitter.com/1.1/"
            };
            var parameters =
                new Dictionary <string, string>
            {
                { "Type", ((int)ControlStreamType.Info).ToString(CultureInfo.InvariantCulture) },
                //{ "StreamID", "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f" }
            };

            Assert.Throws <ArgumentNullException>(() => reqProc.BuildUrl(parameters));
        }
Ejemplo n.º 5
0
        public void BuildUrl_Constructs_Followers_Url()
        {
            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = "https://sitestream.twitter.com/1.1/" };
            const string Expected = "https://sitestream.twitter.com/1.1/site/c/1_1_54e345d655ee3e8df359ac033648530bfbe26c5f/friends/ids.json?user_id=478805447";
            var parameters =
                new Dictionary<string, string>
                {
                    { "Type", ((int)ControlStreamType.Followers).ToString(CultureInfo.InvariantCulture) },
                    { "UserID", "478805447" },
                    { "StreamID", "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f" }
                };

            Request req = reqProc.BuildUrl(parameters);

            Assert.Equal(Expected, req.FullUrl);
        }
Ejemplo n.º 6
0
        public void BuildUrl_Info_Sets_Stream_ID()
        {
            var reqProc = new ControlStreamRequestProcessor <ControlStream> {
                SiteStreamUrl = "https://sitestream.twitter.com/1.1/"
            };
            const string ExpectedStreamID = "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f";
            var          parameters       =
                new Dictionary <string, string>
            {
                { "Type", ((int)ControlStreamType.Info).ToString(CultureInfo.InvariantCulture) },
                { "StreamID", "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f" }
            };

            reqProc.BuildUrl(parameters);

            Assert.Equal(ExpectedStreamID, reqProc.StreamID);
        }
Ejemplo n.º 7
0
        public void BuildUrl_Constructs_Followers_Url()
        {
            var reqProc = new ControlStreamRequestProcessor <ControlStream> {
                SiteStreamUrl = "https://sitestream.twitter.com/1.1/"
            };
            const string Expected   = "https://sitestream.twitter.com/1.1/site/c/1_1_54e345d655ee3e8df359ac033648530bfbe26c5f/friends/ids.json?user_id=478805447";
            var          parameters =
                new Dictionary <string, string>
            {
                { "Type", ((int)ControlStreamType.Followers).ToString(CultureInfo.InvariantCulture) },
                { "UserID", "478805447" },
                { "StreamID", "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f" }
            };

            Request req = reqProc.BuildUrl(parameters);

            Assert.Equal(Expected, req.FullUrl);
        }
Ejemplo n.º 8
0
        public void GetParameters_Returns_Parameters()
        {
            var reqProc = new ControlStreamRequestProcessor <ControlStream>();
            Expression <Func <ControlStream, bool> > expression =
                strm =>
                strm.Type == ControlStreamType.Followers &&
                strm.UserID == 10 &&
                strm.StreamID == "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f";
            var lambdaExpression = expression as LambdaExpression;

            var parms = reqProc.GetParameters(lambdaExpression);

            Assert.True(parms.Contains(
                            new KeyValuePair <string, string>("Type", ((int)ControlStreamType.Followers).ToString())));
            Assert.True(parms.Contains(
                            new KeyValuePair <string, string>("UserID", "10")));
            Assert.True(parms.Contains(
                            new KeyValuePair <string, string>("StreamID", "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f")));
        }
Ejemplo n.º 9
0
        public void GetParameters_Returns_Parameters()
        {
            var reqProc = new ControlStreamRequestProcessor<ControlStream>();
            Expression<Func<ControlStream, bool>> expression =
                strm =>
                    strm.Type == ControlStreamType.Followers &&
                    strm.UserID == 10 &&
                    strm.StreamID == "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f";
            var lambdaExpression = expression as LambdaExpression;

            var parms = reqProc.GetParameters(lambdaExpression);

            Assert.True(parms.Contains(
                    new KeyValuePair<string, string>("Type", ((int)ControlStreamType.Followers).ToString())));
            Assert.True(parms.Contains(
                   new KeyValuePair<string, string>("UserID", "10")));
            Assert.True(parms.Contains(
                   new KeyValuePair<string, string>("StreamID", "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f")));
        }
Ejemplo n.º 10
0
        public void ProcessResults_Replaces_Input_Params()
        {
            const ulong  UserID   = 1;
            const string StreamID = "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f";

            var csReqProc = new ControlStreamRequestProcessor <ControlStream>
            {
                BaseUrl  = "https://api.twitter.com/1/",
                Type     = ControlStreamType.Followers,
                UserID   = UserID,
                StreamID = StreamID
            };

            var csResult = csReqProc.ProcessResults(FollowersMessage);

            var cs = csResult.First();

            Assert.Equal(ControlStreamType.Followers, cs.Type);
            Assert.Equal(UserID, cs.UserID);
            Assert.Equal(StreamID, cs.StreamID);
        }
Ejemplo n.º 11
0
        public void ProcessResults_Replaces_Input_Params()
        {
            const ulong UserID = 1;
            const string StreamID = "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f";

            var csReqProc = new ControlStreamRequestProcessor<ControlStream>
            {
                BaseUrl = "https://api.twitter.com/1/",
                Type = ControlStreamType.Followers,
                UserID = UserID,
                StreamID = StreamID
            };

            var csResult = csReqProc.ProcessResults(FollowersMessage);

            var cs = csResult.First();

            Assert.Equal(ControlStreamType.Followers, cs.Type);
            Assert.Equal(UserID, cs.UserID);
            Assert.Equal(StreamID, cs.StreamID);
        }
Ejemplo n.º 12
0
        public void ProcessResults_Handles_Follower_Response()
        {
            const ulong  ExpectedUserID          = 15411837;
            const string ExpectedUserName        = "******";
            const bool   ExpectedDM              = true;
            const string ExpectedPrevCursor      = "1";
            const string ExpectedNextCursor      = "3";
            const int    ExpectedNumberOfFriends = 5;
            const ulong  ExpectedFirstFriendID   = 13348;
            var          reqProc = new ControlStreamRequestProcessor <ControlStream>
            {
                SiteStreamUrl = "https://sitestream.twitter.com/1.1/",
                Type          = ControlStreamType.Followers
            };

            var csList = reqProc.ProcessResults(FollowersMessage);

            Assert.Single(csList);
            var cs     = csList.Single();
            var follow = cs.Follow;

            Assert.NotNull(follow);
            var user = follow.User;

            Assert.NotNull(user);
            Assert.Equal(ExpectedUserID, user.UserID);
            Assert.Equal(ExpectedUserName, user.Name);
            Assert.Equal(ExpectedDM, user.DM);
            var cursors = follow.Cursors;

            Assert.NotNull(cursors);
            Assert.Equal(ExpectedPrevCursor, cursors.Previous);
            Assert.Equal(ExpectedNextCursor, cursors.Next);
            var friends = follow.Friends;

            Assert.NotNull(friends);
            Assert.NotEmpty(friends);
            Assert.Equal(ExpectedNumberOfFriends, friends.Count);
            Assert.Equal(ExpectedFirstFriendID, friends.First());
        }
Ejemplo n.º 13
0
        public void ProcessResults_Handles_Info_Response()
        {
            const ulong  ExpectedUserID    = 15411837;
            const string ExpectedUserName  = "******";
            const bool   ExpectedDM        = true;
            const string ExpectedDelimited = "none";
            const bool   ExpectedIncludeFollowingsActivity = true;
            const bool   ExpectedIncludeUserChanges        = true;
            const string ExpectedReplies = "none";
            const string ExpectedWith    = "user";
            var          reqProc         = new ControlStreamRequestProcessor <ControlStream>
            {
                SiteStreamUrl = "https://sitestream.twitter.com/1.1/",
                Type          = ControlStreamType.Info
            };

            var csList = reqProc.ProcessResults(InfoMessage);

            Assert.Single(csList);
            var cs   = csList.Single();
            var info = cs.Info;

            Assert.NotNull(info);
            var users = info.Users;

            Assert.NotNull(users);
            Assert.NotEmpty(users);
            var user = users.First();

            Assert.NotNull(user);
            Assert.Equal(ExpectedUserID, user.UserID);
            Assert.Equal(ExpectedUserName, user.Name);
            Assert.Equal(ExpectedDM, user.DM);
            Assert.Equal(ExpectedDelimited, info.Delimited);
            Assert.Equal(ExpectedIncludeFollowingsActivity, info.IncludeFollowingsActivity);
            Assert.Equal(ExpectedIncludeUserChanges, info.IncludeUserChanges);
            Assert.Equal(ExpectedReplies, info.Replies);
            Assert.Equal(ExpectedWith, info.With);
        }
        /// <summary>
        /// Removes one or more users from a Site Stream
        /// </summary>
        /// <param name="userIDs">List of user IDs to remove from Site Stream</param>
        /// <param name="streamID">ID of Site Stream to remove users from</param>
        /// <returns>Control Stream with CommandResponse property for Twitter's response message</returns>
        public async Task<ControlStream> RemoveSiteStreamUserAsync(List<ulong> userIDs, string streamID, CancellationToken cancelToken = default(CancellationToken))
        {
            if (string.IsNullOrWhiteSpace(streamID)) throw new ArgumentNullException("streamID", "streamID is required.");

            var newUrl = SiteStreamUrl + "site/c/" + streamID + "/remove_user.json";

            string userIDString = string.Join(",", userIDs.Select(user => user.ToString()).ToArray());

            var reqProc = new ControlStreamRequestProcessor<ControlStream>();

            var resultsJson =
                await TwitterExecutor.PostToTwitterAsync<ControlStream>(
                    newUrl,
                    new Dictionary<string, string>
                    {
                        {"user_id", userIDString}
                    },
                    cancelToken)
                    .ConfigureAwait(false);

            return reqProc.ProcessActionResult(resultsJson, ControlStreamType.Info);
        }
Ejemplo n.º 15
0
        public void BuildUrl_Info_Sets_Stream_ID()
        {
            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = "https://sitestream.twitter.com/1.1/" };
            const string ExpectedStreamID = "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f";
            var parameters =
                new Dictionary<string, string>
                {
                    { "Type", ((int)ControlStreamType.Info).ToString(CultureInfo.InvariantCulture) },
                    { "StreamID", "1_1_54e345d655ee3e8df359ac033648530bfbe26c5f" }
                };

            reqProc.BuildUrl(parameters);

            Assert.Equal(ExpectedStreamID, reqProc.StreamID);
        }
Ejemplo n.º 16
0
        public void ProcessResults_Handles_Follower_Response()
        {
            const ulong ExpectedUserID = 15411837;
            const string ExpectedUserName = "******";
            const bool ExpectedDM = true;
            const string ExpectedPrevCursor = "1";
            const string ExpectedNextCursor = "3";
            const int ExpectedNumberOfFriends = 5;
            const ulong ExpectedFirstFriendID = 13348;
            var reqProc = new ControlStreamRequestProcessor<ControlStream> 
            { 
                SiteStreamUrl = "https://sitestream.twitter.com/1.1/",
                Type = ControlStreamType.Followers
            };

            var csList = reqProc.ProcessResults(FollowersMessage);

            Assert.Single(csList);
            var cs = csList.Single();
            var follow = cs.Follow;
            Assert.NotNull(follow);
            var user = follow.User;
            Assert.NotNull(user);
            Assert.Equal(ExpectedUserID, user.UserID);
            Assert.Equal(ExpectedUserName, user.Name);
            Assert.Equal(ExpectedDM, user.DM);
            var cursors = follow.Cursors;
            Assert.NotNull(cursors);
            Assert.Equal(ExpectedPrevCursor, cursors.Previous);
            Assert.Equal(ExpectedNextCursor, cursors.Next);
            var friends = follow.Friends;
            Assert.NotNull(friends);
            Assert.NotEmpty(friends);
            Assert.Equal(ExpectedNumberOfFriends, friends.Count);
            Assert.Equal(ExpectedFirstFriendID, friends.First());
        }
Ejemplo n.º 17
0
        public void ProcessResults_Handles_Info_Response()
        {
            const ulong ExpectedUserID = 15411837;
            const string ExpectedUserName = "******";
            const bool ExpectedDM = true;
            const string ExpectedDelimited = "none";
            const bool ExpectedIncludeFollowingsActivity = true;
            const bool ExpectedIncludeUserChanges = true;
            const string ExpectedReplies = "none";
            const string ExpectedWith = "user";
            var reqProc = new ControlStreamRequestProcessor<ControlStream>
            {
                SiteStreamUrl = "https://sitestream.twitter.com/1.1/",
                Type = ControlStreamType.Info
            };

            var csList = reqProc.ProcessResults(InfoMessage);

            Assert.Single(csList);
            var cs = csList.Single();
            var info = cs.Info;
            Assert.NotNull(info);
            var users = info.Users;
            Assert.NotNull(users);
            Assert.NotEmpty(users);
            var user = users.First();
            Assert.NotNull(user);
            Assert.Equal(ExpectedUserID, user.UserID);
            Assert.Equal(ExpectedUserName, user.Name);
            Assert.Equal(ExpectedDM, user.DM);
            Assert.Equal(ExpectedDelimited, info.Delimited);
            Assert.Equal(ExpectedIncludeFollowingsActivity, info.IncludeFollowingsActivity);
            Assert.Equal(ExpectedIncludeUserChanges, info.IncludeUserChanges);
            Assert.Equal(ExpectedReplies, info.Replies);
            Assert.Equal(ExpectedWith, info.With);
        }
        public void ControlStreamRequestProcessor_Works_With_Actions()
        {
            var reqProc = new ControlStreamRequestProcessor<ControlStream>();

            Assert.IsAssignableFrom<IRequestProcessorWithAction<ControlStream>>(reqProc);
        }
Ejemplo n.º 19
0
        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()
        {
            var reqProc = new ControlStreamRequestProcessor<ControlStream> { SiteStreamUrl = "https://sitestream.twitter.com/1.1/" };

            var csList = reqProc.ProcessResults(string.Empty);

            Assert.False(csList.Any());
        }
        public void ControlStreamRequestProcessor_Works_With_Actions()
        {
            var reqProc = new ControlStreamRequestProcessor <ControlStream>();

            Assert.IsAssignableFrom <IRequestProcessorWithAction <ControlStream> >(reqProc);
        }