octopussy 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,37 @@
1
+ {
2
+ "commit": {
3
+ "modified": [
4
+ {
5
+ "filename": "facebox.css",
6
+ "diff": "@@ -103,5 +103,5 @@\n \n * html #facebox_overlay { \/* ie6 hack *\/\n position: absolute;\n- height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');\n+ height: expression(\"document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'\");\n }"
7
+ }
8
+ ],
9
+ "added": [
10
+
11
+ ],
12
+ "author": {
13
+ "name": "Stephen Martin",
14
+ "login": "",
15
+ "email": "stephenmartin@stephen-martins-mac-pro.local"
16
+ },
17
+ "parents": [
18
+ {
19
+ "id": "b9a23779076953b33744261a8b745ff753cce85b"
20
+ }
21
+ ],
22
+ "removed": [
23
+
24
+ ],
25
+ "url": "http:\/\/github.com\/defunkt\/facebox\/commit\/1ff368f79b0f0aa0e1f1d78bcaa8691f94f9703e",
26
+ "id": "1ff368f79b0f0aa0e1f1d78bcaa8691f94f9703e",
27
+ "committed_date": "2010-04-23T08:49:45-07:00",
28
+ "authored_date": "2009-03-19T06:28:05-07:00",
29
+ "message": "Fixed CSS expression, throwing errors in IE6.",
30
+ "committer": {
31
+ "name": "Chris Wanstrath",
32
+ "login": "defunkt",
33
+ "email": "chris@ozmm.org"
34
+ },
35
+ "tree": "2460799b2a8c55df06690b663cf47874661e6745"
36
+ }
37
+ }
data/test/helper.rb CHANGED
@@ -1,17 +1,12 @@
1
1
  require 'test/unit'
2
2
  require 'pathname'
3
- require 'rubygems'
4
-
5
- gem 'thoughtbot-shoulda', '>= 2.10.1'
6
- gem 'jnunemaker-matchy', '0.4.0'
7
- gem 'mocha', '0.9.4'
8
- gem 'fakeweb', '>= 1.2.5'
9
3
 
10
4
  require 'shoulda'
11
5
  require 'matchy'
12
6
  require 'mocha'
13
7
  require 'fakeweb'
14
8
 
9
+ require 'redgreen'
15
10
 
16
11
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
17
12
  $LOAD_PATH.unshift(File.dirname(__FILE__))
@@ -32,14 +27,14 @@ def github_url(url)
32
27
  url =~ /^http/ ? url : "http://github.com/api/v2/json#{url}"
33
28
  end
34
29
 
35
- def stub_get(url, filename, status=nil)
36
- options = {:body => fixture_file(filename)}
37
- options.merge!({:status => status}) unless status.nil?
38
-
39
- FakeWeb.register_uri(:get, github_url(url), options)
40
- end
30
+ def stub_request(method, url, filename, status=nil)
31
+ options = {:body => ""}
32
+ options.merge!({:body => fixture_file(filename)}) if filename
33
+ options.merge!({:body => status.last}) if status
34
+ options.merge!({:status => status}) if status
41
35
 
42
- def stub_post(url, filename)
43
- FakeWeb.register_uri(:post, github_url(url), :body => fixture_file(filename))
36
+ FakeWeb.register_uri(method, github_url(url), options)
44
37
  end
45
38
 
39
+ def stub_get(*args); stub_request(:get, *args) end
40
+ def stub_post(*args); stub_request(:post, *args) end
@@ -1,7 +1,7 @@
1
- require 'helper'
1
+ require File.dirname(__FILE__) + '/helper'
2
+
3
+ class OctopussyTest < Test::Unit::TestCase
2
4
 
3
- class TestOctopussy < Test::Unit::TestCase
4
-
5
5
  context "when authenticated" do
6
6
  setup do
7
7
  @client = Octopussy::Client.new(:login => 'pengwynn', :token => 'OU812')
@@ -12,235 +12,235 @@ class TestOctopussy < Test::Unit::TestCase
12
12
  users = @client.search_users("wynn")
13
13
  users.first.username.should == 'pengwynn'
14
14
  end
15
-
15
+
16
16
  should "return full user info for the authenticated user" do
