/// <summary>
        /// Blocks a user
        /// </summary>
        /// <param name="twitterCtx">Twitter Context</param>
        /// <param name="userID">ID of user to block</param>
        /// <param name="screenName">Screen name of user to block</param>
        /// <param name="includeEntities">Set to false to not include entities (default: true)</param>
        /// <param name="skipStatus">Don't include status</param>
        /// <param name="callback">Async Callback used in Silverlight queries</param>
        /// <returns>User that was unblocked</returns>
        public static User CreateBlock(this TwitterContext twitterCtx, ulong userID, string screenName, bool includeEntities, bool skipStatus, Action<TwitterAsyncResponse<User>> callback)
        {
            if (userID <= 0 && string.IsNullOrEmpty(screenName))
            {
                throw new ArgumentException("Either userID or screenName are required parameters.", "UserIDOrScreenName");
            }

            var blocksUrl = twitterCtx.BaseUrl + "blocks/create.json";

            var reqProc = new BlocksRequestProcessor<User>();

            ITwitterExecute twitExe = twitterCtx.TwitterExecutor;

            twitExe.AsyncCallback = callback;
            var resultsJson =
                twitExe.PostToTwitter(
                    blocksUrl,
                    new Dictionary<string, string>
                    {
                        { "user_id", userID <= 0 ? (string)null : userID.ToString() },
                        { "screen_name", screenName },
                        { "include_entities", includeEntities.ToString().ToLower() },
                        { "skip_status", skipStatus.ToString().ToLower() }
                    },
                    response => reqProc.ProcessActionResult(response, UserAction.SingleUser));

            User results = reqProc.ProcessActionResult(resultsJson, UserAction.SingleUser);
            return results;
        }
        public void ProcessResults_Retains_Original_Input_Parameters()
        {
            var blockedReqProc = new BlocksRequestProcessor<Blocks>
            {
                Type = BlockingType.List,
                ScreenName = "somename",
                Page = 1,
                PerPage = 10,
                IncludeEntities = true,
                SkipStatus = true,
                Cursor = "789"
            };

            var blocks = blockedReqProc.ProcessResults(BlockedUsersJson);

            Assert.IsNotNull(blocks);
            Assert.IsNotNull(blocks.SingleOrDefault());
            var block = blocks.Single();
            Assert.AreEqual(BlockingType.List, block.Type);
            Assert.AreEqual("somename", block.ScreenName);
            Assert.AreEqual(1, block.Page);
            Assert.AreEqual(10, block.PerPage);
            Assert.IsTrue(block.IncludeEntities);
            Assert.IsTrue(block.SkipStatus);
            Assert.AreEqual("789", block.Cursor);
        }
        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()
        {
            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = "https://api.twitter.com/1.1/" };

            var blocks = blocksReqProc.ProcessResults(string.Empty);

            Assert.AreEqual(1, blocks.Count);
        }
Example #4
0
        public void ProcessExistsResultsTest()
        {
            BlocksRequestProcessor target = new BlocksRequestProcessor();
            XElement twitterResponse      = XElement.Parse(m_blockExistsXml);
            IList    actual      = target.ProcessResults(twitterResponse);
            var      actualQuery = actual as IList <Blocks>;

            Assert.IsNotNull(actualQuery);
            Assert.AreEqual(actualQuery.Count(), 1);
        }
        public void BuildUrl_Throws_On_Null_Parameters()
        {
            var blockReqProc = new BlocksRequestProcessor <Blocks> {
                BaseUrl = "https://api.twitter.com/1.1/"
            };

            var ex = L2TAssert.Throws <ArgumentException>(() => blockReqProc.BuildUrl(null));

            Assert.AreEqual("Type", ex.ParamName);
        }
