twitter 4.2.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. data/CHANGELOG.md +4 -0
  2. data/lib/twitter/api/direct_messages.rb +150 -0
  3. data/lib/twitter/api/favorites.rb +132 -0
  4. data/lib/twitter/api/friends_and_followers.rb +259 -0
  5. data/lib/twitter/api/help.rb +64 -0
  6. data/lib/twitter/api/lists.rb +570 -0
  7. data/lib/twitter/api/places_and_geo.rb +121 -0
  8. data/lib/twitter/api/saved_searches.rb +98 -0
  9. data/lib/twitter/api/search.rb +37 -0
  10. data/lib/twitter/api/spam_reporting.rb +30 -0
  11. data/lib/twitter/api/suggested_users.rb +54 -0
  12. data/lib/twitter/api/timelines.rb +213 -0
  13. data/lib/twitter/api/trends.rb +63 -0
  14. data/lib/twitter/api/tweets.rb +284 -0
  15. data/lib/twitter/api/undocumented.rb +116 -0
  16. data/lib/twitter/api/users.rb +427 -0
  17. data/lib/twitter/api/utils.rb +111 -0
  18. data/lib/twitter/client.rb +41 -13
  19. data/lib/twitter/core_ext/enumerable.rb +1 -1
  20. data/lib/twitter/default.rb +16 -18
  21. data/lib/twitter/error/already_favorited.rb +1 -1
  22. data/lib/twitter/error/already_retweeted.rb +1 -1
  23. data/lib/twitter/profile_banner.rb +18 -0
  24. data/lib/twitter/version.rb +1 -1
  25. data/spec/fixtures/profile_banner.json +1 -0
  26. data/spec/twitter/api/direct_messages_spec.rb +32 -32
  27. data/spec/twitter/api/favorites_spec.rb +114 -0
  28. data/spec/twitter/api/{friendships_spec.rb → friends_and_followers_spec.rb} +146 -146
  29. data/spec/twitter/api/geo_spec.rb +28 -28
  30. data/spec/twitter/api/help_spec.rb +1 -1
  31. data/spec/twitter/api/lists_spec.rb +82 -82
  32. data/spec/twitter/api/saved_searches_spec.rb +1 -1
  33. data/spec/twitter/api/search_spec.rb +1 -17
  34. data/spec/twitter/api/{report_spam_spec.rb → spam_reporting_spec.rb} +1 -1
  35. data/spec/twitter/api/suggested_users_spec.rb +94 -0
  36. data/spec/twitter/api/timelines_spec.rb +138 -0
  37. data/spec/twitter/api/trends_spec.rb +1 -1
  38. data/spec/twitter/api/tweets_spec.rb +249 -0
  39. data/spec/twitter/api/undocumented_spec.rb +103 -0
  40. data/spec/twitter/api/users_spec.rb +308 -17
  41. data/spec/twitter/client_spec.rb +1 -1
  42. data/spec/twitter/profile_banner_spec.rb +13 -0
  43. data/twitter.gemspec +3 -2
  44. metadata +44 -21
  45. data/lib/twitter/api.rb +0 -2558
  46. data/spec/twitter/api/account_spec.rb +0 -152
  47. data/spec/twitter/api/activity_spec.rb +0 -37
  48. data/spec/twitter/api/blocks_spec.rb +0 -122
  49. data/spec/twitter/api/statuses_spec.rb +0 -541
@@ -1,6 +1,6 @@
1
1
  require 'helper'
2
2
 
3
- describe Twitter::API do
3
+ describe Twitter::API::Trends do
4
4
 
5
5
  before do
6
6
  @client = Twitter::Client.new