17
17
  stub_get("/user/show/pengwynn?login=pengwynn&token=OU812", "full_user.json")
18
18
  user = @client.user
19
19
  user.plan.name.should == 'free'
20
20
  user.plan.space.should == 307200
21
21
  end
22
-
22
+
23
23
  should "return followers for a user" do
24
24
  stub_get("/user/show/pengwynn/followers", "followers.json")
25
25
  followers = @client.followers("pengwynn")
26
26
  followers.size.should == 21
27
27
  assert followers.include?("adamstac")
28
28
  end
29
-
29
+
30
30
  should "return followers for the authenticated user" do
31
31
  stub_get("/user/show/pengwynn/followers", "followers.json")
32
32
  followers = @client.followers
33
33
  followers.size.should == 21
34
34
  assert followers.include?("adamstac")
35
35
  end
36
-
36
+
37
37
  should "return users a user follows" do
38
38
  stub_get("/user/show/pengwynn/following", "followers.json")
39
39
  followers = @client.following("pengwynn")
40
40
  followers.size.should == 21
41
41
  assert followers.include?("adamstac")
42
42
  end
43
-
43
+
44
44
  should "return the users the authenticated user follows" do
45
45
  stub_get("/user/show/pengwynn/following", "followers.json")
46
46
  followers = @client.following
47
47
  followers.size.should == 21
48
48
  assert followers.include?("adamstac")
49
49
  end
50
-
50
+
51
51
  should "indicate if one user follows another" do
52
52
  stub_get("/user/show/pengwynn/following", "followers.json")
53
53
  @client.follows?('adamstac')
54
54
  end
55
-
55
+
56
56
  should "return the repos a user watches" do
57
57
  stub_get("/repos/watched/pengwynn", "repos.json")
58
58
  repos = @client.watched
59
59
  repos.first.owner.should == 'jnunemaker'
60
60
  repos.first.forks.should == 120
61
61
  end
62
-
62
+
63
63
  should "return the repos the authenticated user watched" do
64
64
  stub_get("/repos/watched/pengwynn", "repos.json")
65
65
  repos = @client.watched('pengwynn')
66
66
  repos.first.owner.should == 'jnunemaker'
67
67
  repos.first.forks.should == 120
68
68
  end
69
-
69
+
70
70
  should "update user info" do
71
71
  stub_post("/user/show/pengwynn?login=pengwynn&token=OU812", "user.json")
72
72
  user = @client.update_user(:location => "Dallas, TX")
73
73
  user.location.should == 'Dallas, TX'
74
74
  end
75
-
75
+
76
76
  should "return emails for the authenticated user" do
77
77
  stub_get("/user/emails?login=pengwynn&token=OU812", "emails.json")
78
78
  emails = @client.emails
79
79
  emails.size.should == 3
80
80
  assert emails.include? "wynn@orrka.com"
81
81
  end
82
-
82
+
83
83
  should "add an email for the authenticated user" do
84
84
  stub_post("/user/email/add?login=pengwynn&token=OU812", "emails.json")
85
85
  emails = @client.add_email('wynn@orrka.com')
86
86
  emails.size.should == 3
87
87
  assert emails.include? "wynn@orrka.com"
88
88
  end
89
-
89
+
90
90
  should "remove an email for the authenticated user" do
91
91
  stub_post("/user/email/remove?login=pengwynn&token=OU812", "emails.json")
92
92
  emails = @client.remove_email('wynn@squeejee.com')
93
93
  emails.size.should == 3
94
94
  end
95
-
95
+
96
96
  should "return keys for the authenticated user" do
97
97
  stub_get("/user/keys?login=pengwynn&token=OU812", "keys.json")
98
98
  keys = @client.keys
99
99
  keys.size.should == 6
100
100
  keys.last.title.should == 'wynn@pengwynn.local'
101
101
  end
102
-
102
+
103
103
  should "add an key for the authenticated user" do
104
104
  stub_post("/user/key/add?login=pengwynn&token=OU812", "keys.json")
105
105
  keys = @client.add_key('pengwynn', 'ssh-rsa 009aasd0kalsdfa-sd9a-sdf')
106
106
  keys.size.should == 6
