octopussy 0.1.4 → 0.2.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.
- data/Rakefile +5 -5
- data/VERSION +1 -1
- data/changelog.markdown +18 -5
- data/lib/octopussy.rb +32 -110
- data/lib/octopussy/client.rb +31 -66
- data/octopussy.gemspec +16 -13
- data/test/fixtures/list_branch_commits.json +48 -0
- data/test/fixtures/list_commits.json +824 -0
- data/test/fixtures/show_commit.json +37 -0
- data/test/helper.rb +9 -14
- data/test/{test_octopussy.rb → octopussy_test.rb} +129 -83
- data/test/{test_repo.rb → repo_test.rb} +3 -3
- metadata +69 -35
@@ -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
|
36
|
-
options = {:body =>
|
37
|
-
options.merge!({:
|
38
|
-
|
39
|
-
|
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
|
-
|
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
|