octokit 0.4.1 → 0.5.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 (74) hide show
  1. data/.rspec +3 -0
  2. data/Rakefile +3 -10
  3. data/changelog.markdown +3 -0
  4. data/lib/octokit/client.rb +1 -2
  5. data/lib/octokit/client/authentication.rb +4 -0
  6. data/lib/octokit/client/commits.rb +1 -1
  7. data/lib/octokit/client/connection.rb +4 -2
  8. data/lib/octokit/client/issues.rb +8 -8
  9. data/lib/octokit/client/network.rb +3 -3
  10. data/lib/octokit/client/objects.rb +1 -1
  11. data/lib/octokit/client/organizations.rb +3 -2
  12. data/lib/octokit/client/pulls.rb +9 -3
  13. data/lib/octokit/client/repositories.rb +23 -10
  14. data/lib/octokit/client/request.rb +10 -10
  15. data/lib/octokit/client/timelines.rb +11 -9
  16. data/lib/octokit/configuration.rb +21 -19
  17. data/lib/octokit/version.rb +1 -1
  18. data/octokit.gemspec +4 -6
  19. data/spec/faraday/response_spec.rb +33 -0
  20. data/spec/fixtures/blob.json +1 -0
  21. data/spec/fixtures/blob_metadata.json +1 -0
  22. data/spec/fixtures/blobs.json +1 -0
  23. data/spec/fixtures/branches.json +1 -0
  24. data/spec/fixtures/collaborators.json +1 -0
  25. data/spec/fixtures/comment.json +1 -0
  26. data/spec/fixtures/comments.json +1 -0
  27. data/spec/fixtures/commit.json +1 -0
  28. data/spec/fixtures/commits.json +1 -0
  29. data/spec/fixtures/contributors.json +1 -0
  30. data/spec/fixtures/delete_token.json +1 -0
  31. data/spec/fixtures/emails.json +1 -0
  32. data/spec/fixtures/followers.json +1 -0
  33. data/spec/fixtures/following.json +1 -0
  34. data/spec/fixtures/issue.json +1 -0
  35. data/spec/fixtures/issues.json +1 -0
  36. data/spec/fixtures/labels.json +1 -0
  37. data/spec/fixtures/languages.json +1 -0
  38. data/spec/fixtures/network.json +1 -0
  39. data/spec/fixtures/network_data.json +1 -0
  40. data/spec/fixtures/network_meta.json +1 -0
  41. data/spec/fixtures/organization.json +1 -0
  42. data/spec/fixtures/organizations.json +1 -0
  43. data/spec/fixtures/public_keys.json +1 -0
  44. data/spec/fixtures/pull.json +1 -0
  45. data/spec/fixtures/pulls.json +1 -0
  46. data/spec/fixtures/raw.txt +7 -0
  47. data/spec/fixtures/repositories.json +1 -0
  48. data/spec/fixtures/repository.json +1 -0
  49. data/spec/fixtures/tags.json +1 -0
  50. data/spec/fixtures/team.json +1 -0
  51. data/spec/fixtures/teams.json +1 -0
  52. data/spec/fixtures/timeline.json +1237 -0
  53. data/spec/fixtures/tree.json +1 -0
  54. data/spec/fixtures/tree_metadata.json +1 -0
  55. data/spec/fixtures/user.json +1 -0
  56. data/spec/fixtures/users.json +1 -0
  57. data/spec/fixtures/watchers.json +1 -0
  58. data/spec/helper.rb +66 -0
  59. data/spec/octokit/client/commits_spec.rb +31 -0
  60. data/spec/octokit/client/issues_spec.rb +155 -0
  61. data/spec/octokit/client/network_spec.rb +31 -0
  62. data/spec/octokit/client/objects_spec.rb +75 -0
  63. data/spec/octokit/client/organizations_spec.rb +233 -0
  64. data/spec/octokit/client/pulls_spec.rb +43 -0
  65. data/spec/octokit/client/repositories_spec.rb +330 -0
  66. data/spec/octokit/client/timelines_spec.rb +41 -0
  67. data/spec/octokit/client/users_spec.rb +273 -0
  68. data/spec/octokit/client_spec.rb +12 -0
  69. data/spec/octokit_spec.rb +14 -0
  70. data/spec/repository_spec.rb +53 -0
  71. data/test/helper.rb +2 -0
  72. data/test/octokit_test.rb +14 -2
  73. metadata +147 -89
  74. data/lib/octokit/event.rb +0 -76