107
107
  keys.last.title.should == 'wynn@pengwynn.local'
108
108
  end
109
-
109
+
110
110
  should "remove an key for the authenticated user" do
111
111
  stub_post("/user/key/remove?login=pengwynn&token=OU812", "keys.json")
112
112
  keys = @client.remove_key(1234)
113
113
  keys.size.should == 6
114
114
  end
115
-
115
+
116
116
  should "open an issue" do
117
117
  stub_post "/issues/open/pengwynn/linkedin", "open_issue.json"
118
118
  issue = @client.open_issue({:username => "pengwynn", :repo => "linkedin"}, "testing", "Testing api")
119
119
  issue.title.should == "testing"
120
120
  issue.number.should == 2
121
121
  end
122
-
122
+
123
123
  should "close an issue" do
124
124
  stub_post "/issues/close/pengwynn/linkedin/2", "close_issue.json"
125
125
  issue = @client.close_issue({:username => "pengwynn", :repo => "linkedin"}, 2)
126
126
  issue.title.should == "testing"
127
127
  issue.number.should == 2
128
128
  end
129
-
129
+
130
130
  should "reopen an issue" do
131
131
  stub_post "/issues/reopen/pengwynn/linkedin/2", "reopen_issue.json"
132
132
  issue = @client.close_issue({:username => "pengwynn", :repo => "linkedin"}, 2)
133
133
  issue.title.should == "testing"
134
134
  issue.number.should == 2
135
135
  end
136
-
136
+
137
137
  should "edit an issue" do
138
138
  stub_post "/issues/edit/pengwynn/linkedin/2", "open_issue.json"
139
139
  issue = @client.update_issue("pengwynn/linkedin", 2, "testing", "Testing api")
140
140
  issue.title.should == "testing"
141
141
  issue.number.should == 2
142
142
  end
143
-
143
+
144
144
  should "list issue labels for a repo" do
145
145
  stub_get "/issues/labels/pengwynn/linkedin", "labels.json"
146
146
  labels = @client.labels("pengwynn/linkedin")
147
147
  labels.first.should == 'oauth'
148
148
  end
149
-
149
+
150
150
  should "add a label to an issue" do
151
151
  stub_post("/issues/label/add/pengwynn/linkedin/oauth/2", "labels.json")
152
152
  labels = @client.add_label('pengwynn/linkedin', 2, 'oauth')
153
153
  assert labels.include?("oauth")
154
154
  end
155
-
155
+
156
156
  should "remove a label from an issue" do
157
157
  stub_post("/issues/label/remove/pengwynn/linkedin/oauth/2", "labels.json")
158
158
  labels = @client.remove_label('pengwynn/linkedin', 2, 'oauth')
159
159
  assert labels.is_a?(Array)
160
160
  end
161
-
161
+
162
162
  should "add a comment to an issue" do
163
163
  stub_post("/issues/comment/pengwynn/linkedin/2", "comment.json")
164
164
  comment = @client.add_comment('pengwynn/linkedin', 2, 'Nice catch!')
165
165
  comment.comment.should == 'Nice catch!'
166
166
  end
167
-
167
+
168
168
  should "watch a repository" do
169
169
  stub_post("/repos/watch/pengwynn/linkedin?login=pengwynn&token=OU812", "repo.json")
170
170
  repo = @client.watch('pengwynn/linkedin')
171
171
  repo.homepage.should == "http://bit.ly/ruby-linkedin"
172
172
  end
173
-
173
+
174
174
  should "unwatch a repository" do
175
175
  stub_post("/repos/unwatch/pengwynn/linkedin?login=pengwynn&token=OU812", "repo.json")
176
176
  repo = @client.unwatch('pengwynn/linkedin')
177
177
  repo.homepage.should == "http://bit.ly/ruby-linkedin"
178
178
  end
179
-
179
+
180
180
  should "fork a repository" do
181
181
  stub_post("/repos/fork/pengwynn/linkedin?login=pengwynn&token=OU812", "repo.json")
182
182
  repo = @client.fork('pengwynn/linkedin')
183
183
  repo.homepage.should == "http://bit.ly/ruby-linkedin"
184
184
  end
185
-
185
+
186
186
  should "create a repository" do