Example #6
0
        public void ProcessIdsResultsTest()
        {
            BlocksRequestProcessor <Blocks> target = new BlocksRequestProcessor <Blocks>();
            XElement twitterResponse = XElement.Parse(m_blockedUsersXml);
            IList    actual          = target.ProcessResults(twitterResponse);
            var      actualQuery     = actual as IList <Blocks>;

            Assert.IsNotNull(actualQuery);
            Assert.AreEqual(actualQuery[0].Users.Count, 2);
        }
        public void ProcessResults_Returns_Empty_Collection_When_Empty_Results()
        {
            var blocksReqProc = new BlocksRequestProcessor <Blocks> {
                BaseUrl = "https://api.twitter.com/1.1/"
            };

            var blocks = blocksReqProc.ProcessResults(string.Empty);

            Assert.Equal(1, blocks.Count);
        }
        public void BuildUrl_Throws_On_Missing_Type_Parameter()
        {
            var blockReqProc = new BlocksRequestProcessor <Blocks> {
                BaseUrl = "https://api.twitter.com/1.1/"
            };
            var parameters = new Dictionary <string, string>();

            var ex = L2TAssert.Throws <ArgumentException>(() => blockReqProc.BuildUrl(parameters));

            Assert.AreEqual("Type", ex.ParamName);
        }
        public void ProcessResults_Handles_BlockedUsers()
        {
            var blockedReqProc = new BlocksRequestProcessor<Blocks>
            {
                Type = BlockingType.List
            };

            IList actual = blockedReqProc.ProcessResults(BlockedUsersJson);

            var actualQuery = actual as IList<Blocks>;
            Assert.IsNotNull(actualQuery);
            Assert.AreEqual(actualQuery[0].Users.Count, 3);
        }
        public void ProcessResults_Handles_BlockedUsers()
        {
            var blockedReqProc = new BlocksRequestProcessor <Blocks>
            {
                Type = BlockingType.List
            };

            IList actual = blockedReqProc.ProcessResults(BlockedUsersJson);

            var actualQuery = actual as IList <Blocks>;

            Assert.IsNotNull(actualQuery);
            Assert.AreEqual(actualQuery[0].Users.Count, 3);
        }
        public void ProcessResults_Handles_IDs()
        {
            var blockReqProc = new BlocksRequestProcessor<Blocks>
            {
                Type = BlockingType.Ids
            };

            IList<Blocks> blocksResponse = blockReqProc.ProcessResults(BlockedIDsJson);

            Assert.IsNotNull(blocksResponse);
            Blocks blocks = blocksResponse.First();
            List<string> ids = blocks.IDs;
            Assert.AreEqual(5, ids.Count());
            Assert.AreEqual("35080286", ids.First());
        }
        public void ProcessResults_Handles_IDs()
        {
            var blockReqProc = new BlocksRequestProcessor <Blocks>
            {
                Type = BlockingType.Ids
            };

            IList <Blocks> blocksResponse = blockReqProc.ProcessResults(BlockedIDsJson);

            Assert.IsNotNull(blocksResponse);
            Blocks        blocks = blocksResponse.First();
            List <string> ids    = blocks.IDs;

            Assert.AreEqual(5, ids.Count());
            Assert.AreEqual("35080286", ids.First());
        }
Example #13
0
        public void BuildIDsURLTest()
        {
            BlocksRequestProcessor <Blocks> target = new BlocksRequestProcessor <Blocks>()
            {
                BaseUrl = "http://twitter.com/"
            };
            Dictionary <string, string> parameters =
                new Dictionary <string, string>
            {
                { "Type", ((int)BlockingType.IDS).ToString() }
            };
            string expected = "http://twitter.com/blocks/blocking/ids.xml";
            string actual   = target.BuildURL(parameters);

            Assert.AreEqual(expected, actual);
        }