@@ -0,0 +1,43 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe Octokit::Client::Pulls do
4
+
5
+ before do
6
+ @client = Octokit::Client.new(:login => 'sferik')
7
+ end
8
+
9
+ describe ".create_pull_request" do
10
+
11
+ it "should create a pull request" do
12
+ stub_post("pulls/sferik/rails_admin").
13
+ with(:pull => {:base => "master", :head => "pengwynn:master", :title => "Title", :body => "Body"}).
14
+ to_return(:body => fixture("pulls.json"))
15
+ issues = @client.create_pull_request("sferik/rails_admin", "master", "pengwynn:master", "Title", "Body")
16
+ issues.first.number.should == 251
17
+ end
18
+
19
+ end
20
+
21
+ describe ".pull_requests" do
22
+
23
+ it "should return all pull requests" do
24
+ stub_get("pulls/sferik/rails_admin/open").
25
+ to_return(:body => fixture("pulls.json"))
26
+ pulls = @client.pulls("sferik/rails_admin")
27
+ pulls.first.number.should == 251
28
+ end
29
+
30
+ end
31
+
32
+ describe ".pull_request" do
33
+
34
+ it "should return a pull request" do
35
+ stub_get("pulls/sferik/rails_admin/251").
36
+ to_return(:body => fixture("pull.json"))
37
+ pull = @client.pull("sferik/rails_admin", 251)
38
+ pull.number.should == 251
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,330 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe Octokit::Client::Repositories do
4
+
5
+ before do
6
+ @client = Octokit::Client.new(:login => 'sferik')
7
+ end
8
+
9
+ describe ".search_user" do
10
+
11
+ it "should return matching repositories" do
12
+ stub_get("repos/search/One40Proof").
13
+ to_return(:body => fixture("repositories.json"))
14
+ repositories = @client.search_repositories("One40Proof")
15
+ repositories.first.name.should == "One40Proof"
16
+ end
17
+
18
+ end
19
+
20
+ describe ".repository" do
21
+
22
+ it "should return the matching repository" do
23
+ stub_get("repos/show/sferik/rails_admin").
24
+ to_return(:body => fixture("repository.json"))
25
+ repository = @client.repository("sferik/rails_admin")
26
+ repository.name.should == "rails_admin"
27
+ end
28
+
29
+ end
30
+
31
+ describe ".update_repository" do
32
+
33
+ it "should update the matching repository" do
34
+ description = "RailsAdmin is a Rails 3 engine that provides an easy-to-use interface for managing your data"
35
+ stub_post("repos/show/sferik/rails_admin").
36
+ with(:values => {:description => description}).
37
+ to_return(:body => fixture("repository.json"))
38
+ repository = @client.update_repository("sferik/rails_admin", :description => description)
39
+ repository.description.should == description
40
+ end
41
+
42
+ end
43
+
44
+ describe ".repositories" do
45
+
46
+ context "with a username passed" do
47
+
48
+ it "should return user's repositories" do
49
+ stub_get("repos/show/sferik").
50
+ to_return(:body => fixture("repositories.json"))
51
+ repositories = @client.repositories("sferik")
52
+ repositories.first.name.should == "One40Proof"
53
+ end
54
+
55
+ end
56
+
57
+ context "without a username passed" do
58
+
59
+ it "should return authenticated user's repositories" do
60
+ stub_get("repos/show/sferik").
61
+ to_return(:body => fixture("repositories.json"))
62
+ repositories = @client.repositories
63
+ repositories.first.name.should == "One40Proof"
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+
70
+ describe ".watch!" do
71
+
72
+ it "should watch a repository" do
73
+ stub_post("repos/watch/sferik/rails_admin").
74
+ to_return(:body => fixture("repository.json"))
75
+ repository = @client.watch!("sferik/rails_admin")
76
+ repository.name.should == "rails_admin"
77
+ end
78
+
79
+ end
80
+
81
+ describe ".unwatch!" do
82
+
83
+ it "should unwatch a repository" do
84
+ stub_post("repos/unwatch/sferik/rails_admin").
85
+ to_return(:body => fixture("repository.json"))
86
+ repository = @client.unwatch!("sferik/rails_admin")
87
+ repository.name.should == "rails_admin"
88
+ end
89
+
90
+ end
91
+
92
+ describe ".fork!" do
93
+
94
+ it "should fork a repository" do
95
+ stub_post("repos/fork/sferik/rails_admin").
96
+ to_return(:body => fixture("repository.json"))
97
+ repository = @client.fork!("sferik/rails_admin")
98
+ repository.name.should == "rails_admin"
99
+ end
100
+
101
+ end
102
+
103
+ describe ".create_repository" do
104
+
105
+ it "should create a repository" do
106
+ stub_post("repos/create").
107
+ with(:name => "rails_admin").
108
+ to_return(:body => fixture("repository.json"))
109
+ repository = @client.create_repository("rails_admin")
110
+ repository.name.should == "rails_admin"
111
+ end
112
+
113
+ end
114
+
115
+ describe ".delete_repository" do
116
+
117
+ it "should return a delete token" do
118
+ stub_post("repos/delete/sferik/rails_admin").
119
+ to_return(:body => fixture("delete_token.json"))
120
+ delete_token = @client.delete_repository("sferik/rails_admin")
121
+ delete_token.should == "uhihwkkkzu"
122
+ end
123
+
124
+ end
125
+
126
+ describe ".delete_repository!" do
127
+
128
+ it "should delete a repository" do
129
+ stub_post("repos/delete/sferik/rails_admin").
130
+ to_return(:body => fixture("repository.json"))
131
+ repository = @client.delete_repository!("sferik/rails_admin")
132
+ repository.name.should == "rails_admin"
133
+ end
134
+
135
+ end
136
+
137
+ describe ".set_private!" do
138
+
139
+ it "should set a repository private" do
140
+ stub_post("repos/set/private/sferik/rails_admin").
141
+ to_return(:body => fixture("repository.json"))
142
+ repository = @client.set_private!("sferik/rails_admin")
143
+ repository.name.should == "rails_admin"
144
+ end
145
+
146
+ end
147
+
148
+ describe ".set_public!" do
149
+
150
+ it "should set a repository public" do
151
+ stub_post("repos/set/public/sferik/rails_admin").
152
+ to_return(:body => fixture("repository.json"))
153
+ repository = @client.set_public!("sferik/rails_admin")
154
+ repository.name.should == "rails_admin"
155
+ end
156
+
157
+ end
158
+
159
+ describe ".deploy_keys" do
160
+
161
+ it "should return a repository's deploy keys" do
162
+ stub_get("repos/keys/sferik/rails_admin").
163
+ to_return(:body => fixture("public_keys.json"))
164
+ public_keys = @client.deploy_keys("sferik/rails_admin")
165
+ public_keys.first.id.should == 103205
166
+ end
167
+
168
+ end
169
+
170
+ describe ".add_deploy_key" do
171
+
172
+ it "should add a repository deploy keys" do
173
+ stub_post("repos/key/sferik/rails_admin/add").
174
+ with(:title => "Moss", :key => "ssh-dss AAAAB3NzaC1kc3MAAACBAJz7HanBa18ad1YsdFzHO5Wy1/WgXd4BV+czbKq7q23jungbfjN3eo2a0SVdxux8GG+RZ9ia90VD/X+PE4s3LV60oXZ7PDAuyPO1CTF0TaDoKf9mPaHcPa6agMJVocMsgBgwviWT1Q9VgN1SccDsYVDtxkIAwuw25YeHZlG6myx1AAAAFQCgW+OvXWUdUJPBGkRJ8ML7uf0VHQAAAIAlP5G96tTss0SKYVSCJCyocn9cyGQdNjxah4/aYuYFTbLI1rxk7sr/AkZfJNIoF2UFyO5STbbratykIQGUPdUBg1a2t72bu31x+4ZYJMngNsG/AkZ2oqLiH6dJKHD7PFx2oSPalogwsUV7iSMIZIYaPa03A9763iFsN0qJjaed+gAAAIBxz3Prxdzt/os4XGXSMNoWcS03AFC/05NOkoDMrXxQnTTpp1wrOgyRqEnKz15qC5dWk1ynzK+LJXHDZGA8lXPfCjHpJO3zrlZ/ivvLhgPdDpt13MAhIJFH06hTal0woxbk/fIdY71P3kbgXC0Ppx/0S7BC+VxqRCA4/wcM+BoDbA== host").
175
+ to_return(:body => fixture("public_keys.json"))
176
+ public_keys = @client.add_deploy_key("sferik/rails_admin", "Moss", "ssh-dss AAAAB3NzaC1kc3MAAACBAJz7HanBa18ad1YsdFzHO5Wy1/WgXd4BV+czbKq7q23jungbfjN3eo2a0SVdxux8GG+RZ9ia90VD/X+PE4s3LV60oXZ7PDAuyPO1CTF0TaDoKf9mPaHcPa6agMJVocMsgBgwviWT1Q9VgN1SccDsYVDtxkIAwuw25YeHZlG6myx1AAAAFQCgW+OvXWUdUJPBGkRJ8ML7uf0VHQAAAIAlP5G96tTss0SKYVSCJCyocn9cyGQdNjxah4/aYuYFTbLI1rxk7sr/AkZfJNIoF2UFyO5STbbratykIQGUPdUBg1a2t72bu31x+4ZYJMngNsG/AkZ2oqLiH6dJKHD7PFx2oSPalogwsUV7iSMIZIYaPa03A9763iFsN0qJjaed+gAAAIBxz3Prxdzt/os4XGXSMNoWcS03AFC/05NOkoDMrXxQnTTpp1wrOgyRqEnKz15qC5dWk1ynzK+LJXHDZGA8lXPfCjHpJO3zrlZ/ivvLhgPdDpt13MAhIJFH06hTal0woxbk/fIdY71P3kbgXC0Ppx/0S7BC+VxqRCA4/wcM+BoDbA== host")
177
+ public_keys.first.id.should == 103205
178
+ end
179
+
180
+ end
181
+
182
+ describe ".remove_deploy_key" do
183
+
184
+ it "should remove a repository deploy keys" do
185
+ stub_post("repos/key/sferik/rails_admin/remove").
186
+ with(:id => 103205).
187
+ to_return(:body => fixture("public_keys.json"))
188
+ public_keys = @client.remove_deploy_key("sferik/rails_admin", 103205)
189
+ public_keys.first.id.should == 103205
190
+ end
191
+
192
+ end
193
+
194
+ describe ".collaborators" do
195
+
196
+ it "should return a repository's collaborators" do
197
+ stub_get("repos/show/sferik/rails_admin/collaborators").
198
+ to_return(:body => fixture("collaborators.json"))
199
+ collaborators = @client.collaborators("sferik/rails_admin")
200
+ collaborators.first.should == "sferik"
201
+ end
202
+
203
+ end
204
+
205
+ describe ".add_collaborator" do
206
+
207
+ it "should add a repository collaborators" do
208
+ stub_post("repos/collaborators/sferik/rails_admin/add/sferik").
209
+ to_return(:body => fixture("collaborators.json"))
210
+ collaborators = @client.add_collaborator("sferik/rails_admin", "sferik")
211
+ collaborators.first.should == "sferik"
212
+ end
213
+
214
+ end
215
+
216
+ describe ".remove_collaborator" do
217
+
218
+ it "should remove a repository collaborators" do
219
+ stub_post("repos/collaborators/sferik/rails_admin/remove/sferik").
220
+ to_return(:body => fixture("collaborators.json"))
221
+ collaborators = @client.remove_collaborator("sferik/rails_admin", "sferik")
222
+ collaborators.first.should == "sferik"
223
+ end
224
+
225
+ end
226
+
227
+ describe ".pushable" do
228
+
229
+ it "should return all pushable repositories" do
230
+ stub_get("repos/pushable").
231
+ to_return(:body => fixture("repositories.json"))
232
+ repositories = @client.pushable
233
+ repositories.first.name.should == "One40Proof"
234
+ end
235
+
236
+ end
237
+
238
+ describe ".repository_teams" do
239
+
240
+ it "should return all repository teams" do
241
+ stub_get("repos/show/codeforamerica/open311/teams").
242
+ to_return(:body => fixture("teams.json"))
243
+ teams = @client.repository_teams("codeforamerica/open311")
244
+ teams.first.name.should == "Fellows"
245
+ end
246
+
247
+ end
248
+
249
+ describe ".contributors" do
250
+
251
+ context "with anonymous users" do
252
+
253
+ it "should return all repository contributors" do
254
+ stub_get("repos/show/sferik/rails_admin/contributors/anon").
255
+ to_return(:body => fixture("contributors.json"))
256
+ contributors = @client.contributors("sferik/rails_admin", true)
257
+ contributors.first.name.should == "Erik Michaels-Ober"
258
+ end
259
+
260
+ end
261
+
262
+ context "without anonymous users" do
263
+
264
+ it "should return all repository contributors" do
265
+ stub_get("repos/show/sferik/rails_admin/contributors").
266
+ to_return(:body => fixture("contributors.json"))
267
+ contributors = @client.contributors("sferik/rails_admin")
268
+ contributors.first.name.should == "Erik Michaels-Ober"
269
+ end
270
+
271
+ end
272
+
273
+ end
274
+
275
+ describe ".watchers" do
276
+
277
+ it "should return all repository watchers" do
278
+ stub_get("repos/show/sferik/rails_admin/watchers").
279
+ to_return(:body => fixture("watchers.json"))
280
+ watchers = @client.watchers("sferik/rails_admin")
281
+ watchers.first.should == "sferik"
282
+ end
283
+
284
+ end
285
+
286
+ describe ".network" do
287
+
288
+ it "should return a repository's network" do
289
+ stub_get("repos/show/sferik/rails_admin/network").
290
+ to_return(:body => fixture("network.json"))
291
+ network = @client.network("sferik/rails_admin")
292
+ network.first.owner.should == "sferik"
293
+ end
294
+
295
+ end
296
+
297
+ describe ".languages" do
298
+
299
+ it "should return a repository's languages" do
300
+ stub_get("repos/show/sferik/rails_admin/languages").
301
+ to_return(:body => fixture("languages.json"))
302
+ languages = @client.languages("sferik/rails_admin")
303
+ languages.first.first.should == "Ruby"
304
+ end
305
+
306
+ end
307
+
308
+ describe ".tags" do
309
+
310
+ it "should return a repository's tags" do
311
+ stub_get("repos/show/pengwynn/octokit/tags").
312
+ to_return(:body => fixture("tags.json"))
313
+ tags = @client.tags("pengwynn/octokit")
314
+ tags.first.first.should == "v0.1.0"
315
+ end
316
+
317
+ end
318
+
319
+ describe ".branches" do
320
+
321
+ it "should return a repository's branches" do
322
+ stub_get("repos/show/pengwynn/octokit/branches").
323
+ to_return(:body => fixture("branches.json"))
324
+ branches = @client.branches("pengwynn/octokit")
325
+ branches.first.first.should == "rspec"
326
+ end
327
+
328
+ end
329
+
330
+ end
@@ -0,0 +1,41 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe Octokit::Client::Users do
4
+
5
+ describe ".timeline" do
6
+
7
+ it "should return the public timeline" do
8
+ client = Octokit::Client.new
9
+ stub_get("https://github.com/timeline.json").
10
+ to_return(:body => fixture("timeline.json"))
11
+ events = client.timeline
12
+ events.first.repository.name.should == "homebrew"
13
+ end
14
+
15
+ end
16
+
17
+ describe ".user_timeline" do
18
+
19
+ it "should return a user timeline" do
20
+ client = Octokit::Client.new
21
+ stub_get("https://github.com/sferik.json").
22
+ to_return(:body => fixture("timeline.json"))
23
+ events = client.user_timeline("sferik")
24
+ events.first.repository.name.should == "homebrew"
25
+ end
26
+
27
+ context "when authenticated" do
28
+
29
+ it "should return a user timeline" do
30
+ client = Octokit::Client.new(:login => "sferik", :token => "OU812")
31
+ stub_get("https://github.com/sferik.private.json?token=OU812").
32
+ to_return(:body => fixture("timeline.json"))
33
+ events = client.user_timeline("sferik")
34
+ events.first.repository.name.should == "homebrew"
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,273 @@
1
+ require File.expand_path('../../../helper', __FILE__)
2
+
3
+ describe Octokit::Client::Users do
4
+
5
+ before do
6
+ @client = Octokit::Client.new(:login => 'sferik')
7
+ end
8
+
9
+ describe ".search_users" do
10
+
11
+ context "with a username passed" do
12
+
13
+ it "should return matching username" do
14
+ stub_get("user/search/sferik").
15
+ to_return(:body => fixture("users.json"))
16
+ users = @client.search_users("sferik")
17
+ users.first.username.should == "sferik"
18
+ end
19
+
20
+ end
21
+
22
+ context "with an email address passed" do
23
+
24
+ it "should return matching email address" do
25
+ stub_get("user/email/sferik@gmail.com").
26
+ to_return(:body => fixture("user.json"))
27
+ user = @client.search_users("sferik@gmail.com")
28
+ user.login.should == "sferik"
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+
35
+ describe ".user" do
36
+
37
+ context "with a username passed" do
38
+
39
+ it "should return the user" do
40
+ stub_get("user/show/sferik").
41
+ to_return(:body => fixture("user.json"))
42
+ user = @client.user("sferik")
43
+ user.login.should == "sferik"
44
+ end
45
+
46
+ end
47
+
48
+ context "without a username passed" do
49
+
50
+ it "should return the authenticated user" do
51
+ stub_get("user/show").
52
+ to_return(:body => fixture("user.json"))
53
+ user = @client.user
54
+ user.login.should == "sferik"
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+
61
+ describe ".update_user" do
62
+
63
+ context "with a location passed" do
64
+
65
+ it "should update the user's location" do
66
+ stub_post("user/show/sferik").
67
+ with(:values => {:location => "San Francisco"}).
68
+ to_return(:body => fixture("user.json"))
69
+ user = @client.update_user(:location => "San Francisco")
70
+ user.login.should == "sferik"
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+
77
+ describe ".followers" do
78
+
79
+ context "with a username passed" do
80
+
81
+ it "should return the user's followers" do
82
+ stub_get("user/show/sferik/followers").
83
+ to_return(:body => fixture("followers.json"))
84
+ users = @client.followers("sferik")
85
+ users.first.should == "puls"
86
+ end
87
+
88
+ end
89
+
90
+ context "without a username passed" do
91
+
92
+ it "should return the user's followers" do
93
+ stub_get("user/show/sferik/followers").
94
+ to_return(:body => fixture("followers.json"))
95
+ users = @client.followers
96
+ users.first.should == "puls"
97
+ end
98
+
99
+ end
100
+
101
+ end
102
+
103
+ describe ".following" do
104
+
105
+ context "with a username passed" do
106
+
107
+ it "should return the user's following" do
108
+ stub_get("user/show/sferik/following").
109
+ to_return(:body => fixture("following.json"))
110
+ users = @client.following("sferik")
111
+ users.first.should == "rails"
112
+ end
113
+
114
+ end
115
+
116
+ context "without a username passed" do
117
+
118
+ it "should return the user's following" do
119
+ stub_get("user/show/sferik/following").
120
+ to_return(:body => fixture("following.json"))
121
+ users = @client.following
122
+ users.first.should == "rails"
123
+ end
124
+
125
+ end
126
+
127
+ end
128
+
129
+ describe ".follows?" do
130
+
131
+ context "with one user following another" do
132
+
133
+ it "should return true" do
134
+ stub_get("user/show/sferik/following").
135
+ to_return(:body => fixture("following.json"))
136
+ follows = @client.follows?("sferik", "pengwynn")
137
+ follows.should be_true
138
+ end
139
+
140
+ end
141
+
142
+ context "with one user not following another" do
143
+
144
+ it "should return false" do
145
+ stub_get("user/show/sferik/following").
146
+ to_return(:body => fixture("following.json"))
147
+ follows = @client.follows?("sferik", "dogbrainz")
148
+ follows.should be_false
149
+ end
150
+
151
+ end
152
+
153
+ end
154
+
155
+ describe ".follow!" do
156
+
157
+ it "should follow a user" do
158
+ stub_post("user/follow/dianakimball").
159
+ to_return(:body => fixture("following.json"))
160
+ following = @client.follow!("dianakimball")
161
+ following.should include("dianakimball")
162
+ end
163
+
164
+ end
165
+
166
+ describe ".unfollow!" do
167
+
168
+ it "should unfollow a user" do
169
+ stub_post("user/unfollow/dogbrainz").
170
+ to_return(:body => fixture("following.json"))
171
+ following = @client.unfollow!("dogbrainz")
172
+ following.should_not include("dogbrainz")
173
+ end
174
+
175
+ end
176
+
177
+ describe ".watched" do
178
+
179
+ context "with a username passed" do
180
+
181
+ it "should return watched repositories" do
182
+ stub_get("repos/watched/sferik").
183
+ to_return(:body => fixture("repositories.json"))
184
+ repositories = @client.watched("sferik")
185
+ repositories.first.name.should == "One40Proof"
186
+ end
187
+
188
+ end
189
+
190
+ context "without a username passed" do
191
+
192
+ it "should return watched repositories" do
193
+ stub_get("repos/watched/sferik").
194
+ to_return(:body => fixture("repositories.json"))
195
+ repositories = @client.watched
196
+ repositories.first.name.should == "One40Proof"
197
+ end
198
+
199
+ end
200
+
201
+ end
202
+
203
+ describe ".keys" do
204
+
205
+ it "should return public keys" do
206
+ stub_get("user/keys").
207
+ to_return(:body => fixture("public_keys.json"))
208
+ public_keys = @client.keys
209
+ public_keys.first.id.should == 103205
210
+ end
211
+
212
+ end
213
+
214
+ describe ".add_key" do
215
+
216
+ it "should add a public key" do
217
+ stub_post("user/key/add").
218
+ with(:title => "Moss", :key => "ssh-dss AAAAB3NzaC1kc3MAAACBAJz7HanBa18ad1YsdFzHO5Wy1/WgXd4BV+czbKq7q23jungbfjN3eo2a0SVdxux8GG+RZ9ia90VD/X+PE4s3LV60oXZ7PDAuyPO1CTF0TaDoKf9mPaHcPa6agMJVocMsgBgwviWT1Q9VgN1SccDsYVDtxkIAwuw25YeHZlG6myx1AAAAFQCgW+OvXWUdUJPBGkRJ8ML7uf0VHQAAAIAlP5G96tTss0SKYVSCJCyocn9cyGQdNjxah4/aYuYFTbLI1rxk7sr/AkZfJNIoF2UFyO5STbbratykIQGUPdUBg1a2t72bu31x+4ZYJMngNsG/AkZ2oqLiH6dJKHD7PFx2oSPalogwsUV7iSMIZIYaPa03A9763iFsN0qJjaed+gAAAIBxz3Prxdzt/os4XGXSMNoWcS03AFC/05NOkoDMrXxQnTTpp1wrOgyRqEnKz15qC5dWk1ynzK+LJXHDZGA8lXPfCjHpJO3zrlZ/ivvLhgPdDpt13MAhIJFH06hTal0woxbk/fIdY71P3kbgXC0Ppx/0S7BC+VxqRCA4/wcM+BoDbA== host").
219
+ to_return(:body => fixture("public_keys.json"))
220
+ public_keys = @client.add_key("Moss", "ssh-dss AAAAB3NzaC1kc3MAAACBAJz7HanBa18ad1YsdFzHO5Wy1/WgXd4BV+czbKq7q23jungbfjN3eo2a0SVdxux8GG+RZ9ia90VD/X+PE4s3LV60oXZ7PDAuyPO1CTF0TaDoKf9mPaHcPa6agMJVocMsgBgwviWT1Q9VgN1SccDsYVDtxkIAwuw25YeHZlG6myx1AAAAFQCgW+OvXWUdUJPBGkRJ8ML7uf0VHQAAAIAlP5G96tTss0SKYVSCJCyocn9cyGQdNjxah4/aYuYFTbLI1rxk7sr/AkZfJNIoF2UFyO5STbbratykIQGUPdUBg1a2t72bu31x+4ZYJMngNsG/AkZ2oqLiH6dJKHD7PFx2oSPalogwsUV7iSMIZIYaPa03A9763iFsN0qJjaed+gAAAIBxz3Prxdzt/os4XGXSMNoWcS03AFC/05NOkoDMrXxQnTTpp1wrOgyRqEnKz15qC5dWk1ynzK+LJXHDZGA8lXPfCjHpJO3zrlZ/ivvLhgPdDpt13MAhIJFH06hTal0woxbk/fIdY71P3kbgXC0Ppx/0S7BC+VxqRCA4/wcM+BoDbA== host")
221
+ public_keys.first.id.should == 103205
222
+ end
223
+
224
+ end
225
+
226
+ describe ".remove_key" do
227
+
228
+ it "should remove a public key" do
229
+ stub_post("user/key/remove").
230
+ with(:id => 103205).
231
+ to_return(:body => fixture("public_keys.json"))
232
+ public_keys = @client.remove_key(103205)
233
+ public_keys.first.id.should == 103205
234
+ end
235
+
236
+ end
237
+
238
+ describe ".emails" do
239
+
240
+ it "should return email addresses" do
241
+ stub_get("user/emails").
242
+ to_return(:body => fixture("emails.json"))
243
+ emails = @client.emails
244
+ emails.first.should == "sferik@gmail.com"
245
+ end
246
+
247
+ end
248
+
249
+ describe ".add_email" do
250
+
251
+ it "should add an email address" do
252
+ stub_post("user/email/add").
253
+ with(:email => "sferik@gmail.com").
254
+ to_return(:body => fixture("emails.json"))
255
+ emails = @client.add_email("sferik@gmail.com")
256
+ emails.first.should == "sferik@gmail.com"
257
+ end
258
+
259
+ end
260
+
261
+ describe ".remove_key" do
262
+
263
+ it "should remove an email address" do
264
+ stub_post("user/email/remove").
265
+ with(:email => "sferik@gmail.com").
266
+ to_return(:body => fixture("emails.json"))
267
+ emails = @client.remove_email("sferik@gmail.com")
268
+ emails.first.should == "sferik@gmail.com"
269
+ end
270
+
271
+ end
272
+
273
+ end