187
187
  stub_post("/repos/create?login=pengwynn&token=OU812", "repo.json")
188
188
  repo = @client.create(:name => 'linkedin', :description => 'Ruby wrapper for the LinkedIn API', :homepage => 'http://bit.ly/ruby-linkedin', :public => 1)
189
189
  repo.homepage.should == "http://bit.ly/ruby-linkedin"
190
190
  end
191
-
191
+
192
192
  # should "return a delete_token when calling delete without supplying a delete_token" do
193
193
  #
194
194
  # end
195
-
195
+
196
196
  should "set a repo's visibility to private" do
197
197
  stub_post("/repos/set/private/linkedin?login=pengwynn&token=OU812", "repo.json")
198
198
  repo = @client.set_private('linkedin')
199
199
  repo.homepage.should == "http://bit.ly/ruby-linkedin"
200
200
  end
201
-
201
+
202
202
  should "set a repo's visibility to public" do
203
203
  stub_post("/repos/set/public/linkedin?login=pengwynn&token=OU812", "repo.json")
204
204
  repo = @client.set_public('linkedin')
205
205
  repo.homepage.should == "http://bit.ly/ruby-linkedin"
206
206
  end
207
-
207
+
208
208
  should "return deploy keys for a repo" do
209
209
  stub_get("/repos/keys/linkedin?login=pengwynn&token=OU812", "keys.json")
210
210
  keys = @client.deploy_keys('linkedin')
211
211
  keys.size.should == 6
212
212
  keys.last.title.should == 'wynn@pengwynn.local'
213
213
  end
214
-
214
+
215
215
  should "add a deploy key for a repo" do
216
216
  stub_post("/repos/key/linkedin/add?login=pengwynn&token=OU812", "keys.json")
217
217
  keys = @client.add_deploy_key('pengwynn/linkedin', 'ssh-rsa 009aasd0kalsdfa-sd9a-sdf')
218
218
  keys.size.should == 6
219
219
  keys.last.title.should == 'wynn@pengwynn.local'
220
220
  end
221
-
221
+
222
222
  should "remove a deploy key for a repo" do
223
223
  stub_post("/repos/key/linkedin/remove?login=pengwynn&token=OU812", "keys.json")
224
224
  keys = @client.remove_deploy_key('linkedin', 1234)
225
225
  keys.size.should == 6
226
226
  end
227
-
227
+
228
228
  should "add a collaborator to a repo" do
229
229
  stub_post("/repos/collaborators/linkedin/add/adamstac?login=pengwynn&token=OU812", "collaborators.json")
230
230
  collaborators = @client.add_collaborator("linkedin", "adamstac")
231
231
  collaborators.first.should == 'pengwynn'
232
232
  end
233
-
233
+
234
234
  should "remove a collaborator from a repo" do
235
235
  stub_post("/repos/collaborators/linkedin/remove/adamstac?login=pengwynn&token=OU812", "collaborators.json")
236
236
  collaborators = @client.remove_collaborator("linkedin", "adamstac")
237
237
  collaborators.last.should == 'adamstac'
238
238
  end
239
-
240
-
239
+
240
+
241
241
  end
242
-
243
-
242
+
243
+
244
244
  context "when unauthenticated" do
245
245
 
246
246
  should "search users" do
@@ -248,7 +248,7 @@ class TestOctopussy < Test::Unit::TestCase
248
248
  users = Octopussy.search_users("wynn")
249
249
  users.first.username.should == 'pengwynn'
250
250
  end
251
-
251
+
252
252
  should "return user info" do
253
253
  stub_get("/user/show/pengwynn", "user.json")
254
254
  user = Octopussy.user("pengwynn")
@@ -256,107 +256,107 @@ class TestOctopussy < Test::Unit::TestCase
256
256
  user.blog.should == 'http://wynnnetherland.com'
257
257
  user.name.should == 'Wynn Netherland'
258
258
  end
259
-
259
+
260
260
  should "return followers for a user" do
261
261
  stub_get("/user/show/pengwynn/followers", "followers.json")
262
262
  followers = Octopussy.followers("pengwynn")
263
263
  followers.size.should == 21
264
264
  assert followers.include?("adamstac")
265
265
  end