Example #14
0
        public void BuildBlockingURLTest()
        {
            BlocksRequestProcessor target = new BlocksRequestProcessor()
            {
                BaseUrl = "http://twitter.com/"
            };
            Dictionary <string, string> parameters =
                new Dictionary <string, string>
            {
                { "Type", ((int)BlockingType.Blocking).ToString() },
                { "Page", "2" }
            };
            string expected = "http://twitter.com/blocks/blocking.xml?page=2";
            string actual   = target.BuildURL(parameters);

            Assert.AreEqual(expected, actual);
        }
        public void BuildUrl_Creates_BlockingIDs_Url()
        {
            const string ExpectedUrl   = "https://api.twitter.com/1.1/blocks/ids.json?cursor=789";
            var          blocksReqProc = new BlocksRequestProcessor <Blocks> {
                BaseUrl = "https://api.twitter.com/1.1/"
            };
            var parameters =
                new Dictionary <string, string>
            {
                { "Type", ((int)BlockingType.Ids).ToString(CultureInfo.InvariantCulture) },
                { "Cursor", "789" }
            };

            Request req = blocksReqProc.BuildUrl(parameters);

            Assert.AreEqual(ExpectedUrl, req.FullUrl);
        }
Example #16
0
        public void NullParametersTest()
        {
            BlocksRequestProcessor <Blocks> target = new BlocksRequestProcessor <Blocks>()
            {
                BaseUrl = "http://twitter.com/"
            };
            Dictionary <string, string> parameters = null;
            string actual;

            try
            {
                actual = target.BuildURL(parameters);
                Assert.Fail("Expected ArgumentException.");
            }
            catch (ArgumentException ae)
            {
                Assert.AreEqual <string>("Type", ae.ParamName);
            }
        }
