public void TestUpdateRateLimitResponse()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();

            twilioRestClient.AccountSid.Returns("ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
            twilioRestClient.Request(Arg.Any <Request>())
            .Returns(new Response(
                         System.Net.HttpStatusCode.OK,
                         "{\"sid\": \"RKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"service_sid\": \"VAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"account_sid\": \"ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"unique_name\": \"unique.name\",\"description\": \"Description\",\"date_created\": \"2015-07-30T20:00:00Z\",\"date_updated\": \"2015-07-30T20:00:00Z\",\"url\": \"https://verify.twilio.com/v2/Services/VAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/RateLimits/RKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"links\": {\"buckets\": \"https://verify.twilio.com/v2/Services/VAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/RateLimits/RKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Buckets\"}}"
                         ));

            var response = RateLimitResource.Update("VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "RKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", client: twilioRestClient);

            Assert.NotNull(response);
        }
        public void TestDeleteResponse()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();

            twilioRestClient.AccountSid.Returns("ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
            twilioRestClient.Request(Arg.Any <Request>())
            .Returns(new Response(
                         System.Net.HttpStatusCode.NoContent,
                         "null"
                         ));

            var response = RateLimitResource.Delete("VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "RKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", client: twilioRestClient);

            Assert.NotNull(response);
        }
        public void TestReadAllResponse()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();

            twilioRestClient.AccountSid.Returns("ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
            twilioRestClient.Request(Arg.Any <Request>())
            .Returns(new Response(
                         System.Net.HttpStatusCode.OK,
                         "{\"meta\": {\"page\": 0,\"page_size\": 50,\"first_page_url\": \"https://verify.twilio.com/v2/Services/VAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/RateLimits?PageSize=50&Page=0\",\"previous_page_url\": null,\"next_page_url\": null,\"key\": \"rate_limits\",\"url\": \"https://verify.twilio.com/v2/Services/VAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/RateLimits?PageSize=50&Page=0\"},\"rate_limits\": [{\"sid\": \"RKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"service_sid\": \"VAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"account_sid\": \"ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"unique_name\": \"unique.name\",\"description\": \"Description\",\"date_created\": \"2015-07-30T20:00:00Z\",\"date_updated\": \"2015-07-30T20:00:00Z\",\"url\": \"https://verify.twilio.com/v2/Services/VAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/RateLimits/RKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\",\"links\": {\"buckets\": \"https://verify.twilio.com/v2/Services/VAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/RateLimits/RKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Buckets\"}}]}"
                         ));

            var response = RateLimitResource.Read("VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", client: twilioRestClient);

            Assert.NotNull(response);
        }
        public void TestUpdateRequest()
        {
            var twilioRestClient = Substitute.For <ITwilioRestClient>();
            var request          = new Request(
                HttpMethod.Post,
                Twilio.Rest.Domain.Verify,
                "/v2/Services/VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/RateLimits/RKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
                ""
                );

            twilioRestClient.Request(request).Throws(new ApiException("Server Error, no content"));

            try
            {
                RateLimitResource.Update("VAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "RKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", client: twilioRestClient);
                Assert.Fail("Expected TwilioException to be thrown for 500");
            }
            catch (ApiException) {}
            twilioRestClient.Received().Request(request);
        }
 internal void UpdateRateLimits(TweetListType TweetType, RateLimitResource rateLimiting, string additionalInfo = "")
 {
     try
     {
         if (this.RateLimits == null)
         {
             this.RateLimits = new RateLimitStatus();
             this.RateLimits.Resources = new Dictionary<string, Dictionary<string, RateLimitResource>>();
         }
         switch (TweetType)
         {
             case TweetListType.FriendsTimeline:
                 if (!this.RateLimits.Resources.ContainsKey("statuses"))
                     this.RateLimits.Resources.Add("statuses", new Dictionary<string, RateLimitResource>());
                 if (this.RateLimits.Resources["statuses"] != null && !this.RateLimits.Resources["statuses"].ContainsKey("/statuses/home_timeline"))
                     this.RateLimits.Resources["statuses"].Add("/statuses/home_timeline", new RateLimitResource());
                 if (this.RateLimits.Resources["statuses"]["/statuses/home_timeline"] == null || rateLimiting.Limit <= 0)
                     break;
                 this.RateLimits.Resources["statuses"]["/statuses/home_timeline"] = rateLimiting;
                 break;
             case TweetListType.DirectMessages:
                 if (!this.RateLimits.Resources.ContainsKey("direct_messages"))
                     this.RateLimits.Resources.Add("direct_messages", new Dictionary<string, RateLimitResource>());
                 if (additionalInfo == "R")
                 {
                     if (this.RateLimits.Resources["direct_messages"] != null && !this.RateLimits.Resources["direct_messages"].ContainsKey("/direct_messages"))
                         this.RateLimits.Resources["direct_messages"].Add("/direct_messages", new RateLimitResource());
                     if (this.RateLimits.Resources["direct_messages"]["/direct_messages"] != null && rateLimiting.Limit > 0)
                         this.RateLimits.Resources["direct_messages"]["/direct_messages"] = rateLimiting;
                 }
                 if (!(additionalInfo == "S"))
                     break;
                 if (this.RateLimits.Resources["direct_messages"] != null && !this.RateLimits.Resources["direct_messages"].ContainsKey("/direct_messages/sent"))
                     this.RateLimits.Resources["direct_messages"].Add("/direct_messages/sent", new RateLimitResource());
                 if (this.RateLimits.Resources["direct_messages"]["/direct_messages/sent"] != null && rateLimiting.Limit > 0)
                     this.RateLimits.Resources["direct_messages"]["/direct_messages/sent"] = rateLimiting;
                 break;
             case TweetListType.Search:
                 if (!this.RateLimits.Resources.ContainsKey("search"))
                     this.RateLimits.Resources.Add("search", new Dictionary<string, RateLimitResource>());
                 if (this.RateLimits.Resources["search"] != null && !this.RateLimits.Resources["search"].ContainsKey("/search/tweets"))
                     this.RateLimits.Resources["search"].Add("/search/tweets", new RateLimitResource());
                 if (this.RateLimits.Resources["search"]["/search/tweets"] == null || rateLimiting.Limit <= 0)
                     break;
                 this.RateLimits.Resources["search"]["/search/tweets"] = rateLimiting;
                 break;
             case TweetListType.UserTimeline:
                 if (!this.RateLimits.Resources.ContainsKey("statuses"))
                     this.RateLimits.Resources.Add("statuses", new Dictionary<string, RateLimitResource>());
                 if (this.RateLimits.Resources["statuses"] != null && !this.RateLimits.Resources["statuses"].ContainsKey("/statuses/user_timeline"))
                     this.RateLimits.Resources["statuses"].Add("/statuses/user_timeline", new RateLimitResource());
                 if (this.RateLimits.Resources["statuses"]["/statuses/user_timeline"] == null || rateLimiting.Limit <= 0)
                     break;
                 this.RateLimits.Resources["statuses"]["/statuses/user_timeline"] = rateLimiting;
                 break;
             case TweetListType.List:
                 if (!this.RateLimits.Resources.ContainsKey("lists"))
                     this.RateLimits.Resources.Add("lists", new Dictionary<string, RateLimitResource>());
                 if (this.RateLimits.Resources["lists"] != null && !this.RateLimits.Resources["lists"].ContainsKey("/lists/statuses"))
                     this.RateLimits.Resources["lists"].Add("/lists/statuses", new RateLimitResource());
                 if (this.RateLimits.Resources["lists"]["/lists/statuses"] == null || rateLimiting.Limit <= 0)
                     break;
                 this.RateLimits.Resources["lists"]["/lists/statuses"] = rateLimiting;
                 break;
             case TweetListType.MentionsMyTweetsRetweeted:
                 if (!this.RateLimits.Resources.ContainsKey("statuses"))
                     this.RateLimits.Resources.Add("statuses", new Dictionary<string, RateLimitResource>());
                 if (additionalInfo == "M")
                 {
                     if (this.RateLimits.Resources["statuses"] != null && !this.RateLimits.Resources["statuses"].ContainsKey("/statuses/mentions_timeline"))
                         this.RateLimits.Resources["statuses"].Add("/statuses/mentions_timeline", new RateLimitResource());
                     if (this.RateLimits.Resources["statuses"]["/statuses/mentions_timeline"] != null && rateLimiting.Limit > 0)
                         this.RateLimits.Resources["statuses"]["/statuses/mentions_timeline"] = rateLimiting;
                 }
                 if (!(additionalInfo == "R"))
                     break;
                 if (this.RateLimits.Resources["statuses"] != null && !this.RateLimits.Resources["statuses"].ContainsKey("/statuses/retweets_of_me"))
                     this.RateLimits.Resources["statuses"].Add("/statuses/retweets_of_me", new RateLimitResource());
                 if (this.RateLimits.Resources["statuses"]["/statuses/retweets_of_me"] != null && rateLimiting.Limit > 0)
                     this.RateLimits.Resources["statuses"]["/statuses/retweets_of_me"] = rateLimiting;
                 break;
             case TweetListType.MyTweets:
                 if (!this.RateLimits.Resources.ContainsKey("statuses"))
                     this.RateLimits.Resources.Add("statuses", new Dictionary<string, RateLimitResource>());
                 if (this.RateLimits.Resources["statuses"] != null && !this.RateLimits.Resources["statuses"].ContainsKey("/statuses/user_timeline"))
                     this.RateLimits.Resources["statuses"].Add("/statuses/user_timeline", new RateLimitResource());
                 if (this.RateLimits.Resources["statuses"]["/statuses/user_timeline"] == null || rateLimiting.Limit <= 0)
                     break;
                 this.RateLimits.Resources["statuses"]["/statuses/user_timeline"] = rateLimiting;
                 break;
             case TweetListType.Favourites:
                 if (!this.RateLimits.Resources.ContainsKey("statuses"))
                     this.RateLimits.Resources.Add("statuses", new Dictionary<string, RateLimitResource>());
                 if (this.RateLimits.Resources["statuses"] != null && !this.RateLimits.Resources["statuses"].ContainsKey("/favorites/list"))
                     this.RateLimits.Resources["statuses"].Add("/favorites/list", new RateLimitResource());
                 if (this.RateLimits.Resources["statuses"]["/favorites/list"] == null || rateLimiting.Limit <= 0)
                     break;
                 this.RateLimits.Resources["statuses"]["/favorites/list"] = rateLimiting;
                 break;
             case TweetListType.Conversation:
                 if (!this.RateLimits.Resources.ContainsKey("statuses"))
                     this.RateLimits.Resources.Add("statuses", new Dictionary<string, RateLimitResource>());
                 if (this.RateLimits.Resources["statuses"] != null && !this.RateLimits.Resources["statuses"].ContainsKey("/statuses/show/:id"))
                     this.RateLimits.Resources["statuses"].Add("/statuses/show/:id", new RateLimitResource());
                 if (this.RateLimits.Resources["statuses"]["/statuses/show/:id"] == null || rateLimiting.Limit <= 0)
                     break;
                 this.RateLimits.Resources["statuses"]["/statuses/show/:id"] = rateLimiting;
                 break;
             case TweetListType.RetweetUsers:
                 if (!this.RateLimits.Resources.ContainsKey("statuses"))
                     this.RateLimits.Resources.Add("statuses", new Dictionary<string, RateLimitResource>());
                 if (this.RateLimits.Resources["statuses"] != null && !this.RateLimits.Resources["statuses"].ContainsKey("/statuses/retweets/:id"))
                     this.RateLimits.Resources["statuses"].Add("/statuses/retweets/:id", new RateLimitResource());
                 if (this.RateLimits.Resources["statuses"]["/statuses/retweets/:id"] == null || rateLimiting.Limit <= 0)
                     break;
                 this.RateLimits.Resources["statuses"]["/statuses/retweets/:id"] = rateLimiting;
                 break;
         }
     }
     catch
     {
     }
 }