266
-
266
+
267
267
  should "indicate if one user follows another" do
268
268
  stub_get("/user/show/pengwynn/following", "followers.json")
269
269
  assert Octopussy.follows?('pengwynn', 'adamstac')
270
270
  end
271
-
271
+
272
272
  should "return users a user follows" do
273
273
  stub_get("/user/show/pengwynn/following", "followers.json")
274
274
  followers = Octopussy.following("pengwynn")
275
275
  followers.size.should == 21
276
276
  assert followers.include?("adamstac")
277
277
  end
278
-
278
+
279
279
  should "return the repos a user watches" do
280
280
  stub_get("/repos/watched/pengwynn", "repos.json")
281
281
  repos = Octopussy.watched('pengwynn')
282
282
  repos.first.owner.should == 'jnunemaker'
283
283
  repos.first.forks.should == 120
284
284
  end
285
-
285
+
286
286
  should "search issues for a repo" do
287
287
  stub_get("/issues/search/jnunemaker/twitter/open/httparty", "issues.json")
288
288
  issues = Octopussy.search_issues({:username => 'jnunemaker', :repo => 'twitter'}, 'open', 'httparty')
289
289
  issues.first.title.should == 'Crack error when creating friendship'
290
290
  issues.first.votes.should == 2
291
291
  end
292
-
292
+
293
293
  should "list issues for a repo" do
294
294
  stub_get("/issues/list/jnunemaker/twitter/open", "issues.json")
295
295
  issues = Octopussy.issues({:username => 'jnunemaker', :repo => 'twitter'}, 'open')
296
296
  issues.first.title.should == 'Crack error when creating friendship'
297
297
  issues.first.votes.should == 2
298
298
  end
299
-
299
+
300
300
  should "return issue info" do
301
301
  stub_get("/issues/show/jnunemaker/twitter/3", "issue.json")
302
302
  issue = Octopussy.issue({:username => 'jnunemaker', :repo => 'twitter'}, 3)
303
303
  issue.title.should == 'Crack error when creating friendship'
304
304
  issue.votes.should == 2
305
305
  end
306
-
306
+
307
307
  # Repos
308
-
308
+
309
309
  should "search repos" do
310
310
  stub_get("/repos/search/compass", "repo_search.json")
311
311
  repos = Octopussy.search_repos("compass")
312
312
  repos.first.username.should == 'chriseppstein'
313
313
  repos.first.language.should == 'Ruby'
314
314
  end
315
-
315
+
316
316
  should "return repo information" do
317
317
  stub_get("/repos/show/pengwynn/linkedin", "repo.json")
318
318
  repo = Octopussy.repo({:username => "pengwynn", :repo => "linkedin"})
319
319
  repo.homepage.should == "http://bit.ly/ruby-linkedin"
320
320
  end
321
-
321
+
322
322
  should "list repos for a user" do
323
323
  stub_get("/repos/show/pengwynn", "repos.json")
324
324
  repos = Octopussy.list_repos('pengwynn')
325
325
  repos.first.name.should == 'twitter'
326
326
  repos.first.watchers.should == 609
327
327
  end
328
-
328
+
329
329
  should "list collaborators for a repo" do
330
330
  stub_post("/repos/show/pengwynn/octopussy/collaborators", "collaborators.json")
331
331
  users = Octopussy.collaborators({:username => "pengwynn", :repo => "octopussy"})
332
332
  users.last.should == 'adamstac'
333
333
  end
334
-
334
+
335
335
  should "show the network for a repo" do
336
336
  stub_get("/repos/show/pengwynn/linkedin/network", "network.json")
337
337
  network = Octopussy.network({:username => 'pengwynn', :repo => "linkedin"})
338
338
  network.last.owner.should == 'nfo'
339
339
  end
340
-
340
+
341
341
  should "show the language breakdown for a repo" do
342
342
  stub_get("/repos/show/pengwynn/linkedin/languages", "languages.json")
343
343
  languages = Octopussy.languages({:username => 'pengwynn', :repo => "linkedin"})
344
344
  languages['Ruby'].should == 21515
345
345
  end
346
-
346
+
347
347
  should "list all the tags in a repo" do
