2 using System.Configuration;
3 using System.Diagnostics;
6 using Hammock.Authentication.OAuth;
10 namespace Hammock.Tests
13 public class RestClientTests
15 private string _consumerKey;
16 private string _consumerSecret;
17 private string _accessToken;
18 private string _accessTokenSecret;
19 private string _twitPicKey;
24 _consumerKey = ConfigurationManager.AppSettings["OAuthConsumerKey"];
25 _consumerSecret = ConfigurationManager.AppSettings["OAuthConsumerSecret"];
26 _accessToken = ConfigurationManager.AppSettings["OAuthAccessToken"];
27 _accessTokenSecret = ConfigurationManager.AppSettings["OAuthAccessTokenSecret"];
28 _twitPicKey = ConfigurationManager.AppSettings["TwitPicKey"];
30 ServicePointManager.Expect100Continue = false;
34 public void Can_request_get()
36 var client = new RestClient
38 Authority = "https://api.twitter.com",
42 var request = new RestRequest
44 Path = "statuses/public_timeline.json",
45 DecompressionMethods = DecompressionMethods.GZip |
46 DecompressionMethods.Deflate
49 var response = client.Request(request);
51 Assert.IsNotNull(response);
52 Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
56 public void Can_request_get_with_header_on_client()
58 var client = new RestClient
60 Authority = "https://api.twitter.com",
61 UserAgent = "Hammock",
62 Path = "statuses/public_timeline.json",
63 DecompressionMethods = DecompressionMethods.GZip | DecompressionMethods.Deflate
66 client.AddHeader("Accept", "application/json");
68 var response = client.Request();
70 Assert.IsNotNull(response);
71 Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
75 public void Can_get_oauth_request_token()
77 var client = new RestClient
79 Authority = "https://api.twitter.com",
83 var request = new RestRequest
85 Path = "oauth/request_token",
86 Credentials = OAuthCredentials.ForRequestToken(_consumerKey, _consumerSecret)
89 var response = client.Request(request);
90 Assert.IsNotNull(response);
91 Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
93 Trace.WriteLine(response.Content);
97 public void Can_post_to_protected_resource()
99 var client = new RestClient
101 Authority = "https://api.twitter.com",
103 UserAgent = "Hammock"
106 var request = new RestRequest
108 Method = WebMethod.Post,
109 Path = "statuses/update.json?status=" + DateTime.Now.Ticks,
110 Credentials = OAuthCredentials.ForProtectedResource(
111 _consumerKey, _consumerSecret, _accessToken, _accessTokenSecret
115 var response = client.Request(request);
116 Assert.IsNotNull(response);
117 Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
121 public void Can_post_raw_content()
123 var client = new RestClient {Authority = "http://www.apitize.com"};
124 var request = new RestRequest();
125 request.AddPostContent(Encoding.UTF8.GetBytes("Babbabooey!"));
127 client.Request(request);
131 public void Can_stream_photo_over_delegated_credentials()
133 var client = new RestClient
135 Authority = "http://api.twitpic.com",
137 UserAgent = "Hammock"
140 var request = PrepareEchoRequest();
141 request.Method = WebMethod.Get;
142 request.Path = "upload.xml";
143 request.AddField("key", _twitPicKey);
144 request.AddFile("media", "failwhale", "_failwhale.jpg", "image/jpeg");
146 var response = client.Request(request);
147 Assert.IsNotNull(response);
148 Console.WriteLine(response.Content);
152 [Ignore("Makes a live status update")]
153 public void Can_prepare_oauth_with_url_parameters()
155 var client = new RestClient
157 Authority = "http://api.twitter.com",
158 UserAgent = "Hammock"
161 var credentials = OAuthCredentials.ForProtectedResource(_consumerKey, _consumerSecret, _accessToken, _accessTokenSecret);
162 credentials.ParameterHandling = OAuthParameterHandling.UrlOrPostParameters;
164 var request = new RestRequest
166 Path = "statuses/update.json",
167 Method = WebMethod.Post,
168 Credentials = credentials
171 request.AddParameter("status", DateTime.Now.Ticks.ToString());
172 request.AddParameter("test", "value");
174 var response = client.Request(request);
175 Assert.IsNotNull(response);
177 Console.WriteLine(response.Content);
179 Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
184 public void Can_make_dynamic_request_for_collection()
186 var client = new RestClient
188 Authority = "https://api.twitter.com",
189 UserAgent = "Hammock"
192 var request = new RestRequest
194 Path = "statuses/public_timeline.json",
195 Method = WebMethod.Get
198 var response = client.RequestDynamic(request);
199 Assert.IsNotNull(response);
200 foreach (var tweet in response.ContentEntity)
202 Assert.IsNotNull(tweet);
203 Assert.IsNotNullOrEmpty(tweet.Text);
205 Can_handle_nested_dynamic_json(tweet);
207 Console.WriteLine(tweet.Text);
211 private static void Can_handle_nested_dynamic_json(dynamic tweet)
213 var firstLevel = tweet.User;
214 Assert.IsNotNull(firstLevel);
216 var secondLevel = firstLevel.ScreenName;
217 Assert.IsNotNull(secondLevel);
221 public void Can_make_dynamic_request_for_single()
223 var client = new RestClient
225 Authority = "https://api.twitter.com",
226 UserAgent = "Hammock"
229 var request = new RestRequest
231 Path = "users/show.json?screen_name=hammockrest",
232 Method = WebMethod.Get
235 var response = client.RequestDynamic(request).ContentEntity;
236 Assert.IsNotNull(response);
237 Assert.IsNotNull(response.ScreenName);
241 public RestRequest PrepareEchoRequest()
243 var client = new RestClient
245 Authority = "https://api.twitter.com",
247 UserAgent = "TweetSharp"
250 var request = new RestRequest
252 Method = WebMethod.Get,
253 Path = "account/verify_credentials.json",
254 Credentials = OAuthCredentials.ForProtectedResource(
255 _consumerKey, _consumerSecret, _accessToken, _accessTokenSecret
259 return OAuthCredentials.DelegateWith(client, request);