@@ -0,0 +1,249 @@
1
+ require 'helper'
2
+
3
+ describe Twitter::API::Tweets do
4
+
5
+ before do
6
+ @client = Twitter::Client.new
7
+ end
8
+
9
+ describe "#retweets" do
10
+ before do
11
+ stub_get("/1.1/statuses/retweets/28561922516.json").to_return(:body => fixture("retweets.json"), :headers => {:content_type => "application/json; charset=utf-8"})
12
+ end
13
+ it "requests the correct resource" do
14
+ @client.retweets(28561922516)
15
+ expect(a_get("/1.1/statuses/retweets/28561922516.json")).to have_been_made
16
+ end
17
+ it "returns up to 100 of the first retweets of a given tweet" do
18
+ tweets = @client.retweets(28561922516)
19
+ expect(tweets).to be_an Array
20
+ expect(tweets.first).to be_a Twitter::Tweet
21
+ expect(tweets.first.text).to eq "RT @gruber: As for the Series, I'm for the Giants. Fuck Texas, fuck Nolan Ryan, fuck George Bush."
22
+ end
23
+ end
24
+
25
+ describe "#retweeters_of" do
26
+ context "with ids_only passed" do
27
+ before do
28
+ stub_get("/1.1/statuses/retweets/28561922516.json").to_return(:body => fixture("retweets.json"), :headers => {:content_type => "application/json; charset=utf-8"})
29
+ end
30
+ it "requests the correct resource" do
31
+ @client.retweeters_of(28561922516, :ids_only => true)
32
+ expect(a_get("/1.1/statuses/retweets/28561922516.json")).to have_been_made
33
+ end
34
+ it "returns an array of numeric user IDs of retweeters of a Tweet" do
35
+ ids = @client.retweeters_of(28561922516, :ids_only => true)
36
+ expect(ids).to be_an Array
37
+ expect(ids.first).to eq 7505382
38
+ end
39
+ end
40
+ context "without ids_only passed" do
41
+ before do
42
+ stub_get("/1.1/statuses/retweets/28561922516.json").to_return(:body => fixture("retweets.json"), :headers => {:content_type => "application/json; charset=utf-8"})
43
+ end
44
+ it "requests the correct resource" do
45
+ @client.retweeters_of(28561922516)
46
+ expect(a_get("/1.1/statuses/retweets/28561922516.json")).to have_been_made
47
+ end
48
+ it "returns an array of user of retweeters of a Tweet" do
49
+ users = @client.retweeters_of(28561922516)
50
+ expect(users).to be_an Array
51
+ expect(users.first).to be_a Twitter::User
52
+ expect(users.first.id).to eq 7505382
53
+ end
54
+ end
55
+ end
56
+
57
+ describe "#status" do
58
+ before do
59
+ stub_get("/1.1/statuses/show/25938088801.json").to_return(:body => fixture("status.json"), :headers => {:content_type => "application/json; charset=utf-8"})
60
+ end
61
+ it "requests the correct resource" do
62
+ @client.status(25938088801)
63
+ expect(a_get("/1.1/statuses/show/25938088801.json")).to have_been_made
64
+ end
65
+ it "returns a Tweet" do
66
+ tweet = @client.status(25938088801)
67
+ expect(tweet).to be_a Twitter::Tweet
68
+ expect(tweet.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
69
+ end
70
+ end
71
+
72
+ describe "#statuses" do
73
+ before do
74
+ stub_get("/1.1/statuses/show/25938088801.json").to_return(:body => fixture("status.json"), :headers => {:content_type => "application/json; charset=utf-8"})
75
+ end
76
+ it "requests the correct resource" do
77
+ @client.statuses(25938088801)
78
+ expect(a_get("/1.1/statuses/show/25938088801.json")).to have_been_made
79
+ end
80
+ it "returns an array of Tweets" do
81
+ tweets = @client.statuses(25938088801)
82
+ expect(tweets).to be_an Array
83
+ expect(tweets.first).to be_a Twitter::Tweet
84
+ expect(tweets.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
85
+ end
86
+ end
87
+
88
+ describe "#status_destroy" do
89
+ before do
90
+ stub_post("/1.1/statuses/destroy/25938088801.json").to_return(:body => fixture("status.json"), :headers => {:content_type => "application/json; charset=utf-8"})
91
+ end
92
+ it "requests the correct resource" do
93
+ @client.status_destroy(25938088801)
94
+ expect(a_post("/1.1/statuses/destroy/25938088801.json")).to have_been_made
95
+ end
96
+ it "returns an array of Tweets" do
97
+ tweets = @client.status_destroy(25938088801)
98
+ expect(tweets).to be_an Array
99
+ expect(tweets.first).to be_a Twitter::Tweet
100
+ expect(tweets.first.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
101
+ end
102
+ end
103
+
104
+ describe "#tweet" do
105
+ before do
106
+ stub_post("/1.1/statuses/update.json").with(:body => {:status => "The problem with your code is that it's doing exactly what you told it to do."}).to_return(:body => fixture("status.json"), :headers => {:content_type => "application/json; charset=utf-8"})
107
+ end
108
+ it "requests the correct resource" do
109
+ @client.update("The problem with your code is that it's doing exactly what you told it to do.")
110
+ expect(a_post("/1.1/statuses/update.json").with(:body => {:status => "The problem with your code is that it's doing exactly what you told it to do."})).to have_been_made
111
+ end
112
+ it "returns a Tweet" do
113
+ tweet = @client.update("The problem with your code is that it's doing exactly what you told it to do.")
114
+ expect(tweet).to be_a Twitter::Tweet
115
+ expect(tweet.text).to eq "The problem with your code is that it's doing exactly what you told it to do."
116
+ end
117
+ end
118
+
119
+ describe "#retweet" do
120
+ before do
121
+ stub_post("/1.1/statuses/retweet/28561922516.json").to_return(:body => fixture("retweet.json"), :headers => {:content_type => "application/json; charset=utf-8"})
122
+ end
123
+ it "requests the correct resource" do
124
+ @client.retweet(28561922516)
125
+ expect(a_post("/1.1/statuses/retweet/28561922516.json")).to have_been_made
126
+ end
127
+ it "returns an array of Tweets with retweet details embedded" do
128
+ tweets = @client.retweet(28561922516)
129
+ expect(tweets).to be_an Array
130
+ expect(tweets.first).to be_a Twitter::Tweet
131
+ expect(tweets.first.text).to eq "As for the Series, I'm for the Giants. Fuck Texas, fuck Nolan Ryan, fuck George Bush."
132
+ expect(tweets.first.retweeted_tweet.text).to eq "RT @gruber: As for the Series, I'm for the Giants. Fuck Texas, fuck Nolan Ryan, fuck George Bush."
133
+ expect(tweets.first.retweeted_tweet.id).not_to eq tweets.first.id
134
+ end
135
+ context "already retweeted" do
136
+ before do
137
+ stub_post("/1.1/statuses/retweet/28561922516.json").to_return(:status => 403, :body => fixture("already_retweeted.json"), :headers => {:content_type => "application/json; charset=utf-8"})
138
+ end
139
+ it "does not raise an error" do
140
+ expect{@client.retweet(28561922516)}.not_to raise_error
141
+ end
142
+ end
143
+ end
144
+
145
+ describe "#retweet!" do
146
+ before do
147
+ stub_post("/1.1/statuses/retweet/28561922516.json").to_return(:body => fixture("retweet.json"), :headers => {:content_type => "application/json; charset=utf-8"})
148
+ end
149
+ it "requests the correct resource" do
150
+ @client.retweet!(28561922516)
151
+ expect(a_post("/1.1/statuses/retweet/28561922516.json")).to have_been_made
152
+ end
153
+ it "returns an array of Tweets with retweet details embedded" do
154
+ tweets = @client.retweet!(28561922516)
155
+ expect(tweets).to be_an Array
156
+ expect(tweets.first).to be_a Twitter::Tweet
157
+ expect(tweets.first.text).to eq "As for the Series, I'm for the Giants. Fuck Texas, fuck Nolan Ryan, fuck George Bush."
158
+ expect(tweets.first.retweeted_tweet.text).to eq "RT @gruber: As for the Series, I'm for the Giants. Fuck Texas, fuck Nolan Ryan, fuck George Bush."
159
+ expect(tweets.first.retweeted_tweet.id).not_to eq tweets.first.id
160
+ end
161
+ context "fobidden" do
162
+ before do
163
+ stub_post("/1.1/statuses/retweet/28561922516.json").to_return(:status => 403, :headers => {:content_type => "application/json; charset=utf-8"})
164
+ end
165
+ it "raises a Forbidden error" do
166
+ expect{@client.retweet!(28561922516)}.to raise_error(Twitter::Error::Forbidden)
167
+ end
168
+ end
169
+ context "already retweeted" do
170
+ before do
171
+ stub_post("/1.1/statuses/retweet/28561922516.json").to_return(:status => 403, :body => fixture("already_retweeted.json"), :headers => {:content_type => "application/json; charset=utf-8"})
172
+ end
173
+ it "raises an AlreadyRetweeted error" do
174
+ expect{@client.retweet!(28561922516)}.to raise_error(Twitter::Error::AlreadyRetweeted, "Tweet with the ID 28561922516 has already been retweeted by the authenticated user.")
175
+ end
176
+ end
177
+ end
178
+
179
+ describe "#update_with_media" do
180
+ before do
181
+ stub_post("/1.1/statuses/update_with_media.json").to_return(:body => fixture("status_with_media.json"), :headers => {:content_type => "application/json; charset=utf-8"})
182
+ end
183
+ context "a gif image" do
184
+ it "requests the correct resource" do
185
+ @client.update_with_media("You always have options", fixture("pbjt.gif"))
186
+ expect(a_post("/1.1/statuses/update_with_media.json")).to have_been_made
187
+ end
188
+ it "returns a Tweet" do
189
+ tweet = @client.update_with_media("You always have options", fixture("pbjt.gif"))
190
+ expect(tweet).to be_a Twitter::Tweet
191
+ expect(tweet.text).to eq "You always have options http://t.co/CBYa7Ri"
192
+ end
193
+ end
194
+ context "a jpe image" do
195
+ it "requests the correct resource" do
196
+ @client.update_with_media("You always have options", fixture("wildcomet2.jpe"))
197
+ expect(a_post("/1.1/statuses/update_with_media.json")).to have_been_made
198
+ end
199
+ end
200
+ context "a jpeg image" do
201
+ it "requests the correct resource" do
202
+ @client.update_with_media("You always have options", fixture("me.jpeg"))
203
+ expect(a_post("/1.1/statuses/update_with_media.json")).to have_been_made
204
+ end
205
+ end
206
+ context "a png image" do
207
+ it "requests the correct resource" do
208
+ @client.update_with_media("You always have options", fixture("we_concept_bg2.png"))
209
+ expect(a_post("/1.1/statuses/update_with_media.json")).to have_been_made
210
+ end
211
+ end
212
+ context "a Tempfile" do
213
+ it "requests the correct resource" do
214
+ @client.update_with_media("You always have options", Tempfile.new("tmp"))
215
+ expect(a_post("/1.1/statuses/update_with_media.json")).to have_been_made
216
+ end
217
+ end
218
+ end
219
+
220
+ describe "#oembed" do
221
+ before do
222
+ stub_get("/1.1/statuses/oembed.json").with(:query => {:id => "25938088801"}).to_return(:body => fixture("oembed.json"), :headers => {:content_type => "application/json; charset=utf-8"})
223
+ end
224
+ it "requests the correct resource" do
225
+ @client.oembed(25938088801)
226
+ expect(a_get("/1.1/statuses/oembed.json").with(:query => {:id => "25938088801"})).to have_been_made
227
+ end
228
+ it "returns an array of OEmbed instances" do
229
+ oembed = @client.oembed(25938088801)
230
+ expect(oembed).to be_a Twitter::OEmbed
231
+ end
232
+ end
233
+
234
+ describe "#oembeds" do
235
+ before do
236
+ stub_get("/1.1/statuses/oembed.json").with(:query => {:id => "25938088801"}).to_return(:body => fixture("oembed.json"), :headers => {:content_type => "application/json; charset=utf-8"})
237
+ end
238
+ it "requests the correct resource" do
239
+ @client.oembeds(25938088801)
240
+ expect(a_get("/1.1/statuses/oembed.json").with(:query => {:id => "25938088801"})).to have_been_made
241
+ end
242
+ it "returns an array of OEmbed instances" do
243
+ oembeds = @client.oembeds(25938088801)
244
+ expect(oembeds).to be_an Array
245
+ expect(oembeds.first).to be_a Twitter::OEmbed
246
+ end
247
+ end
248
+
249
+ end
@@ -0,0 +1,103 @@
1
+ require 'helper'
2
+
3
+ describe Twitter::API::Undocumented do
4
+
5
+ before do
6
+ @client = Twitter::Client.new
7
+ end
8
+
9
+ describe "#activity_about_me" do
10
+ before do
11
+ stub_get("/i/activity/about_me.json").to_return(:body => fixture("about_me.json"), :headers => {:content_type => "application/json; charset=utf-8"})
12
+ end
13
+ it "requests the correct resource" do
14
+ @client.activity_about_me
15
+ expect(a_get("/i/activity/about_me.json")).to have_been_made
16
+ end
17
+ it "returns activity about me" do
18
+ activity_about_me = @client.activity_about_me
19
+ expect(activity_about_me.first).to be_a Twitter::Action::Mention
20
+ end
21
+ end
22
+
23
+ describe "#activity_by_friends" do
24
+ before do
25
+ stub_get("/i/activity/by_friends.json").to_return(:body => fixture("by_friends.json"), :headers => {:content_type => "application/json; charset=utf-8"})
26
+ end
27
+ it "requests the correct resource" do
28
+ @client.activity_by_friends
29
+ expect(a_get("/i/activity/by_friends.json")).to have_been_made
30
+ end
31
+ it "returns activity by friends" do
32
+ activity_by_friends = @client.activity_by_friends
33
+ expect(activity_by_friends.first).to be_a Twitter::Action::Favorite
34
+ end
35
+ end
36
+
37
+ describe "#following_followers_of" do
38
+ context "with a screen_name passed" do
39
+ before do
40
+ stub_get("/users/following_followers_of.json").with(:query => {:cursor => "-1", :screen_name => "sferik"}).to_return(:body => fixture("users_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
41
+ end
42
+ it "requests the correct resource" do
43
+ @client.following_followers_of("sferik")
44
+ expect(a_get("/users/following_followers_of.json").with(:query => {:cursor => "-1", :screen_name => "sferik"})).to have_been_made
45
+ end
46
+ it "returns an array of numeric IDs for every user following the specified user" do
47
+ following_followers_of = @client.following_followers_of("sferik")
48
+ expect(following_followers_of).to be_a Twitter::Cursor
49
+ expect(following_followers_of.users).to be_an Array
50
+ expect(following_followers_of.users.first).to be_a Twitter::User
51
+ end
52
+ end
53
+ context "without arguments passed" do
54
+ before do
55
+ stub_get("/1.1/account/verify_credentials.json").to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
56
+ stub_get("/users/following_followers_of.json").with(:query => {:cursor => "-1", :screen_name => "sferik"}).to_return(:body => fixture("users_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
57
+ end
58
+ it "requests the correct resource" do
59
+ @client.following_followers_of
60
+ expect(a_get("/1.1/account/verify_credentials.json")).to have_been_made
61
+ expect(a_get("/users/following_followers_of.json").with(:query => {:cursor => "-1", :screen_name => "sferik"})).to have_been_made
62
+ end
63
+ it "returns an array of numeric IDs for every user following the specified user" do
64
+ following_followers_of = @client.following_followers_of
65
+ expect(following_followers_of).to be_a Twitter::Cursor
66
+ expect(following_followers_of.users).to be_an Array
67
+ expect(following_followers_of.users.first).to be_a Twitter::User
68
+ end
69
+ end
70
+ end
71
+
72
+ describe "#status_activity" do
73
+ before do
74
+ stub_get("/i/statuses/25938088801/activity/summary.json").to_return(:body => fixture("activity_summary.json"), :headers => {:content_type => "application/json; charset=utf-8"})
75
+ end
76
+ it "requests the correct resource" do
77
+ @client.status_activity(25938088801)
78
+ expect(a_get("/i/statuses/25938088801/activity/summary.json")).to have_been_made
79
+ end
80
+ it "returns a Tweet" do
81
+ tweet = @client.status_activity(25938088801)
82
+ expect(tweet).to be_a Twitter::Tweet
83
+ expect(tweet.retweeters_count).to eq 1
84
+ end
85
+ end
86
+
87
+ describe "#statuses_activity" do
88
+ before do
89
+ stub_get("/i/statuses/25938088801/activity/summary.json").to_return(:body => fixture("activity_summary.json"), :headers => {:content_type => "application/json; charset=utf-8"})
90
+ end
91
+ it "requests the correct resource" do
92
+ @client.statuses_activity(25938088801)
93
+ expect(a_get("/i/statuses/25938088801/activity/summary.json")).to have_been_made
94
+ end
95
+ it "returns an array of Tweets" do
96
+ tweets = @client.statuses_activity(25938088801)
97
+ expect(tweets).to be_an Array
98
+ expect(tweets.first).to be_a Twitter::Tweet
99
+ expect(tweets.first.retweeters_count).to eq 1
100
+ end
101
+ end
102
+
103
+ end
@@ -1,11 +1,126 @@
1
1
  require 'helper'
2
2
 
3
- describe Twitter::API do
3
+ describe Twitter::API::Users do
4
4
 
5
5
  before do
6
6
  @client = Twitter::Client.new
7
7
  end
8
8
 
9
+ describe "#settings" do
10
+ before do
11
+ stub_get("/1.1/account/settings.json").to_return(:body => fixture("settings.json"), :headers => {:content_type => "application/json; charset=utf-8"})
12
+ stub_post("/1.1/account/settings.json").with(:body => {:trend_location_woeid => "23424803"}).to_return(:body => fixture("settings.json"), :headers => {:content_type => "application/json; charset=utf-8"})
13
+ end
14
+ it "requests the correct resource on GET" do
15
+ @client.settings
16
+ expect(a_get("/1.1/account/settings.json")).to have_been_made
17
+ end
18
+ it "returns settings" do
19
+ settings = @client.settings
20
+ expect(settings).to be_a Twitter::Settings
21
+ expect(settings.language).to eq 'en'
22
+ end
23
+ it "requests the correct resource on POST" do
24
+ @client.settings(:trend_location_woeid => "23424803")
25
+ expect(a_post("/1.1/account/settings.json").with(:body => {:trend_location_woeid => "23424803"})).to have_been_made
26
+ end
27
+ it "returns settings" do
28
+ settings = @client.settings(:trend_location_woeid => "23424803")
29
+ expect(settings).to be_a Twitter::Settings
30
+ expect(settings.language).to eq 'en'
31
+ end
32
+ end
33
+
34
+ describe "#verify_credentials" do
35
+ before do
36
+ stub_get("/1.1/account/verify_credentials.json").to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
37
+ end
38
+ it "requests the correct resource" do
39
+ @client.verify_credentials
40
+ expect(a_get("/1.1/account/verify_credentials.json")).to have_been_made
41
+ end
42
+ it "returns the requesting user" do
43
+ user = @client.verify_credentials
44
+ expect(user).to be_a Twitter::User
45
+ expect(user.id).to eq 7505382
46
+ end
47
+ end
48
+
49
+ describe "#update_delivery_device" do
50
+ before do
51
+ stub_post("/1.1/account/update_delivery_device.json").with(:body => {:device => "sms"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
52
+ end
53
+ it "requests the correct resource" do
54
+ @client.update_delivery_device("sms")
55
+ expect(a_post("/1.1/account/update_delivery_device.json").with(:body => {:device => "sms"})).to have_been_made
56
+ end
57
+ it "returns a user" do
58
+ user = @client.update_delivery_device("sms")
59
+ expect(user).to be_a Twitter::User
60
+ expect(user.id).to eq 7505382
61
+ end
62
+ end
63
+
64
+ describe "#update_profile" do
65
+ before do
66
+ stub_post("/1.1/account/update_profile.json").with(:body => {:url => "http://github.com/sferik/"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
67
+ end
68
+ it "requests the correct resource" do
69
+ @client.update_profile(:url => "http://github.com/sferik/")
70
+ expect(a_post("/1.1/account/update_profile.json").with(:body => {:url => "http://github.com/sferik/"})).to have_been_made
71
+ end
72
+ it "returns a user" do
73
+ user = @client.update_profile(:url => "http://github.com/sferik/")
74
+ expect(user).to be_a Twitter::User
75
+ expect(user.id).to eq 7505382
76
+ end
77
+ end
78
+
79
+ describe "#update_profile_background_image" do
80
+ before do
81
+ stub_post("/1.1/account/update_profile_background_image.json").to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
82
+ end
83
+ it "requests the correct resource" do
84
+ @client.update_profile_background_image(fixture("we_concept_bg2.png"))
85
+ expect(a_post("/1.1/account/update_profile_background_image.json")).to have_been_made
86
+ end
87
+ it "returns a user" do
88
+ user = @client.update_profile_background_image(fixture("we_concept_bg2.png"))
89
+ expect(user).to be_a Twitter::User
90
+ expect(user.id).to eq 7505382
91
+ end
92
+ end
93
+
94
+ describe "#update_profile_colors" do
95
+ before do
96
+ stub_post("/1.1/account/update_profile_colors.json").with(:body => {:profile_background_color => "000000"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
97
+ end
98
+ it "requests the correct resource" do
99
+ @client.update_profile_colors(:profile_background_color => "000000")
100
+ expect(a_post("/1.1/account/update_profile_colors.json").with(:body => {:profile_background_color => "000000"})).to have_been_made
101
+ end
102
+ it "returns a user" do
103
+ user = @client.update_profile_colors(:profile_background_color => "000000")
104
+ expect(user).to be_a Twitter::User
105
+ expect(user.id).to eq 7505382
106
+ end
107
+ end
108
+
109
+ describe "#update_profile_image" do
110
+ before do
111
+ stub_post("/1.1/account/update_profile_image.json").to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
112
+ end
113
+ it "requests the correct resource" do
114
+ @client.update_profile_image(fixture("me.jpeg"))
115
+ expect(a_post("/1.1/account/update_profile_image.json")).to have_been_made
116
+ end
117
+ it "returns a user" do
118
+ user = @client.update_profile_image(fixture("me.jpeg"))
119
+ expect(user).to be_a Twitter::User
120
+ expect(user.id).to eq 7505382
121
+ end
122
+ end
123
+
9
124
  describe "#suggestions" do
10
125
  context "with a category slug passed" do
11
126
  before do
@@ -56,6 +171,119 @@ describe Twitter::API do
56
171
  end
57
172
  end
58
173
 
174
+ describe "#blocking" do
175
+ before do
176
+ stub_get("/1.1/blocks/list.json").with(:query => {:cursor => "-1"}).to_return(:body => fixture("users_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
177
+ end
178
+ it "requests the correct resource" do
179
+ @client.blocking
180
+ expect(a_get("/1.1/blocks/list.json").with(:query => {:cursor => "-1"})).to have_been_made
181
+ end
182
+ it "returns an array of user objects that the authenticating user is blocking" do
183
+ blocking = @client.blocking
184
+ expect(blocking).to be_a Twitter::Cursor
185
+ expect(blocking.users).to be_an Array
186
+ expect(blocking.users.first).to be_a Twitter::User
187
+ expect(blocking.users.first.id).to eq 7505382
188
+ end
189
+ end
190
+
191
+ describe "#blocked_ids" do
192
+ before do
193
+ stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"}).to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
194
+ end
195
+ it "requests the correct resource" do
196
+ @client.blocked_ids
197
+ expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"})).to have_been_made
198
+ end
199
+ it "returns an array of numeric user IDs the authenticating user is blocking" do
200
+ blocked_ids = @client.blocked_ids
201
+ expect(blocked_ids).to be_a Twitter::Cursor
202
+ expect(blocked_ids.ids).to be_an Array
203
+ expect(blocked_ids.ids.first).to eq 14100886
204
+ end
205
+ end
206
+
207
+ describe "#block?" do
208
+ context "with a screen name passed" do
209
+ before do
210
+ stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"}).to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
211
+ stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"}).to_return(:body => fixture("ids_list2.json"), :headers => {:content_type => "application/json; charset=utf-8"})
212
+ stub_get("/1.1/users/show.json").with(:query => {:screen_name => "pengwynn"}).to_return(:body => fixture("pengwynn.json"), :headers => {:content_type => "application/json; charset=utf-8"})
213
+ stub_get("/1.1/users/show.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
214
+ end
215
+ it "requests the correct resource" do
216
+ @client.block?("sferik")
217
+ expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"})).to have_been_made
218
+ expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"})).to have_been_made
219
+ expect(a_get("/1.1/users/show.json").with(:query => {:screen_name => "sferik"})).to have_been_made
220
+ end
221
+ it "returns true if block exists" do
222
+ block = @client.block?("pengwynn")
223
+ expect(block).to be_true
224
+ end
225
+ it "returns false if block does not exist" do
226
+ block = @client.block?("sferik")
227
+ expect(block).to be_false
228
+ end
229
+ end
230
+ context "with a user ID passed" do
231
+ before do
232
+ stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"}).to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
233
+ stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"}).to_return(:body => fixture("ids_list2.json"), :headers => {:content_type => "application/json; charset=utf-8"})
234
+ end
235
+ it "requests the correct resources" do
236
+ @client.block?(7505382)
237
+ expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"})).to have_been_made
238
+ expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"})).to have_been_made
239
+ end
240
+ end
241
+ context "with a user object passed" do
242
+ before do
243
+ stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"}).to_return(:body => fixture("ids_list.json"), :headers => {:content_type => "application/json; charset=utf-8"})
244
+ stub_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"}).to_return(:body => fixture("ids_list2.json"), :headers => {:content_type => "application/json; charset=utf-8"})
245
+ end
246
+ it "requests the correct resources" do
247
+ user = Twitter::User.new(:id => '7505382')
248
+ @client.block?(user)
249
+ expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "-1"})).to have_been_made
250
+ expect(a_get("/1.1/blocks/ids.json").with(:query => {:cursor => "1305102810874389703"})).to have_been_made
251
+ end
252
+ end
253
+ end
254
+
255
+ describe "#block" do
256
+ before do
257
+ stub_post("/1.1/blocks/create.json").with(:body => {:screen_name => "sferik"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
258
+ end
259
+ it "requests the correct resource" do
260
+ @client.block("sferik")
261
+ expect(a_post("/1.1/blocks/create.json")).to have_been_made
262
+ end
263
+ it "returns an array of blocked users" do
264
+ users = @client.block("sferik")
265
+ expect(users).to be_an Array
266
+ expect(users.first).to be_a Twitter::User
267
+ expect(users.first.id).to eq 7505382
268
+ end
269
+ end
270
+
271
+ describe "#unblock" do
272
+ before do
273
+ stub_post("/1.1/blocks/destroy.json").with(:body => {:screen_name => "sferik"}).to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
274
+ end
275
+ it "requests the correct resource" do
276
+ @client.unblock("sferik")
277
+ expect(a_post("/1.1/blocks/destroy.json").with(:body => {:screen_name => "sferik"})).to have_been_made
278
+ end
279
+ it "returns an array of un-blocked users" do
280
+ users = @client.unblock("sferik")
281
+ expect(users).to be_an Array
282
+ expect(users.first).to be_a Twitter::User
283
+ expect(users.first.id).to eq 7505382
284
+ end
285
+ end
286
+
59
287
  describe "#users" do
60
288
  context "with screen names passed" do
61
289
  before do
@@ -112,22 +340,6 @@ describe Twitter::API do
112
340
  end
113
341
  end
114
342
 
115
- describe "#user_search" do
116
- before do
117
- stub_get("/1.1/users/search.json").with(:query => {:q => "Erik Michaels-Ober"}).to_return(:body => fixture("user_search.json"), :headers => {:content_type => "application/json; charset=utf-8"})
118
- end
119
- it "requests the correct resource" do
120
- @client.user_search("Erik Michaels-Ober")
121
- expect(a_get("/1.1/users/search.json").with(:query => {:q => "Erik Michaels-Ober"})).to have_been_made
122
- end
123
- it "returns an array of user search results" do
124
- user_search = @client.user_search("Erik Michaels-Ober")
125
- expect(user_search).to be_an Array
126
- expect(user_search.first).to be_a Twitter::User
127
- expect(user_search.first.id).to eq 7505382
128
- end
129
- end
130
-
131
343
  describe "#user" do
132
344
  context "with a screen name passed" do
133
345
  before do
@@ -221,6 +433,22 @@ describe Twitter::API do
221
433
  end
222
434
  end
223
435
 
436
+ describe "#user_search" do
437
+ before do
438
+ stub_get("/1.1/users/search.json").with(:query => {:q => "Erik Michaels-Ober"}).to_return(:body => fixture("user_search.json"), :headers => {:content_type => "application/json; charset=utf-8"})
439
+ end
440
+ it "requests the correct resource" do
441
+ @client.user_search("Erik Michaels-Ober")
442
+ expect(a_get("/1.1/users/search.json").with(:query => {:q => "Erik Michaels-Ober"})).to have_been_made
443
+ end
444
+ it "returns an array of user search results" do
445
+ user_search = @client.user_search("Erik Michaels-Ober")
446
+ expect(user_search).to be_an Array
447
+ expect(user_search.first).to be_a Twitter::User
448
+ expect(user_search.first.id).to eq 7505382
449
+ end
450
+ end
451
+
224
452
  describe "#contributees" do
225
453
  context "with a screen name passed" do
226
454
  before do
@@ -325,4 +553,67 @@ describe Twitter::API do
325
553
  end
326
554
  end
327
555
 
556
+ describe "#remove_profile_banner" do
557
+ before do
558
+ stub_post("/1.1/account/remove_profile_banner.json").to_return(:body => fixture("empty.json"), :headers => {:content_type => "application/json; charset=utf-8"})
559
+ end
560
+ it "requests the correct resource" do
561
+ @client.remove_profile_banner
562
+ expect(a_post("/1.1/account/remove_profile_banner.json")).to have_been_made
563
+ end
564
+ it "returns a user" do
565
+ user = @client.remove_profile_banner
566
+ expect(user).to be_nil
567
+ end
568
+ end
569
+
570
+ describe "#update_profile_banner" do
571
+ before do
572
+ stub_post("/1.1/account/update_profile_banner.json").to_return(:body => fixture("empty.json"), :headers => {:content_type => "application/json; charset=utf-8"})
573
+ end
574
+ it "requests the correct resource" do
575
+ @client.update_profile_banner(fixture("me.jpeg"))
576
+ expect(a_post("/1.1/account/update_profile_banner.json")).to have_been_made
577
+ end
578
+ it "returns a user" do
579
+ user = @client.update_profile_banner(fixture("me.jpeg"))
580
+ expect(user).to be_nil
581
+ end
582
+ end
583
+
584
+ describe '#profile_banner' do
585
+ context "with a screen_name passed" do
586
+ before do
587
+ stub_get("/1.1/users/profile_banner.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("profile_banner.json"), :headers => {:content_type => "application/json; charset=utf-8"})
588
+ end
589
+ it "requests the correct resource" do
590
+ @client.profile_banner('sferik')
591
+ expect(a_get("/1.1/users/profile_banner.json").with(:query => {:screen_name => "sferik"})).to have_been_made
592
+ end
593
+ it "returns a user's profile banner" do
594
+ banner = @client.profile_banner('sferik')
595
+ expect(banner).to be_a Twitter::ProfileBanner
596
+ expect(banner.sizes).to be_a Hash
597
+ expect(banner.sizes[:mobile].height).to eq 160
598
+ end
599
+ end
600
+ context "without arguments passed" do
601
+ before do
602
+ stub_get("/1.1/account/verify_credentials.json").to_return(:body => fixture("sferik.json"), :headers => {:content_type => "application/json; charset=utf-8"})
603
+ stub_get("/1.1/users/profile_banner.json").with(:query => {:screen_name => "sferik"}).to_return(:body => fixture("profile_banner.json"), :headers => {:content_type => "application/json; charset=utf-8"})
604
+ end
605
+ it "requests the correct resource" do
606
+ @client.profile_banner
607
+ expect(a_get("/1.1/account/verify_credentials.json")).to have_been_made
608
+ expect(a_get("/1.1/users/profile_banner.json").with(:query => {:screen_name => "sferik"})).to have_been_made
609
+ end
610
+ it "returns an array of numeric IDs for every user following the specified user" do
611
+ banner = @client.profile_banner
612
+ expect(banner).to be_a Twitter::ProfileBanner
613
+ expect(banner.sizes).to be_a Hash
614
+ expect(banner.sizes[:mobile].height).to eq 160
615
+ end
616
+ end
617
+ end
618
+
328
619
  end