348
348
  stub_get("/repos/show/pengwynn/linkedin/tags", "tags.json")
349
349
  tags = Octopussy.tags(:username => 'pengwynn', :repo => "linkedin")
350
350
  assert tags.include?("v0.0.1")
351
351
  end
352
-
352
+
353
353
  should "list all the branches in a repo" do
354
354
  stub_get("/repos/show/pengwynn/linkedin/branches", "branches.json")
355
355
  branches = Octopussy.branches(:username => 'pengwynn', :repo => "linkedin")
356
356
  assert branches.include?("integration")
357
357
  end
358
-
359
-
358
+
359
+
360
360
  # network
361
361
  should "return network meta info for a repo" do
362
362
  stub_get("http://github.com/schacon/simplegit/network_meta", "network_meta.json")
@@ -364,7 +364,7 @@ class TestOctopussy < Test::Unit::TestCase
364
364
  info.users.first.name.should == 'schacon'
365
365
  info.users.first.repo.should == 'simplegit'
366
366
  end
367
-
367
+
368
368
  should "return first 100 commits by branch" do
369
369
  stub_get("http://github.com/schacon/simplegit/network_data_chunk?nethash=fa8fe264b926cdebaab36420b6501bd74402a6ff", "network_data.json")
370
370
  info = Octopussy.network_data({:username => "schacon", :repo => "simplegit"}, "fa8fe264b926cdebaab36420b6501bd74402a6ff")
@@ -378,24 +378,70 @@ class TestOctopussy < Test::Unit::TestCase
378
378
  trees.first.name.should == '.gitignore'
379
379
  trees.first.sha.should == 'e43b0f988953ae3a84b00331d0ccf5f7d51cb3cf'
380
380
  end
381
-
381
+
382
382
  should "return data about a blob by tree SHA and path" do
383
383
  stub_get("http://github.com/api/v2/json/blob/show/defunkt/facebox/d4fc2d5e810d9b4bc1ce67702603080e3086a4ed/README.txt", "blob.json")
384
384
  blob = Octopussy.blob({:username => "defunkt", :repo => "facebox"}, "d4fc2d5e810d9b4bc1ce67702603080e3086a4ed", "README.txt")
385
385
  blob.name.should == 'README.txt'
386
386
  blob.sha.should == 'd4fc2d5e810d9b4bc1ce67702603080e3086a4ed'
387
387
  end
388
-
388
+
389
389
  should "return the contents of a blob with the blob's SHA" do
390
390
  stub_get("http://github.com/api/v2/yaml/blob/show/defunkt/facebox/4bf7a39e8c4ec54f8b4cd594a3616d69004aba69", "raw_git_data.json")
391
391
  raw_text = Octopussy.raw({:username => "defunkt", :repo => "facebox"}, "4bf7a39e8c4ec54f8b4cd594a3616d69004aba69")
392
392
  assert raw_text.include?("cd13d9a61288dceb0a7aa73b55ed2fd019f4f1f7")
393
393
  end
394
394
 