Example #17
0
        public void BuildExistsURLTest()
        {
            BlocksRequestProcessor <Blocks> target = new BlocksRequestProcessor <Blocks>()
            {
                BaseUrl = "http://twitter.com/"
            };
            Dictionary <string, string> parameters =
                new Dictionary <string, string>
            {
                { "Type", ((int)BlockingType.Exists).ToString() },
                { "ID", "123" },
                { "UserID", "456" },
                { "ScreenName", "789" }
            };
            string expected = "http://twitter.com/blocks/exists/123.xml?user_id=456&screen_name=789";
            string actual   = target.BuildURL(parameters);

            Assert.AreEqual(expected, actual);
        }
        public void GetParameters_Parses_Parameters()
        {
            var blocksReqProc = new BlocksRequestProcessor <Blocks>();
            Expression <Func <Blocks, bool> > expression =
                block =>
                block.Type == BlockingType.List &&
                block.UserID == 123ul &&
                block.ScreenName == "JoeMayo" &&
                block.Page == 1 &&
                block.PerPage == 10 &&
                block.IncludeEntities == true &&
                block.SkipStatus == true &&
                block.Cursor == "789";
            var lambdaExpression = expression as LambdaExpression;

            var queryParams = blocksReqProc.GetParameters(lambdaExpression);

            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>("Type", ((int)BlockingType.List).ToString(CultureInfo.InvariantCulture))));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>("UserID", "123")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>("ScreenName", "JoeMayo")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>("Page", "1")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>("PerPage", "10")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>("SkipStatus", "True")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>("IncludeEntities", "True")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair <string, string>("Cursor", "789")));
        }
        public void BuildUrl_Creates_List_Url()
        {
            const string ExpectedUrl   = "https://api.twitter.com/1.1/blocks/list.json?page=2&per_page=10&include_entities=true&skip_status=true&cursor=789";
            var          blocksReqProc = new BlocksRequestProcessor <Blocks> {
                BaseUrl = "https://api.twitter.com/1.1/"
            };
            var parameters =
                new Dictionary <string, string>
            {
                { "Type", ((int)BlockingType.List).ToString(CultureInfo.InvariantCulture) },
                { "Page", "2" },
                { "PerPage", "10" },
                { "SkipStatus", true.ToString() },
                { "Cursor", "789" },
                { "IncludeEntities", true.ToString() }
            };

            Request req = blocksReqProc.BuildUrl(parameters);

            Assert.AreEqual(ExpectedUrl, req.FullUrl);
        }
        /// <summary>
        /// Unblocks a user.
        /// </summary>
        /// <param name="userID">ID of user to block</param>
        /// <param name="screenName">Screen name of user to block</param>
        /// <param name="includeEntities">Set to false to not include entities (default: true)</param>
        /// <param name="skipStatus">Don't include status</param>
        /// <returns>User that was unblocked</returns>
        public async Task<User> DestroyBlockAsync(ulong userID, string screenName, bool includeEntities, bool skipStatus, CancellationToken cancelToken = default(CancellationToken))
        {
            if (userID <= 0 && string.IsNullOrWhiteSpace(screenName))
                throw new ArgumentException("Either userID or screenName are required parameters.", "UserIDOrScreenName");

            var blocksUrl = BaseUrl + "blocks/destroy.json";

            var reqProc = new BlocksRequestProcessor<User>();

            RawResult =
                await TwitterExecutor.PostToTwitterAsync<User>(
                    blocksUrl,
                    new Dictionary<string, string>
                    {
                        { "user_id", userID <= 0 ? (string)null : userID.ToString() },
                        { "screen_name", screenName },
                        { "include_entities", includeEntities.ToString().ToLower() },
                        { "skip_status", skipStatus.ToString().ToLower() }
                    },
                    cancelToken)
                    .ConfigureAwait(false);

            return reqProc.ProcessActionResult(RawResult, UserAction.SingleUser);
        }
 public void BuildExistsURLTest()
 {
     BlocksRequestProcessor<Blocks> target = new BlocksRequestProcessor<Blocks>() { BaseUrl = "http://twitter.com/" };
     Dictionary<string, string> parameters =
         new Dictionary<string, string>
         {
             { "Type", ((int)BlockingType.Exists).ToString() },
             { "ID", "123" },
             { "UserID", "456" },
             { "ScreenName", "789" }
         };
     string expected = "http://twitter.com/blocks/exists/123.xml?user_id=456&screen_name=789";
     string actual = target.BuildURL(parameters);
     Assert.AreEqual(expected, actual);
 }
 public void BuildIDsURLTest()
 {
     BlocksRequestProcessor<Blocks> target = new BlocksRequestProcessor<Blocks>() { BaseUrl = "http://twitter.com/" };
     Dictionary<string, string> parameters =
         new Dictionary<string, string>
         {
             { "Type", ((int)BlockingType.IDS).ToString() }
         };
     string expected = "http://twitter.com/blocks/blocking/ids.xml";
     string actual = target.BuildURL(parameters);
     Assert.AreEqual(expected, actual);
 }
        public void GetParametersTest()
        {
            BlocksRequestProcessor<Blocks> target = new BlocksRequestProcessor<Blocks>();
            Expression<Func<Blocks, bool>> expression =
                graph =>
                    graph.Type == BlockingType.Blocking &&
                    graph.ID == "123" &&
                    graph.ScreenName == "456" &&
                    graph.Page == 1;
            LambdaExpression lambdaExpression = expression as LambdaExpression;

            var queryParams = target.GetParameters(lambdaExpression);

            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair<string, string>("Type", ((int)BlockingType.Blocking).ToString())));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair<string, string>("ID", "123")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair<string, string>("ScreenName", "456")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair<string, string>("Page", "1")));
        }
 public void NullParametersTest()
 {
     BlocksRequestProcessor<Blocks> target = new BlocksRequestProcessor<Blocks>() { BaseUrl = "http://twitter.com/" };
     Dictionary<string, string> parameters = null;
     string actual;
     try
     {
         actual = target.BuildURL(parameters);
         Assert.Fail("Expected ArgumentException.");
     }
     catch (ArgumentException ae)
     {
         Assert.AreEqual<string>("Type", ae.ParamName);
     }
 }
        public void GetParameters_Parses_Parameters()
        {
            var blocksReqProc = new BlocksRequestProcessor<Blocks>();
            Expression<Func<Blocks, bool>> expression =
                block =>
                    block.Type == BlockingType.List &&
                    block.UserID == 123ul &&
                    block.ScreenName == "JoeMayo" &&
                    block.Page == 1 &&
                    block.PerPage == 10 &&
                    block.IncludeEntities == true &&
                    block.SkipStatus == true &&
                    block.Cursor == "789";
            var lambdaExpression = expression as LambdaExpression;

            var queryParams = blocksReqProc.GetParameters(lambdaExpression);

            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair<string, string>("Type", ((int)BlockingType.List).ToString(CultureInfo.InvariantCulture))));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair<string, string>("UserID", "123")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair<string, string>("ScreenName", "JoeMayo")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair<string, string>("Page", "1")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair<string, string>("PerPage", "10")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair<string, string>("SkipStatus", "True")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair<string, string>("IncludeEntities", "True")));
            Assert.IsTrue(
                queryParams.Contains(
                    new KeyValuePair<string, string>("Cursor", "789")));
        }
        public void BlocksRequestProcessor_Works_With_Actions()
        {
            var blocksReqProc = new BlocksRequestProcessor<User>();

            Assert.IsInstanceOfType(blocksReqProc, typeof(IRequestProcessorWithAction<User>));
        }
        public void ProcessIdsResultsTest()
        {
            BlocksRequestProcessor<Blocks> target = new BlocksRequestProcessor<Blocks>();
            XElement twitterResponse = XElement.Parse(m_blockedUsersXml);
            IList actual = target.ProcessResults(twitterResponse);
            var actualQuery = actual as IList<Blocks>;

            Assert.IsNotNull(actualQuery);
            Assert.AreEqual(actualQuery[0].Users.Count, 2);
        }
        public void BlocksRequestProcessor_Works_With_Actions()
        {
            var blocksReqProc = new BlocksRequestProcessor<User>();

            Assert.IsAssignableFrom<IRequestProcessorWithAction<User>>(blocksReqProc);
        }
        public void BuildUrl_Throws_On_Null_Parameters()
        {
            var blockReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = "https://api.twitter.com/1.1/" };

            var ex = L2TAssert.Throws<ArgumentException>(() => blockReqProc.BuildUrl(null));

            Assert.AreEqual("Type", ex.ParamName);
        }
        public void BuildUrl_Throws_On_Missing_Type_Parameter()
        {
            var blockReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = "https://api.twitter.com/1.1/" };
            var parameters = new Dictionary<string, string>();

            var ex = L2TAssert.Throws<ArgumentException>(() => blockReqProc.BuildUrl(parameters));

            Assert.AreEqual("Type", ex.ParamName);
        }
        public void BuildUrl_Creates_BlockingIDs_Url()
        {
            const string ExpectedUrl = "https://api.twitter.com/1.1/blocks/ids.json?cursor=789";
            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = "https://api.twitter.com/1.1/" };
            var parameters =
                new Dictionary<string, string>
                {
                    { "Type", ((int)BlockingType.Ids).ToString(CultureInfo.InvariantCulture) },
                    { "Cursor", "789" }
                };

            Request req = blocksReqProc.BuildUrl(parameters);

            Assert.AreEqual(ExpectedUrl, req.FullUrl);
        }
        public void BuildUrl_Creates_List_Url()
        {
            const string ExpectedUrl = "https://api.twitter.com/1.1/blocks/list.json?page=2&per_page=10&include_entities=true&skip_status=true&cursor=789";
            var blocksReqProc = new BlocksRequestProcessor<Blocks> { BaseUrl = "https://api.twitter.com/1.1/" };
            var parameters =
                new Dictionary<string, string>
                {
                    { "Type", ((int)BlockingType.List).ToString(CultureInfo.InvariantCulture) },
                    { "Page", "2" },
                    { "PerPage", "10" },
                    { "SkipStatus", true.ToString() },
                    { "Cursor", "789" },
                    { "IncludeEntities", true.ToString() }
                };

            Request req = blocksReqProc.BuildUrl(parameters);

            Assert.AreEqual(ExpectedUrl, req.FullUrl);
        }
        public void BlocksRequestProcessor_Works_With_Actions()
        {
            var blocksReqProc = new BlocksRequestProcessor <User>();

            Assert.IsInstanceOfType(blocksReqProc, typeof(IRequestProcessorWithAction <User>));
        }
        public void BlocksRequestProcessor_Works_With_Actions()
        {
            var blocksReqProc = new BlocksRequestProcessor <User>();

            Assert.IsAssignableFrom <IRequestProcessorWithAction <User> >(blocksReqProc);
        }