twitter 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (210) hide show
  1. data/CHANGELOG.md +673 -0
  2. data/LICENSE.md +20 -0
  3. data/README.md +415 -0
  4. data/Rakefile +11 -0
  5. data/lib/twitter.rb +29 -0
  6. data/lib/twitter/action/favorite.rb +19 -0
  7. data/lib/twitter/action/follow.rb +31 -0
  8. data/lib/twitter/action/list_member_added.rb +41 -0
  9. data/lib/twitter/action/mention.rb +48 -0
  10. data/lib/twitter/action/reply.rb +27 -0
  11. data/lib/twitter/action/retweet.rb +27 -0
  12. data/lib/twitter/action/tweet.rb +22 -0
  13. data/lib/twitter/action_factory.rb +22 -0
  14. data/lib/twitter/api.rb +2442 -0
  15. data/lib/twitter/base.rb +119 -0
  16. data/lib/twitter/basic_user.rb +8 -0
  17. data/lib/twitter/client.rb +96 -0
  18. data/lib/twitter/configurable.rb +67 -0
  19. data/lib/twitter/configuration.rb +20 -0
  20. data/lib/twitter/core_ext/array.rb +7 -0
  21. data/lib/twitter/core_ext/enumerable.rb +11 -0
  22. data/lib/twitter/core_ext/hash.rb +100 -0
  23. data/lib/twitter/core_ext/kernel.rb +15 -0
  24. data/lib/twitter/core_ext/string.rb +10 -0
  25. data/lib/twitter/creatable.rb +20 -0
  26. data/lib/twitter/cursor.rb +87 -0
  27. data/lib/twitter/default.rb +101 -0
  28. data/lib/twitter/direct_message.rb +21 -0
  29. data/lib/twitter/entity.rb +7 -0
  30. data/lib/twitter/entity/hashtag.rb +9 -0
  31. data/lib/twitter/entity/url.rb +9 -0
  32. data/lib/twitter/entity/user_mention.rb +9 -0
  33. data/lib/twitter/error.rb +34 -0
  34. data/lib/twitter/error/bad_gateway.rb +11 -0
  35. data/lib/twitter/error/bad_request.rb +10 -0
  36. data/lib/twitter/error/client_error.rb +35 -0
  37. data/lib/twitter/error/decode_error.rb +9 -0
  38. data/lib/twitter/error/forbidden.rb +10 -0
  39. data/lib/twitter/error/gateway_timeout.rb +11 -0
  40. data/lib/twitter/error/identity_map_key_error.rb +9 -0
  41. data/lib/twitter/error/internal_server_error.rb +11 -0
  42. data/lib/twitter/error/not_acceptable.rb +10 -0
  43. data/lib/twitter/error/not_found.rb +10 -0
  44. data/lib/twitter/error/rate_limited.rb +11 -0
  45. data/lib/twitter/error/server_error.rb +28 -0
  46. data/lib/twitter/error/service_unavailable.rb +11 -0
  47. data/lib/twitter/error/unauthorized.rb +10 -0
  48. data/lib/twitter/factory.rb +21 -0
  49. data/lib/twitter/geo.rb +15 -0
  50. data/lib/twitter/geo/point.rb +22 -0
  51. data/lib/twitter/geo/polygon.rb +8 -0
  52. data/lib/twitter/geo_factory.rb +18 -0
  53. data/lib/twitter/identity.rb +50 -0
  54. data/lib/twitter/identity_map.rb +22 -0
  55. data/lib/twitter/language.rb +7 -0
  56. data/lib/twitter/list.rb +18 -0
  57. data/lib/twitter/media/photo.rb +22 -0
  58. data/lib/twitter/media_factory.rb +17 -0
  59. data/lib/twitter/metadata.rb +7 -0
  60. data/lib/twitter/oembed.rb +8 -0
  61. data/lib/twitter/place.rb +34 -0
  62. data/lib/twitter/rate_limit.rb +45 -0
  63. data/lib/twitter/relationship.rb +36 -0
  64. data/lib/twitter/request/multipart_with_file.rb +41 -0
  65. data/lib/twitter/response/parse_json.rb +25 -0
  66. data/lib/twitter/response/raise_error.rb +30 -0
  67. data/lib/twitter/saved_search.rb +9 -0
  68. data/lib/twitter/search_results.rb +48 -0
  69. data/lib/twitter/settings.rb +17 -0
  70. data/lib/twitter/size.rb +24 -0
  71. data/lib/twitter/source_user.rb +15 -0
  72. data/lib/twitter/suggestion.rb +22 -0
  73. data/lib/twitter/target_user.rb +8 -0
  74. data/lib/twitter/trend.rb +14 -0
  75. data/lib/twitter/tweet.rb +145 -0
  76. data/lib/twitter/user.rb +97 -0
  77. data/lib/twitter/version.rb +18 -0
  78. data/spec/fixtures/about_me.json +1 -0
  79. data/spec/fixtures/activity_summary.json +1 -0
  80. data/spec/fixtures/all.json +1 -0
  81. data/spec/fixtures/bad_gateway.json +1 -0
  82. data/spec/fixtures/bad_request.json +1 -0
  83. data/spec/fixtures/by_friends.json +1 -0
  84. data/spec/fixtures/category.json +1 -0
  85. data/spec/fixtures/configuration.json +1 -0
  86. data/spec/fixtures/contributees.json +1 -0
  87. data/spec/fixtures/contributors.json +1 -0
  88. data/spec/fixtures/direct_message.json +1 -0
  89. data/spec/fixtures/direct_messages.json +1 -0
  90. data/spec/fixtures/end_session.json +1 -0
  91. data/spec/fixtures/enhance_your_calm.text +11 -0
  92. data/spec/fixtures/favorites.json +1 -0
  93. data/spec/fixtures/following.json +1 -0
  94. data/spec/fixtures/forbidden.json +1 -0
  95. data/spec/fixtures/friendships.json +1 -0
  96. data/spec/fixtures/ids.json +1 -0
  97. data/spec/fixtures/ids_list.json +1 -0
  98. data/spec/fixtures/ids_list2.json +1 -0
  99. data/spec/fixtures/image_facets.json +1 -0
  100. data/spec/fixtures/internal_server_error.json +1 -0
  101. data/spec/fixtures/languages.json +1 -0
  102. data/spec/fixtures/list.json +1 -0
  103. data/spec/fixtures/lists.json +1 -0
  104. data/spec/fixtures/locations.json +1 -0
  105. data/spec/fixtures/matching_trends.json +1 -0
  106. data/spec/fixtures/me.jpeg +0 -0
  107. data/spec/fixtures/media_timeline.json +1 -0
  108. data/spec/fixtures/members.json +1 -0
  109. data/spec/fixtures/no_user_matches.json +1 -0
  110. data/spec/fixtures/not_acceptable.json +1 -0
  111. data/spec/fixtures/not_following.json +1 -0
  112. data/spec/fixtures/not_found.json +1 -0
  113. data/spec/fixtures/oembed.json +1 -0
  114. data/spec/fixtures/pbjt.gif +0 -0
  115. data/spec/fixtures/pengwynn.json +1 -0
  116. data/spec/fixtures/phoenix_search.phoenix +1 -0
  117. data/spec/fixtures/place.json +1 -0
  118. data/spec/fixtures/places.json +1 -0
  119. data/spec/fixtures/privacy.json +1 -0
  120. data/spec/fixtures/profile_image.text +24 -0
  121. data/spec/fixtures/rate_limit_status.json +1 -0
  122. data/spec/fixtures/recommendations.json +1 -0
  123. data/spec/fixtures/related_results.json +1 -0
  124. data/spec/fixtures/resolve.json +1 -0
  125. data/spec/fixtures/retweet.json +1 -0
  126. data/spec/fixtures/retweeted_status.json +1 -0
  127. data/spec/fixtures/retweeters_of.json +1 -0
  128. data/spec/fixtures/retweets.json +1 -0
  129. data/spec/fixtures/saved_search.json +1 -0
  130. data/spec/fixtures/saved_searches.json +1 -0
  131. data/spec/fixtures/search.json +1 -0
  132. data/spec/fixtures/search_malformed.json +1 -0
  133. data/spec/fixtures/service_unavailable.json +1 -0
  134. data/spec/fixtures/settings.json +1 -0
  135. data/spec/fixtures/sferik.json +1 -0
  136. data/spec/fixtures/status.json +1 -0
  137. data/spec/fixtures/status_with_media.json +104 -0
  138. data/spec/fixtures/statuses.json +1 -0
  139. data/spec/fixtures/suggestions.json +1 -0
  140. data/spec/fixtures/tos.json +1 -0
  141. data/spec/fixtures/totals.json +1 -0
  142. data/spec/fixtures/trends.json +1 -0
  143. data/spec/fixtures/trends_current.json +1 -0
  144. data/spec/fixtures/trends_daily.json +1 -0
  145. data/spec/fixtures/trends_weekly.json +1 -0
  146. data/spec/fixtures/unauthorized.json +1 -0
  147. data/spec/fixtures/user_search.json +1 -0
  148. data/spec/fixtures/user_timeline.json +1 -0
  149. data/spec/fixtures/users.json +1 -0
  150. data/spec/fixtures/users_list.json +1 -0
  151. data/spec/fixtures/video_facets.json +1 -0
  152. data/spec/fixtures/we_concept_bg2.png +0 -0
  153. data/spec/fixtures/wildcomet2.jpe +0 -0
  154. data/spec/helper.rb +53 -0
  155. data/spec/twitter/action/favorite_spec.rb +29 -0
  156. data/spec/twitter/action/follow_spec.rb +29 -0
  157. data/spec/twitter/action/list_member_added_spec.rb +41 -0
  158. data/spec/twitter/action/mention_spec.rb +52 -0
  159. data/spec/twitter/action/reply_spec.rb +41 -0
  160. data/spec/twitter/action/retweet_spec.rb +41 -0
  161. data/spec/twitter/action_factory_spec.rb +37 -0
  162. data/spec/twitter/action_spec.rb +16 -0
  163. data/spec/twitter/api/account_spec.rb +148 -0
  164. data/spec/twitter/api/activity_spec.rb +41 -0
  165. data/spec/twitter/api/blocks_spec.rb +167 -0
  166. data/spec/twitter/api/direct_messages_spec.rb +142 -0
  167. data/spec/twitter/api/friendships_spec.rb +567 -0
  168. data/spec/twitter/api/geo_spec.rb +100 -0
  169. data/spec/twitter/api/help_spec.rb +76 -0
  170. data/spec/twitter/api/lists_spec.rb +900 -0
  171. data/spec/twitter/api/report_spam_spec.rb +29 -0
  172. data/spec/twitter/api/saved_searches_spec.rb +100 -0
  173. data/spec/twitter/api/search_spec.rb +68 -0
  174. data/spec/twitter/api/statuses_spec.rb +559 -0
  175. data/spec/twitter/api/trends_spec.rb +80 -0
  176. data/spec/twitter/api/users_spec.rb +419 -0
  177. data/spec/twitter/base_spec.rb +113 -0
  178. data/spec/twitter/basic_user_spec.rb +23 -0
  179. data/spec/twitter/client_spec.rb +175 -0
  180. data/spec/twitter/configuration_spec.rb +17 -0
  181. data/spec/twitter/cursor_spec.rb +102 -0
  182. data/spec/twitter/direct_message_spec.rb +56 -0
  183. data/spec/twitter/error/client_error_spec.rb +40 -0
  184. data/spec/twitter/error/server_error_spec.rb +24 -0
  185. data/spec/twitter/error_spec.rb +20 -0
  186. data/spec/twitter/geo/point_spec.rb +41 -0
  187. data/spec/twitter/geo/polygon_spec.rb +29 -0
  188. data/spec/twitter/geo_factory_spec.rb +21 -0
  189. data/spec/twitter/geo_spec.rb +29 -0
  190. data/spec/twitter/identifiable_spec.rb +54 -0
  191. data/spec/twitter/list_spec.rb +45 -0
  192. data/spec/twitter/media/photo_spec.rb +35 -0
  193. data/spec/twitter/media_factory_spec.rb +17 -0
  194. data/spec/twitter/oembed_spec.rb +146 -0
  195. data/spec/twitter/place_spec.rb +75 -0
  196. data/spec/twitter/rate_limit_spec.rb +76 -0
  197. data/spec/twitter/relationship_spec.rb +35 -0
  198. data/spec/twitter/saved_search_spec.rb +34 -0
  199. data/spec/twitter/search_results_spec.rb +89 -0
  200. data/spec/twitter/settings_spec.rb +16 -0
  201. data/spec/twitter/size_spec.rb +38 -0
  202. data/spec/twitter/source_user_spec.rb +23 -0
  203. data/spec/twitter/suggestion_spec.rb +50 -0
  204. data/spec/twitter/target_user_spec.rb +23 -0
  205. data/spec/twitter/trend_spec.rb +38 -0
  206. data/spec/twitter/tweet_spec.rb +307 -0
  207. data/spec/twitter/user_spec.rb +127 -0
  208. data/spec/twitter_spec.rb +93 -0
  209. data/twitter.gemspec +30 -0
  210. metadata +584 -0