395
+ #commits
396
+ should "list commits for a repo's master branch by default" do
397
+ stub_get("http://github.com/api/v2/json/commits/list/defunkt/facebox/master", "list_commits.json")
398
+ commits_list = Octopussy.list_commits({:username => "defunkt", :repo => "facebox"})
399
+ assert commits_list.any? { |c| c.message == "Fixed CSS expression, throwing errors in IE6." }
400
+ end
401
+
402
+ should "list commits for a repo on a given branch" do
403
+ stub_get("http://github.com/api/v2/json/commits/list/schacon/simplegit/m/dev/cp", "list_branch_commits.json")
404
+ commits_list = Octopussy.list_commits({:username => "schacon", :repo => "simplegit"}, "m/dev/cp")
405
+ assert commits_list.any? { |c| c.message == "removed unnecessary test code" }
406
+ end
407
+
408
+ should "show a specific commit for a repo given its SHA" do
409
+ sha = "1ff368f79b0f0aa0e1f1d78bcaa8691f94f9703e"
410
+ stub_get("http://github.com/api/v2/json/commits/show/defunkt/facebox/#{sha}", "show_commit.json")
411
+ show_commit = Octopussy.commit({:username => "defunkt", :repo => "facebox"}, sha)
412
+ assert show_commit.message == "Fixed CSS expression, throwing errors in IE6."
413
+ end
414
+
415
+ end
416
+
417
+ context "when Github responds with an error" do
418
+ {
419
+ ["401", "Unauthorized"] => Octopussy::Unauthorized,
420
+ ["403", "Rate Limit Exceeded"] => Octopussy::RateLimitExceeded,
421
+ ["404", "Not Found"] => Octopussy::NotFound,
422
+ ["406", "Not Acceptable"] => Octopussy::ClientError,
423
+ ["500", "Server Error"] => Octopussy::ServerError,
424
+ ["501", "Not Implemented"] => Octopussy::ServerError
425
+ }.each do |status, exception|
426
+ context "#{status.first}, a get" do
427
+ should "raise an #{exception.name} error" do
428
+ stub_get("/user/show/pengwynn", nil, status)
429
+ lambda { Octopussy.user("pengwynn") }.should raise_error(exception)
430
+ end
431
+ end
432
+
433
+ context "#{status.first}, a post" do
434
+ should "raise an #{exception.name} error" do
435
+ stub_post("/user/show/pengwynn?login=pengwynn&token=OU812", nil, status)
436
+ client = Octopussy::Client.new(:login => 'pengwynn', :token => 'OU812')
437
+ lambda { client.update_user(:location => "Dallas, TX") }.should raise_error(exception)
438
+ end
439
+ end
440
+ end
395
441
  end
396
-
442
+
397
443
  context "when consuming feeds" do
398
-
444
+
399
445
  should "should set user, title, and published time for the event" do
400
446
  entry = Hashie::Mash.new({
401
447
  :id => 'tag:github.com,2008:CreateEvent/110645788',
@@ -414,7 +460,7 @@ class TestOctopussy < Test::Unit::TestCase
414
460
  event.title.should == 'pengwynn created tag v0.7.10 at jnunemaker/twitter'
415
461
  event.links.first.should == 'http://github.com/jnunemaker/twitter/tree/v0.7.10'
416
462
  end
417
-
463
+
418
464
  should "should create a repo event from an atom entry" do
419
465
  entry = Hashie::Mash.new({
420
466
  :id => 'tag:github.com,2008:CreateEvent/110645788',
@@ -447,7 +493,7 @@ class TestOctopussy < Test::Unit::TestCase
447
493
  event.repo.name.should == 'twitter'
448
494
  event.tag.should == 'v0.7.10'
449
495
  end
450
-
496
+
451
497
  should "should create a branch event from an atom entry" do
452
498
  entry = Hashie::Mash.new({
453
499
  :id => 'tag:github.com,2008:CreateEvent/110645788',
@@ -465,7 +511,7 @@ class TestOctopussy < Test::Unit::TestCase
465
511
  event.user.should == 'cwcore'
466
512
  event.branch.should == 'cwcore-0.1'
467
513
  end
468
-
514
+
469
515
  should "should create a push event from an atom entry" do
470
516
  entry = Hashie::Mash.new({
471
517
  :id => 'tag:github.com,2008:PushEvent/110645788',
@@ -481,7 +527,7 @@ class TestOctopussy < Test::Unit::TestCase
481
527
  event.repo.name.should == 'twitter'
482
528
  event.branch.should == 'master'
483
529
  end
484
-
530
+
485
531
  should "should create a fork event from an atom entry" do
486
532
  entry = Hashie::Mash.new({
487
533
  :id => 'tag:github.com,2008:ForkEvent/110645788',
@@ -498,7 +544,7 @@ class TestOctopussy < Test::Unit::TestCase
498
544
  event.repo.name.should == 'aeon'
499
545
  event.forked_from.username.should == 'djh'
500
546
  end
501
-
547
+
502
548
  should "should create a watch event from an atom entry" do
503
549
  entry = Hashie::Mash.new({
504
550
  :id => 'tag:github.com,2008:WatchEvent/110645788',
@@ -514,7 +560,7 @@ class TestOctopussy < Test::Unit::TestCase
514
560
  event.repo.username.should == 'bogolisk'
515
561
  event.repo.name.should == 'egg'
516
562
  end
517
-
563
+
518
564
  should "should create a follow event from an atom entry" do
519
565
  entry = Hashie::Mash.new({
520
566
  :id => 'tag:github.com,2008:FollowEvent/110645788',
@@ -530,7 +576,7 @@ class TestOctopussy < Test::Unit::TestCase
530
576
  event.repo.should == nil
531
577
  event.target_user.should == 'swistak'
532
578
  end
533
-
579
+
534
580
  should "should create an issues event from an atom entry" do
535
581
  entry = Hashie::Mash.new({
536
582
  :id => 'tag:github.com,2008:IssuesEvent/110645788',
@@ -547,7 +593,7 @@ class TestOctopussy < Test::Unit::TestCase
547
593
  event.action.should == 'closed'
548
594
  event.issue_number.should == 19
549
595
  end
550
-
596
+
551
597
  should "should create a gist event from an atom entry" do
552
598
  entry = Hashie::Mash.new({
553
599
  :id => 'tag:github.com,2008:GistEvent/110645788',
@@ -563,7 +609,7 @@ class TestOctopussy < Test::Unit::TestCase
563
609
  event.repo.should == nil
564
610
  event.gist_number.should == 253987
565
611
  end
566
-
612
+
567
613
  should "should create a member event from an atom entry" do
568
614
  entry = Hashie::Mash.new({
569
615
  :id => 'tag:github.com,2008:MemberEvent/110645788',
@@ -579,7 +625,7 @@ class TestOctopussy < Test::Unit::TestCase
579
625
  event.repo.name.should == 'octopussy'
580
626
  event.target_user.should == 'adamstac'
581
627
  end
582
-
628
+
583
629
  should "should create a fork_apply event from an atom entry" do
584
630
  entry = Hashie::Mash.new({
585
631
  :id => 'tag:github.com,2008:ForkApplyEvent/110645788',
@@ -595,7 +641,7 @@ class TestOctopussy < Test::Unit::TestCase
595
641
  event.repo.name.should == 'linkedin'
596
642
  event.branch.should == 'integration'
597
643
  end
598
-
644
+
599
645
  should "should create a wiki event from an atom entry" do
600
646
  entry = Hashie::Mash.new({
601
647
  :id => 'tag:github.com,2008:WikiEvent/110645788',
@@ -611,7 +657,7 @@ class TestOctopussy < Test::Unit::TestCase
611
657
  event.repo.name.should == 'Fammel'
612
658
  event.page.should == 'documentation'
613
659
  end
614
-
660
+
615
661
  should "should create a comment event from an atom entry" do
616
662
  entry = Hashie::Mash.new({
617
663
  :id => 'tag:github.com,2008:CommitCommentEvent/110645788',
@@ -626,7 +672,7 @@ class TestOctopussy < Test::Unit::TestCase
626
672
  event.event_type.should == 'comment'
627
673
  event.repo.name.should == 'resque'
628
674
  end
629
-
675
+
630
676
  should "should create a delete event from an atom entry" do
631
677
  entry = Hashie::Mash.new({
632
678
  :id => 'tag:github.com,2008:DeleteEvent/110645788',
@@ -642,7 +688,7 @@ class TestOctopussy < Test::Unit::TestCase
642
688
  event.repo.name.should == 'vimlike-smooziee'
643
689
  event.branch.should == 'search'
644
690
  end
645
-
691
+
646
692
  should "should create a public event from an atom entry" do
647
693
  entry = Hashie::Mash.new({
648
694
  :id => 'tag:github.com,2008:PublicEvent/110645788',
@@ -657,7 +703,7 @@ class TestOctopussy < Test::Unit::TestCase
657
703
  event.event_type.should == 'public'
658
704
  event.repo.name.should == 'bpmn2'
659
705
  end
660
-
706
+
661
707
  should "should create a download event from an atom entry" do
662
708
  entry = Hashie::Mash.new({
663
709
  :id => 'tag:github.com,2008:DownloadEvent/110645788',
@@ -673,6 +719,6 @@ class TestOctopussy < Test::Unit::TestCase
673
719
  event.repo.name.should == 'prototype'
674
720
  end
675
721
  end
676
-
677
-
722
+
723
+
678
724
  end