@@ -0,0 +1,167 @@
1
+ require 'helper'
2
+
3
+ describe Twitter::API do
4
+
5
+ before do
6
+ @client = Twitter::Client.new
7
+ end
8
+
9
+ describe "#blocking" do
10
+ before do
11
+ stub_get("/1.1/blocks/list.json").
12
+ with(:query => {:cursor => "-1"}).
13
+ to_return(:body => fixture("users_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
14
+ end
15
+ it "requests the correct resource" do
16
+ @client.blocking
17
+ a_get("/1.1/blocks/list.json").
18
+ with(:query => {:cursor => "-1"}).
19
+ should have_been_made
20
+ end
21
+ it "returns an array of user objects that the authenticating user is blocking" do
22
+ blocking = @client.blocking
23
+ blocking.should be_a Twitter::Cursor
24
+ blocking.users.should be_an Array
25
+ blocking.users.first.should be_a Twitter::User
26
+ blocking.users.first.id.should eq 7505382
27
+ end
28
+ end
29
+
30
+ describe "#blocked_ids" do
31
+ before do
32
+ stub_get("/1.1/blocks/ids.json").
33
+ with(:query => {:cursor => "-1"}).
34
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
35
+ end
36
+ it "requests the correct resource" do
37
+ @client.blocked_ids
38
+ a_get("/1.1/blocks/ids.json").
39
+ with(:query => {:cursor => "-1"}).
40
+ should have_been_made
41
+ end
42
+ it "returns an array of numeric user IDs the authenticating user is blocking" do
43
+ blocked_ids = @client.blocked_ids
44
+ blocked_ids.should be_a Twitter::Cursor
45
+ blocked_ids.ids.should be_an Array
46
+ blocked_ids.ids.first.should eq 14100886
47
+ end
48
+ end
49
+
50
+ describe "#block?" do
51
+ context "with a screen name passed" do
52
+ before do
53
+ stub_get("/1.1/blocks/ids.json").
54
+ with(:query => {:cursor => "-1"}).
55
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
56
+ stub_get("/1.1/blocks/ids.json").
57
+ with(:query => {:cursor => "1305102810874389703"}).
58
+ to_return(:body => fixture("ids_list2.json"), :headers => {:content_type => "application/json; charset=utf-8"})
59
+ stub_get("/1.1/users/show.json").
60
+ with(:query => {:screen_name => "pengwynn"}).
61
+ to_return(:body => fixture("pengwynn.json"), :headers => {:content_type => "application/json; charset=utf-8"})
62
+ stub_get("/1.1/users/show.json").
63
+ with(:query => {:screen_name => "sferik"}).
64
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
65
+ end
66
+ it "requests the correct resource" do
67
+ @client.block?("sferik")
68
+ a_get("/1.1/blocks/ids.json").
69
+ with(:query => {:cursor => "-1"}).
70
+ should have_been_made
71
+ a_get("/1.1/blocks/ids.json").
72
+ with(:query => {:cursor => "1305102810874389703"}).
73
+ should have_been_made
74
+ a_get("/1.1/users/show.json").
75
+ with(:query => {:screen_name => "sferik"}).
76
+ should have_been_made
77
+ end
78
+ it "returns true if block exists" do
79
+ block = @client.block?("pengwynn")
80
+ block.should be_true
81
+ end
82
+ it "returns false if block does not exist" do
83
+ block = @client.block?("sferik")
84
+ block.should be_false
85
+ end
86
+ end
87
+ context "with a user ID passed" do
88
+ before do
89
+ stub_get("/1.1/blocks/ids.json").
90
+ with(:query => {:cursor => "-1"}).
91
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
92
+ stub_get("/1.1/blocks/ids.json").
93
+ with(:query => {:cursor => "1305102810874389703"}).
94
+ to_return(:body => fixture("ids_list2.json"), :headers => {:content_type => "application/json; charset=utf-8"})
95
+ end
96
+ it "requests the correct resources" do
97
+ @client.block?(7505382)
98
+ a_get("/1.1/blocks/ids.json").
99
+ with(:query => {:cursor => "-1"}).
100
+ should have_been_made
101
+ a_get("/1.1/blocks/ids.json").
102
+ with(:query => {:cursor => "1305102810874389703"}).
103
+ should have_been_made
104
+ end
105
+ end
106
+ context "with a user object passed" do
107
+ before do
108
+ stub_get("/1.1/blocks/ids.json").
109
+ with(:query => {:cursor => "-1"}).
110
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
111
+ stub_get("/1.1/blocks/ids.json").
112
+ with(:query => {:cursor => "1305102810874389703"}).
113
+ to_return(:body => fixture("ids_list2.json"), :headers => {:content_type => "application/json; charset=utf-8"})
114
+ end
115
+ it "requests the correct resources" do
116
+ user = Twitter::User.new(:id => '7505382')
117
+ @client.block?(user)
118
+ a_get("/1.1/blocks/ids.json").
119
+ with(:query => {:cursor => "-1"}).
120
+ should have_been_made
121
+ a_get("/1.1/blocks/ids.json").
122
+ with(:query => {:cursor => "1305102810874389703"}).
123
+ should have_been_made
124
+ end
125
+ end
126
+ end
127
+
128
+ describe "#block" do
129
+ before do
130
+ stub_post("/1.1/blocks/create.json").
131
+ with(:body => {:screen_name => "sferik"}).
132
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
133
+ end
134
+ it "requests the correct resource" do
135
+ @client.block("sferik")
136
+ a_post("/1.1/blocks/create.json").
137
+ should have_been_made
138
+ end
139
+ it "returns an array of blocked users" do
140
+ users = @client.block("sferik")
141
+ users.should be_an Array
142
+ users.first.should be_a Twitter::User
143
+ users.first.id.should eq 7505382
144
+ end
145
+ end
146
+
147
+ describe "#unblock" do
148
+ before do
149
+ stub_post("/1.1/blocks/destroy.json").
150
+ with(:body => {:screen_name => "sferik"}).
151
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
152
+ end
153
+ it "requests the correct resource" do
154
+ @client.unblock("sferik")
155
+ a_post("/1.1/blocks/destroy.json").
156
+ with(:body => {:screen_name => "sferik"}).
157
+ should have_been_made
158
+ end
159
+ it "returns an array of un-blocked users" do
160
+ users = @client.unblock("sferik")
161
+ users.should be_an Array
162
+ users.first.should be_a Twitter::User
163
+ users.first.id.should eq 7505382
164
+ end
165
+ end
166
+
167
+ end
@@ -0,0 +1,142 @@
1
+ require 'helper'
2
+
3
+ describe Twitter::API do
4
+
5
+ before do
6
+ @client = Twitter::Client.new
7
+ end
8
+
9
+ describe "#direct_messages_received" do
10
+ before do
11
+ stub_get("/1.1/direct_messages.json").
12
+ to_return(:body => fixture("direct_messages.json"), :headers => {:content_type => "application/json; charset=utf-8"})
13
+ end
14
+ it "requests the correct resource" do
15
+ @client.direct_messages_received
16
+ a_get("/1.1/direct_messages.json").
17
+ should have_been_made
18
+ end
19
+ it "returns the 20 most recent direct messages sent to the authenticating user" do
20
+ direct_messages = @client.direct_messages_received
21
+ direct_messages.should be_an Array
22
+ direct_messages.first.should be_a Twitter::DirectMessage
23
+ direct_messages.first.sender.id.should eq 7505382
24
+ end
25
+ end
26
+
27
+ describe "#direct_messages_sent" do
28
+ before do
29
+ stub_get("/1.1/direct_messages/sent.json").
30
+ to_return(:body => fixture("direct_messages.json"), :headers => {:content_type => "application/json; charset=utf-8"})
31
+ end
32
+ it "requests the correct resource" do
33
+ @client.direct_messages_sent
34
+ a_get("/1.1/direct_messages/sent.json").
35
+ should have_been_made
36
+ end
37
+ it "returns the 20 most recent direct messages sent by the authenticating user" do
38
+ direct_messages = @client.direct_messages_sent
39
+ direct_messages.should be_an Array
40
+ direct_messages.first.should be_a Twitter::DirectMessage
41
+ direct_messages.first.sender.id.should eq 7505382
42
+ end
43
+ end
44
+
45
+ describe "#direct_message_destroy" do
46
+ before do
47
+ stub_post("/1.1/direct_messages/destroy.json").
48
+ with(:body => {:id => "1825785544"}).
49
+ to_return(:body => fixture("direct_message.json"), :headers => {:content_type => "application/json; charset=utf-8"})
50
+ end
51
+ it "requests the correct resource" do
52
+ @client.direct_message_destroy(1825785544)
53
+ a_post("/1.1/direct_messages/destroy.json").
54
+ with(:body => {:id => "1825785544"}).
55
+ should have_been_made
56
+ end
57
+ it "returns an array of deleted messages" do
58
+ direct_messages = @client.direct_message_destroy(1825785544)
59
+ direct_messages.should be_an Array
60
+ direct_messages.first.should be_a Twitter::DirectMessage
61
+ direct_messages.first.sender.id.should eq 7505382
62
+ end
63
+ end
64
+
65
+ describe "#direct_message_create" do
66
+ before do
67
+ stub_post("/1.1/direct_messages/new.json").
68
+ with(:body => {:screen_name => "pengwynn", :text => "Creating a fixture for the Twitter gem"}).
69
+ to_return(:body => fixture("direct_message.json"), :headers => {:content_type => "application/json; charset=utf-8"})
70
+ end
71
+ it "requests the correct resource" do
72
+ @client.direct_message_create("pengwynn", "Creating a fixture for the Twitter gem")
73
+ a_post("/1.1/direct_messages/new.json").
74
+ with(:body => {:screen_name => "pengwynn", :text => "Creating a fixture for the Twitter gem"}).
75
+ should have_been_made
76
+ end
77
+ it "returns the sent message" do
78
+ direct_message = @client.direct_message_create("pengwynn", "Creating a fixture for the Twitter gem")
79
+ direct_message.should be_a Twitter::DirectMessage
80
+ direct_message.text.should eq "Creating a fixture for the Twitter gem"
81
+ end
82
+ end
83
+
84
+ describe "#direct_message" do
85
+ before do
86
+ stub_get("/1.1/direct_messages/show.json").
87
+ with(:query => {:id => "1825786345"}).
88
+ to_return(:body => fixture("direct_message.json"), :headers => {:content_type => "application/json; charset=utf-8"})
89
+ end
90
+ it "requests the correct resource" do
91
+ @client.direct_message(1825786345)
92
+ a_get("/1.1/direct_messages/show.json").
93
+ with(:query => {:id => "1825786345"}).
94
+ should have_been_made
95
+ end
96
+ it "returns the specified direct message" do
97
+ direct_message = @client.direct_message(1825786345)
98
+ direct_message.should be_a Twitter::DirectMessage
99
+ direct_message.sender.id.should eq 7505382
100
+ end
101
+ end
102
+
103
+ describe "#direct_messages" do
104
+ context "with ids passed" do
105
+ before do
106
+ stub_get("/1.1/direct_messages/show.json").
107
+ with(:query => {:id => "1825786345"}).
108
+ to_return(:body => fixture("direct_message.json"), :headers => {:content_type => "application/json; charset=utf-8"})
109
+ end
110
+ it "requests the correct resource" do
111
+ @client.direct_messages(1825786345)
112
+ a_get("/1.1/direct_messages/show.json").
113
+ with(:query => {:id => "1825786345"}).
114
+ should have_been_made
115
+ end
116
+ it "returns an array of direct messages" do
117
+ direct_messages = @client.direct_messages(1825786345)
118
+ direct_messages.should be_an Array
119
+ direct_messages.first.should be_a Twitter::DirectMessage
120
+ direct_messages.first.sender.id.should eq 7505382
121
+ end
122
+ end
123
+ context "without ids passed" do
124
+ before do
125
+ stub_get("/1.1/direct_messages.json").
126
+ to_return(:body => fixture("direct_messages.json"), :headers => {:content_type => "application/json; charset=utf-8"})
127
+ end
128
+ it "requests the correct resource" do
129
+ @client.direct_messages
130
+ a_get("/1.1/direct_messages.json").
131
+ should have_been_made
132
+ end
133
+ it "returns the 20 most recent direct messages sent to the authenticating user" do
134
+ direct_messages = @client.direct_messages
135
+ direct_messages.should be_an Array
136
+ direct_messages.first.should be_a Twitter::DirectMessage
137
+ direct_messages.first.sender.id.should eq 7505382
138
+ end
139
+ end
140
+ end
141
+
142
+ end
@@ -0,0 +1,567 @@
1
+ require 'helper'
2
+
3
+ describe Twitter::API do
4
+
5
+ before do
6
+ @client = Twitter::Client.new
7
+ end
8
+
9
+ describe "#follower_ids" do
10
+ context "with a screen_name passed" do
11
+ before do
12
+ stub_get("/1.1/followers/ids.json").
13
+ with(:query => {:cursor => "-1", :screen_name => "sferik"}).
14
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
15
+ end
16
+ it "requests the correct resource" do
17
+ @client.follower_ids("sferik")
18
+ a_get("/1.1/followers/ids.json").
19
+ with(:query => {:cursor => "-1", :screen_name => "sferik"}).
20
+ should have_been_made
21
+ end
22
+ it "returns an array of numeric IDs for every user following the specified user" do
23
+ follower_ids = @client.follower_ids("sferik")
24
+ follower_ids.should be_a Twitter::Cursor
25
+ follower_ids.ids.should be_an Array
26
+ follower_ids.ids.first.should eq 14100886
27
+ end
28
+ end
29
+ context "without arguments passed" do
30
+ before do
31
+ stub_get("/1.1/followers/ids.json").
32
+ with(:query => {:cursor => "-1"}).
33
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
34
+ end
35
+ it "requests the correct resource" do
36
+ @client.follower_ids
37
+ a_get("/1.1/followers/ids.json").
38
+ with(:query => {:cursor => "-1"}).
39
+ should have_been_made
40
+ end
41
+ it "returns an array of numeric IDs for every user following the specified user" do
42
+ follower_ids = @client.follower_ids
43
+ follower_ids.should be_a Twitter::Cursor
44
+ follower_ids.ids.should be_an Array
45
+ follower_ids.ids.first.should eq 14100886
46
+ end
47
+ end
48
+ end
49
+
50
+ describe "#friend_ids" do
51
+ context "with a screen_name passed" do
52
+ before do
53
+ stub_get("/1.1/friends/ids.json").
54
+ with(:query => {:cursor => "-1", :screen_name => "sferik"}).
55
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
56
+ end
57
+ it "requests the correct resource" do
58
+ @client.friend_ids("sferik")
59
+ a_get("/1.1/friends/ids.json").
60
+ with(:query => {:cursor => "-1", :screen_name => "sferik"}).
61
+ should have_been_made
62
+ end
63
+ it "returns an array of numeric IDs for every user the specified user is following" do
64
+ friend_ids = @client.friend_ids("sferik")
65
+ friend_ids.should be_a Twitter::Cursor
66
+ friend_ids.ids.should be_an Array
67
+ friend_ids.ids.first.should eq 14100886
68
+ end
69
+ end
70
+ context "without arguments passed" do
71
+ before do
72
+ stub_get("/1.1/friends/ids.json").
73
+ with(:query => {:cursor => "-1"}).
74
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
75
+ end
76
+ it "requests the correct resource" do
77
+ @client.friend_ids
78
+ a_get("/1.1/friends/ids.json").
79
+ with(:query => {:cursor => "-1"}).
80
+ should have_been_made
81
+ end
82
+ it "returns an array of numeric IDs for every user the specified user is following" do
83
+ friend_ids = @client.friend_ids
84
+ friend_ids.should be_a Twitter::Cursor
85
+ friend_ids.ids.should be_an Array
86
+ friend_ids.ids.first.should eq 14100886
87
+ end
88
+ end
89
+ end
90
+
91
+ describe "#friendship?" do
92
+ context "with screen names passed" do
93
+ before do
94
+ stub_get("/1.1/friendships/show.json").
95
+ with(:query => {:source_screen_name => "sferik", :target_screen_name => "pengwynn"}).
96
+ to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
97
+ stub_get("/1.1/friendships/show.json").
98
+ with(:query => {:source_screen_name => "pengwynn", :target_screen_name => "sferik"}).
99
+ to_return(:body => fixture("not_following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
100
+ end
101
+ it "requests the correct resource" do
102
+ @client.friendship?("sferik", "pengwynn")
103
+ a_get("/1.1/friendships/show.json").
104
+ with(:query => {:source_screen_name => "sferik", :target_screen_name => "pengwynn"}).
105
+ should have_been_made
106
+ end
107
+ it "returns true if user A follows user B" do
108
+ friendship = @client.friendship?("sferik", "pengwynn")
109
+ friendship.should be_true
110
+ end
111
+ it "returns false if user A does not follow user B" do
112
+ friendship = @client.friendship?("pengwynn", "sferik")
113
+ friendship.should be_false
114
+ end
115
+ end
116
+ context "with user IDs passed" do
117
+ before do
118
+ stub_get("/1.1/friendships/show.json").
119
+ with(:query => {:source_id => "7505382", :target_id => "14100886"}).
120
+ to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
121
+ end
122
+ it "requests the correct resource" do
123
+ @client.friendship?(7505382, 14100886)
124
+ a_get("/1.1/friendships/show.json").
125
+ with(:query => {:source_id => "7505382", :target_id => "14100886"}).
126
+ should have_been_made
127
+ end
128
+ end
129
+ context "with user objects passed" do
130
+ before do
131
+ stub_get("/1.1/friendships/show.json").
132
+ with(:query => {:source_id => "7505382", :target_id => "14100886"}).
133
+ to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
134
+ end
135
+ it "requests the correct resource" do
136
+ user1 = Twitter::User.new(:id => '7505382')
137
+ user2 = Twitter::User.new(:id => '14100886')
138
+ @client.friendship?(user1, user2)
139
+ a_get("/1.1/friendships/show.json").
140
+ with(:query => {:source_id => "7505382", :target_id => "14100886"}).
141
+ should have_been_made
142
+ end
143
+ end
144
+ end
145
+
146
+ describe "#friendships_incoming" do
147
+ before do
148
+ stub_get("/1.1/friendships/incoming.json").
149
+ with(:query => {:cursor => "-1"}).
150
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
151
+ end
152
+ it "requests the correct resource" do
153
+ @client.friendships_incoming
154
+ a_get("/1.1/friendships/incoming.json").
155
+ with(:query => {:cursor => "-1"}).
156
+ should have_been_made
157
+ end
158
+ it "returns an array of numeric IDs for every user who has a pending request to follow the authenticating user" do
159
+ friendships_incoming = @client.friendships_incoming
160
+ friendships_incoming.should be_a Twitter::Cursor
161
+ friendships_incoming.ids.should be_an Array
162
+ friendships_incoming.ids.first.should eq 14100886
163
+ end
164
+ end
165
+
166
+ describe "#friendships_outgoing" do
167
+ before do
168
+ stub_get("/1.1/friendships/outgoing.json").
169
+ with(:query => {:cursor => "-1"}).
170
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
171
+ end
172
+ it "requests the correct resource" do
173
+ @client.friendships_outgoing
174
+ a_get("/1.1/friendships/outgoing.json").
175
+ with(:query => {:cursor => "-1"}).
176
+ should have_been_made
177
+ end
178
+ it "returns an array of numeric IDs for every protected user for whom the authenticating user has a pending follow request" do
179
+ friendships_outgoing = @client.friendships_outgoing
180
+ friendships_outgoing.should be_a Twitter::Cursor
181
+ friendships_outgoing.ids.should be_an Array
182
+ friendships_outgoing.ids.first.should eq 14100886
183
+ end
184
+ end
185
+
186
+ describe "#friendship" do
187
+ context "with screen names passed" do
188
+ before do
189
+ stub_get("/1.1/friendships/show.json").
190
+ with(:query => {:source_screen_name => "sferik", :target_screen_name => "pengwynn"}).
191
+ to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
192
+ end
193
+ it "requests the correct resource" do
194
+ @client.friendship("sferik", "pengwynn")
195
+ a_get("/1.1/friendships/show.json").
196
+ with(:query => {:source_screen_name => "sferik", :target_screen_name => "pengwynn"}).
197
+ should have_been_made
198
+ end
199
+ it "returns detailed information about the relationship between two users" do
200
+ relationship = @client.friendship("sferik", "pengwynn")
201
+ relationship.should be_a Twitter::Relationship
202
+ relationship.source.id.should eq 7505382
203
+ end
204
+ end
205
+ context "with numeric screen names passed" do
206
+ before do
207
+ stub_get("/1.1/friendships/show.json").
208
+ with(:query => {:source_screen_name => "0", :target_screen_name => "311"}).
209
+ to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
210
+ end
211
+ it "requests the correct resource" do
212
+ @client.friendship("0", "311")
213
+ a_get("/1.1/friendships/show.json").
214
+ with(:query => {:source_screen_name => "0", :target_screen_name => "311"}).
215
+ should have_been_made
216
+ end
217
+ end
218
+ context "with user IDs passed" do
219
+ before do
220
+ stub_get("/1.1/friendships/show.json").
221
+ with(:query => {:source_id => "7505382", :target_id => "14100886"}).
222
+ to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
223
+ end
224
+ it "requests the correct resource" do
225
+ @client.friendship(7505382, 14100886)
226
+ a_get("/1.1/friendships/show.json").
227
+ with(:query => {:source_id => "7505382", :target_id => "14100886"}).
228
+ should have_been_made
229
+ end
230
+ end
231
+ context "with user objects passed" do
232
+ before do
233
+ stub_get("/1.1/friendships/show.json").
234
+ with(:query => {:source_id => "7505382", :target_id => "14100886"}).
235
+ to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
236
+ end
237
+ it "requests the correct resource" do
238
+ user1 = Twitter::User.new(:id => '7505382')
239
+ user2 = Twitter::User.new(:id => '14100886')
240
+ @client.friendship(user1, user2)
241
+ a_get("/1.1/friendships/show.json").
242
+ with(:query => {:source_id => "7505382", :target_id => "14100886"}).
243
+ should have_been_made
244
+ end
245
+ end
246
+ end
247
+
248
+ describe "#follow" do
249
+ context "with :follow => true passed" do
250
+ before do
251
+ stub_get("/1.1/friends/ids.json").
252
+ with(:query => {:cursor => "-1"}).
253
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
254
+ stub_post("/1.1/users/lookup.json").
255
+ with(:body => {:screen_name => "sferik,pengwynn"}).
256
+ to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
257
+ stub_post("/1.1/friendships/create.json").
258
+ with(:body => {:user_id => "7505382", :follow => "true"}).
259
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
260
+ end
261
+ it "requests the correct resource" do
262
+ @client.follow("sferik", "pengwynn", :follow => true)
263
+ a_get("/1.1/friends/ids.json").
264
+ with(:query => {:cursor => "-1"}).
265
+ should have_been_made
266
+ a_post("/1.1/users/lookup.json").
267
+ with(:body => {:screen_name => "sferik,pengwynn"}).
268
+ should have_been_made
269
+ a_post("/1.1/friendships/create.json").
270
+ with(:body => {:user_id => "7505382", :follow => "true"}).
271
+ should have_been_made
272
+ end
273
+ it "returns an array of befriended users" do
274
+ users = @client.follow("sferik", "pengwynn", :follow => true)
275
+ users.should be_an Array
276
+ users.first.should be_a Twitter::User
277
+ users.first.id.should eq 7505382
278
+ end
279
+ end
280
+ context "with :follow => false passed" do
281
+ before do
282
+ stub_get("/1.1/friends/ids.json").
283
+ with(:query => {:cursor => "-1"}).
284
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
285
+ stub_post("/1.1/users/lookup.json").
286
+ with(:body => {:screen_name => "sferik,pengwynn"}).
287
+ to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
288
+ stub_post("/1.1/friendships/create.json").
289
+ with(:body => {:user_id => "7505382"}).
290
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
291
+ end
292
+ it "requests the correct resource" do
293
+ @client.follow("sferik", "pengwynn", :follow => false)
294
+ a_get("/1.1/friends/ids.json").
295
+ with(:query => {:cursor => "-1"}).
296
+ should have_been_made
297
+ a_post("/1.1/users/lookup.json").
298
+ with(:body => {:screen_name => "sferik,pengwynn"}).
299
+ should have_been_made
300
+ a_post("/1.1/friendships/create.json").
301
+ with(:body => {:user_id => "7505382"}).
302
+ should have_been_made
303
+ end
304
+ it "returns an array of befriended users" do
305
+ users = @client.follow("sferik", "pengwynn", :follow => false)
306
+ users.should be_an Array
307
+ users.first.should be_a Twitter::User
308
+ users.first.id.should eq 7505382
309
+ end
310
+ end
311
+ context "without :follow passed" do
312
+ before do
313
+ stub_get("/1.1/friends/ids.json").
314
+ with(:query => {:cursor => "-1"}).
315
+ to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
316
+ stub_post("/1.1/users/lookup.json").
317
+ with(:body => {:screen_name => "sferik,pengwynn"}).
318
+ to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
319
+ stub_post("/1.1/friendships/create.json").
320
+ with(:body => {:user_id => "7505382"}).
321
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
322
+ end
323
+ it "requests the correct resource" do
324
+ @client.follow("sferik", "pengwynn")
325
+ a_get("/1.1/friends/ids.json").
326
+ with(:query => {:cursor => "-1"}).
327
+ should have_been_made
328
+ a_post("/1.1/users/lookup.json").
329
+ with(:body => {:screen_name => "sferik,pengwynn"}).
330
+ should have_been_made
331
+ a_post("/1.1/friendships/create.json").
332
+ with(:body => {:user_id => "7505382"}).
333
+ should have_been_made
334
+ end
335
+ it "returns an array of befriended users" do
336
+ users = @client.follow("sferik", "pengwynn")
337
+ users.should be_an Array
338
+ users.first.should be_a Twitter::User
339
+ users.first.id.should eq 7505382
340
+ end
341
+ end
342
+ end
343
+
344
+ describe "#follow!" do
345
+ context "with :follow => true passed" do
346
+ before do
347
+ stub_post("/1.1/friendships/create.json").
348
+ with(:body => {:screen_name => "sferik", :follow => "true"}).
349
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
350
+ end
351
+ it "requests the correct resource" do
352
+ @client.follow!("sferik", :follow => true)
353
+ a_post("/1.1/friendships/create.json").
354
+ with(:body => {:screen_name => "sferik", :follow => "true"}).
355
+ should have_been_made
356
+ end
357
+ it "returns an array of befriended users" do
358
+ users = @client.follow!("sferik", :follow => true)
359
+ users.should be_an Array
360
+ users.first.should be_a Twitter::User
361
+ users.first.id.should eq 7505382
362
+ end
363
+ end
364
+ context "with :follow => false passed" do
365
+ before do
366
+ stub_post("/1.1/friendships/create.json").
367
+ with(:body => {:screen_name => "sferik"}).
368
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
369
+ end
370
+ it "requests the correct resource" do
371
+ @client.follow!("sferik", :follow => false)
372
+ a_post("/1.1/friendships/create.json").
373
+ with(:body => {:screen_name => "sferik"}).
374
+ should have_been_made
375
+ end
376
+ it "returns an array of befriended users" do
377
+ users = @client.follow!("sferik", :follow => false)
378
+ users.should be_an Array
379
+ users.first.should be_a Twitter::User
380
+ users.first.id.should eq 7505382
381
+ end
382
+ end
383
+ context "without :follow passed" do
384
+ before do
385
+ stub_post("/1.1/friendships/create.json").
386
+ with(:body => {:screen_name => "sferik"}).
387
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
388
+ end
389
+ it "requests the correct resource" do
390
+ @client.follow!("sferik")
391
+ a_post("/1.1/friendships/create.json").
392
+ with(:body => {:screen_name => "sferik"}).
393
+ should have_been_made
394
+ end
395
+ it "returns an array of befriended users" do
396
+ users = @client.follow!("sferik")
397
+ users.should be_an Array
398
+ users.first.should be_a Twitter::User
399
+ users.first.id.should eq 7505382
400
+ end
401
+ end
402
+ end
403
+
404
+ describe "#unfollow" do
405
+ before do
406
+ stub_post("/1.1/friendships/destroy.json").
407
+ with(:body => {:screen_name => "sferik"}).
408
+ to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
409
+ end
410
+ it "requests the correct resource" do
411
+ @client.unfollow("sferik")
412
+ a_post("/1.1/friendships/destroy.json").
413
+ with(:body => {:screen_name => "sferik"}).
414
+ should have_been_made
415
+ end
416
+ it "returns an array of unfollowed users" do
417
+ users = @client.friendship_destroy("sferik")
418
+ users.should be_an Array
419
+ users.first.should be_a Twitter::User
420
+ users.first.id.should eq 7505382
421
+ end
422
+ end
423
+
424
+ describe "#friendships" do
425
+ context "with screen names passed" do
426
+ before do
427
+ stub_get("/1.1/friendships/lookup.json").
428
+ with(:query => {:screen_name => "sferik,pengwynn"}).
429
+ to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
430
+ end
431
+ it "requests the correct resource" do
432
+ @client.friendships("sferik", "pengwynn")
433
+ a_get("/1.1/friendships/lookup.json").
434
+ with(:query => {:screen_name => "sferik,pengwynn"}).
435
+ should have_been_made
436
+ end
437
+ it "returns up to 100 users worth of extended information" do
438
+ friendships = @client.friendships("sferik", "pengwynn")
439
+ friendships.should be_an Array
440
+ friendships.first.should be_a Twitter::User
441
+ friendships.first.id.should eq 7505382
442
+ friendships.first.connections.should eq ["none"]
443
+ end
444
+ end
445
+ context "with numeric screen names passed" do
446
+ before do
447
+ stub_get("/1.1/friendships/lookup.json").
448
+ with(:query => {:screen_name => "0,311"}).
449
+ to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
450
+ end
451
+ it "requests the correct resource" do
452
+ @client.friendships("0", "311")
453
+ a_get("/1.1/friendships/lookup.json").
454
+ with(:query => {:screen_name => "0,311"}).
455
+ should have_been_made
456
+ end
457
+ end
458
+ context "with user IDs passed" do
459
+ before do
460
+ stub_get("/1.1/friendships/lookup.json").
461
+ with(:query => {:user_id => "7505382,14100886"}).
462
+ to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
463
+ end
464
+ it "requests the correct resource" do
465
+ @client.friendships(7505382, 14100886)
466
+ a_get("/1.1/friendships/lookup.json").
467
+ with(:query => {:user_id => "7505382,14100886"}).
468
+ should have_been_made
469
+ end
470
+ end
471
+ context "with both screen names and user IDs passed" do
472
+ before do
473
+ stub_get("/1.1/friendships/lookup.json").
474
+ with(:query => {:screen_name => "sferik", :user_id => "14100886"}).
475
+ to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
476
+ end
477
+ it "requests the correct resource" do
478
+ @client.friendships("sferik", 14100886)
479
+ a_get("/1.1/friendships/lookup.json").
480
+ with(:query => {:screen_name => "sferik", :user_id => "14100886"}).
481
+ should have_been_made
482
+ end
483
+ end
484
+ end
485
+
486
+ describe "#friendships" do
487
+ context "with screen names passed" do
488
+ before do
489
+ stub_get("/1.1/friendships/lookup.json").
490
+ with(:query => {:screen_name => "sferik,pengwynn"}).
491
+ to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
492
+ end
493
+ it "requests the correct resource" do
494
+ @client.friendships("sferik", "pengwynn")
495
+ a_get("/1.1/friendships/lookup.json").
496
+ with(:query => {:screen_name => "sferik,pengwynn"}).
497
+ should have_been_made
498
+ end
499
+ it "returns up to 100 users worth of extended information" do
500
+ friendships = @client.friendships("sferik", "pengwynn")
501
+ friendships.should be_an Array
502
+ friendships.first.should be_a Twitter::User
503
+ friendships.first.id.should eq 7505382
504
+ friendships.first.connections.should eq ["none"]
505
+ end
506
+ end
507
+ context "with numeric screen names passed" do
508
+ before do
509
+ stub_get("/1.1/friendships/lookup.json").
510
+ with(:query => {:screen_name => "0,311"}).
511
+ to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
512
+ end
513
+ it "requests the correct resource" do
514
+ @client.friendships("0", "311")
515
+ a_get("/1.1/friendships/lookup.json").
516
+ with(:query => {:screen_name => "0,311"}).
517
+ should have_been_made
518
+ end
519
+ end
520
+ context "with user IDs passed" do
521
+ before do
522
+ stub_get("/1.1/friendships/lookup.json").
523
+ with(:query => {:user_id => "7505382,14100886"}).
524
+ to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
525
+ end
526
+ it "requests the correct resource" do
527
+ @client.friendships(7505382, 14100886)
528
+ a_get("/1.1/friendships/lookup.json").
529
+ with(:query => {:user_id => "7505382,14100886"}).
530
+ should have_been_made
531
+ end
532
+ end
533
+ context "with both screen names and user IDs passed" do
534
+ before do
535
+ stub_get("/1.1/friendships/lookup.json").
536
+ with(:query => {:screen_name => "sferik", :user_id => "14100886"}).
537
+ to_return(:body => fixture("friendships.json"), :headers => {:content_type => "application/json; charset=utf-8"})
538
+ end
539
+ it "requests the correct resource" do
540
+ @client.friendships("sferik", 14100886)
541
+ a_get("/1.1/friendships/lookup.json").
542
+ with(:query => {:screen_name => "sferik", :user_id => "14100886"}).
543
+ should have_been_made
544
+ end
545
+ end
546
+ end
547
+
548
+ describe "#friendship_update" do
549
+ before do
550
+ stub_post("/1.1/friendships/update.json").
551
+ with(:body => {:screen_name => "sferik", :retweets => "true"}).
552
+ to_return(:body => fixture("following.json"), :headers => {:content_type => "application/json; charset=utf-8"})
553
+ end
554
+ it "requests the correct resource" do
555
+ @client.friendship_update("sferik", :retweets => true)
556
+ a_post("/1.1/friendships/update.json").
557
+ with(:body => {:screen_name => "sferik", :retweets => "true"}).
558
+ should have_been_made
559
+ end
560
+ it "returns detailed information about the relationship between two users" do
561
+ relationship = @client.friendship_update("sferik", :retweets => true)
562
+ relationship.should be_a Twitter::Relationship
563
+ relationship.source.id.should eq 7505382
564
+ end
565
+ end
566
+
567
+ end