github_api 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/README.md +11 -5
  2. data/Rakefile +2 -0
  3. data/features/repos/statuses.feature +12 -12
  4. data/lib/github_api/api.rb +1 -1
  5. data/lib/github_api/authorizations.rb +3 -3
  6. data/lib/github_api/events.rb +7 -7
  7. data/lib/github_api/gists.rb +7 -7
  8. data/lib/github_api/gists/comments.rb +4 -4
  9. data/lib/github_api/git_data/blobs.rb +2 -3
  10. data/lib/github_api/git_data/commits.rb +2 -3
  11. data/lib/github_api/git_data/references.rb +10 -17
  12. data/lib/github_api/git_data/tags.rb +2 -3
  13. data/lib/github_api/git_data/trees.rb +2 -3
  14. data/lib/github_api/issues.rb +4 -6
  15. data/lib/github_api/issues/assignees.rb +5 -4
  16. data/lib/github_api/issues/comments.rb +5 -10
  17. data/lib/github_api/issues/events.rb +2 -3
  18. data/lib/github_api/issues/labels.rb +11 -20
  19. data/lib/github_api/issues/milestones.rb +5 -8
  20. data/lib/github_api/orgs.rb +2 -2
  21. data/lib/github_api/orgs/members.rb +7 -7
  22. data/lib/github_api/orgs/teams.rb +13 -13
  23. data/lib/github_api/page_iterator.rb +3 -1
  24. data/lib/github_api/pull_requests.rb +8 -16
  25. data/lib/github_api/pull_requests/comments.rb +5 -10
  26. data/lib/github_api/repos.rb +27 -8
  27. data/lib/github_api/repos/collaborators.rb +4 -7
  28. data/lib/github_api/repos/commits.rb +9 -16
  29. data/lib/github_api/repos/downloads.rb +5 -7
  30. data/lib/github_api/repos/forks.rb +3 -3
  31. data/lib/github_api/repos/hooks.rb +10 -13
  32. data/lib/github_api/repos/keys.rb +5 -8
  33. data/lib/github_api/repos/pub_sub_hubbub.rb +4 -4
  34. data/lib/github_api/repos/starring.rb +4 -4
  35. data/lib/github_api/repos/statuses.rb +2 -2
  36. data/lib/github_api/repos/watching.rb +4 -4
  37. data/lib/github_api/users/followers.rb +3 -3
  38. data/lib/github_api/users/keys.rb +3 -3
  39. data/lib/github_api/validations/presence.rb +16 -17
  40. data/lib/github_api/version.rb +1 -1
  41. data/spec/fixtures/repos/repos_sorted_by_pushed.json +56 -0
  42. data/spec/github/git_data_spec.rb +5 -7
  43. data/spec/github/issues_spec.rb +12 -12
  44. data/spec/github/orgs_spec.rb +2 -4
  45. data/spec/github/pull_requests_spec.rb +1 -1
  46. data/spec/github/repos/branch_spec.rb +48 -0
  47. data/spec/github/repos/branches_spec.rb +62 -0
  48. data/spec/github/repos/contributors_spec.rb +62 -0
  49. data/spec/github/repos/create_spec.rb +77 -0
  50. data/spec/github/repos/delete_spec.rb +43 -0
  51. data/spec/github/repos/downloads_spec.rb +51 -45
  52. data/spec/github/repos/edit_spec.rb +66 -0
  53. data/spec/github/repos/forks/create_spec.rb +49 -0
  54. data/spec/github/repos/forks/list_spec.rb +65 -0
  55. data/spec/github/repos/get_spec.rb +57 -0
  56. data/spec/github/repos/languages_spec.rb +61 -0
  57. data/spec/github/repos/list_spec.rb +99 -0
  58. data/spec/github/repos/tags_spec.rb +59 -0
  59. data/spec/github/repos/teams_spec.rb +59 -0
  60. data/spec/github/repos_spec.rb +13 -578
  61. data/spec/github/validations/presence_spec.rb +23 -4
  62. metadata +48 -42
  63. data/spec/github/repos/forks_spec.rb +0 -106
@@ -0,0 +1,62 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Repos, '#contributors' do
6
+ let(:user) { 'peter-murach' }
7
+ let(:repo) { 'github' }
8
+
9
+ after { reset_authentication_for subject }
10
+
11
+ let(:request_path) { "/repos/#{user}/#{repo}/contributors" }
12
+
13
+ before do
14
+ stub_get(request_path).to_return(:body => body, :status => status,
15
+ :headers => {:content_type => "application/json; charset=utf-8"})
16
+ end
17
+
18
+ context "resource found" do
19
+ let(:body) { fixture('repos/contributors.json') }
20
+ let(:status) { 200 }
21
+
22
+ it "should raise error when no user/repo parameters" do
23
+ expect { subject.contributors nil, repo }.to raise_error(ArgumentError)
24
+ end
25
+
26
+ it "should raise error when no repository" do
27
+ expect { subject.contributors user, nil }.to raise_error(ArgumentError)
28
+ end
29
+
30
+ it "should find resources" do
31
+ subject.contributors user, repo
32
+ a_get(request_path).should have_been_made
33
+ end
34
+
35
+ it "should return array of resources" do
36
+ contributors = subject.contributors user, repo
37
+ contributors.should be_an Array
38
+ contributors.should have(1).items
39
+ end
40
+
41
+ it "should get branch information" do
42
+ contributors = subject.contributors user, repo
43
+ contributors.first.login.should == 'octocat'
44
+ end
45
+
46
+ it "should yield to a block" do
47
+ subject.should_receive(:contributors).with(user, repo).and_yield('web')
48
+ subject.contributors(user, repo) { |param| 'web'}
49
+ end
50
+ end
51
+
52
+ context "resource not found" do
53
+ let(:body) { '' }
54
+ let(:status) { 404 }
55
+
56
+ it "should fail to get resource" do
57
+ expect {
58
+ subject.contributors user, repo
59
+ }.to raise_error(Github::Error::NotFound)
60
+ end
61
+ end
62
+ end # contributors
@@ -0,0 +1,77 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Repos, '#create' do
6
+ let(:user) { 'peter-murach' }
7
+ let(:repo) { 'github' }
8
+ let(:inputs) { {
9
+ :name => 'web',
10
+ :description => "This is your first repo",
11
+ :homepage => "https://github.com",
12
+ :public => true,
13
+ :has_issues => true,
14
+ :has_wiki => true
15
+ } }
16
+
17
+ before {
18
+ subject.oauth_token = OAUTH_TOKEN
19
+ stub_post(request_path).with(inputs).
20
+ to_return(:body => body, :status => status,
21
+ :headers => {:content_type => "application/json; charset=utf-8"} )
22
+ }
23
+
24
+ after { reset_authentication_for subject }
25
+
26
+ context "resource created successfully" do
27
+ let(:body) { fixture('repos/repo.json') }
28
+ let(:status) { 201 }
29
+
30
+ context "for the authenticated user" do
31
+ let(:request_path) { "/user/repos?access_token=#{OAUTH_TOKEN}" }
32
+
33
+ it "should faile to create resource if 'name' inputs is missing" do
34
+ expect {
35
+ subject.create inputs.except(:name)
36
+ }.to raise_error(Github::Error::RequiredParams)
37
+ end
38
+
39
+ it "should create resource" do
40
+ subject.create inputs
41
+ a_post(request_path).with(inputs).should have_been_made
42
+ end
43
+
44
+ it "should return the resource" do
45
+ repository = subject.create inputs
46
+ repository.name.should == 'Hello-World'
47
+ end
48
+
49
+ it "should return mash type" do
50
+ repository = subject.create inputs
51
+ repository.should be_a Hashie::Mash
52
+ end
53
+ end
54
+
55
+ context "for the authenticated user belonging to organization" do
56
+ let(:request_path) { "/orgs/#{org}/repos?access_token=#{OAUTH_TOKEN}" }
57
+ let(:org) { '37signals' }
58
+
59
+ it "should get the resource" do
60
+ subject.create inputs.merge(:org => org)
61
+ a_post(request_path).with(inputs).should have_been_made
62
+ end
63
+ end
64
+ end
65
+
66
+ context "failed to create" do
67
+ let(:request_path) { "/user/repos?access_token=#{OAUTH_TOKEN}" }
68
+ let(:body) { '' }
69
+ let(:status) { 404 }
70
+
71
+ it "should faile to retrieve resource" do
72
+ expect {
73
+ subject.create inputs
74
+ }.to raise_error(Github::Error::NotFound)
75
+ end
76
+ end
77
+ end # create
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Repos do
6
+ let(:user) { 'peter-murach' }
7
+ let(:repo) { 'github' }
8
+ let(:request_path) { "/repos/#{user}/#{repo}" }
9
+ let(:body) { '' }
10
+ let(:status) { 204 }
11
+
12
+ before {
13
+ stub_delete(request_path).to_return(:body => body, :status => status,
14
+ :headers => { :content_type => "application/json; charset=utf-8"})
15
+ }
16
+
17
+ after { reset_authentication_for subject }
18
+
19
+ it { should respond_to :remove }
20
+
21
+ it "should delete the resource successfully" do
22
+ subject.delete user, repo
23
+ a_delete(request_path).should have_been_made
24
+ end
25
+
26
+ it "should fail to delete resource without 'user' parameter" do
27
+ expect { subject.delete nil, repo }.to raise_error(ArgumentError)
28
+ end
29
+
30
+ it "should fail to delete resource without 'repo' parameter" do
31
+ expect { subject.delete user, nil }.to raise_error(ArgumentError)
32
+ end
33
+
34
+ context 'failed to delete' do
35
+ let(:status) { 404 }
36
+
37
+ it "should fail to delete resource that is not found" do
38
+ expect {
39
+ subject.delete user, repo
40
+ }.to raise_error(Github::Error::NotFound)
41
+ end
42
+ end
43
+ end # delete
@@ -8,20 +8,25 @@ describe Github::Repos::Downloads do
8
8
  let(:user) { 'peter-murach' }
9
9
  let(:repo) { 'github' }
10
10
 
11
- after { github.user, github.repo, github.oauth_token = nil, nil, nil }
11
+ after { reset_authentication_for(github) }
12
12
 
13
13
  it { described_class::VALID_DOWNLOAD_PARAM_NAMES.should_not be_nil }
14
+
14
15
  it { described_class::REQUIRED_PARAMS.should_not be_nil }
15
16
 
16
17
  describe "#list" do
17
- it { github.repos.downloads.should respond_to :list }
18
+
19
+ before do
20
+ stub_get("/repos/#{user}/#{repo}/downloads").
21
+ to_return(:body => body, :status => status,
22
+ :headers => {:content_type => "application/json; charset=utf-8"})
23
+ end
18
24
 
19
25
  context "resource found" do
20
- before do
21
- stub_get("/repos/#{user}/#{repo}/downloads").
22
- to_return(:body => fixture('repos/downloads.json'), :status => 200,
23
- :headers => {:content_type => "application/json; charset=utf-8"})
24
- end
26
+ let(:body) { fixture('repos/downloads.json') }
27
+ let(:status) { 200 }
28
+
29
+ it { should respond_to :list }
25
30
 
26
31
  it "should fail to get resource without username" do
27
32
  expect { github.repos.downloads.list }.to raise_error(ArgumentError)
@@ -56,10 +61,8 @@ describe Github::Repos::Downloads do
56
61
  end
57
62
 
58
63
  context "resource not found" do
59
- before do
60
- stub_get("/repos/#{user}/#{repo}/downloads").
61
- to_return(:body => "", :status => [404, "Not Found"])
62
- end
64
+ let(:body) { "" }
65
+ let(:status) { [404, "Not Found"] }
63
66
 
64
67
  it "should return 404 with a message 'Not Found'" do
65
68
  expect {
@@ -72,14 +75,17 @@ describe Github::Repos::Downloads do
72
75
  describe "#get" do
73
76
  let(:download_id) { 1 }
74
77
 
75
- it { github.repos.downloads.should respond_to :find }
78
+ before do
79
+ stub_get("/repos/#{user}/#{repo}/downloads/#{download_id}").
80
+ to_return(:body => body, :status => status,
81
+ :headers => {:content_type => "application/json; charset=utf-8"})
82
+ end
76
83
 
77
84
  context "resource found" do
78
- before do
79
- stub_get("/repos/#{user}/#{repo}/downloads/#{download_id}").
80
- to_return(:body => fixture('repos/download.json'), :status => 200,
81
- :headers => {:content_type => "application/json; charset=utf-8"})
82
- end
85
+ let(:body) { fixture('repos/download.json') }
86
+ let(:status) { 200 }
87
+
88
+ it { github.repos.downloads.should respond_to :find }
83
89
 
84
90
  it "should fail to get resource without download id" do
85
91
  expect {
@@ -105,10 +111,8 @@ describe Github::Repos::Downloads do
105
111
  end
106
112
 
107
113
  context "resource not found" do
108
- before do
109
- stub_get("/repos/#{user}/#{repo}/downloads/#{download_id}").
110
- to_return(:body => fixture('repos/download.json'), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"})
111
- end
114
+ let(:body) { "" }
115
+ let(:status) { [404, "Not Found"] }
112
116
 
113
117
  it "should fail to retrive resource" do
114
118
  expect {
@@ -121,12 +125,15 @@ describe Github::Repos::Downloads do
121
125
  describe "#delete" do
122
126
  let(:download_id) { 1 }
123
127
 
124
- context "resource edited successfully" do
125
- before do
126
- stub_delete("/repos/#{user}/#{repo}/downloads/#{download_id}").
127
- to_return(:body => '', :status => 204,
128
- :headers => { :content_type => "application/json; charset=utf-8"})
129
- end
128
+ before do
129
+ stub_delete("/repos/#{user}/#{repo}/downloads/#{download_id}").
130
+ to_return(:body => body, :status => status,
131
+ :headers => { :content_type => "application/json; charset=utf-8"})
132
+ end
133
+
134
+ context "resource deleted successfully" do
135
+ let(:body) { "" }
136
+ let(:status) { 204 }
130
137
 
131
138
  it "should fail to delete without 'user/repo' parameters" do
132
139
  expect { github.repos.downloads.delete }.to raise_error(ArgumentError)
@@ -144,12 +151,9 @@ describe Github::Repos::Downloads do
144
151
  end
145
152
  end
146
153
 
147
- context "failed to edit resource" do
148
- before do
149
- stub_delete("/repos/#{user}/#{repo}/downloads/#{download_id}").
150
- to_return(:body => fixture("repos/download.json"), :status => 404,
151
- :headers => { :content_type => "application/json; charset=utf-8"})
152
- end
154
+ context "failed to delete resource" do
155
+ let(:body) { "" }
156
+ let(:status) { [404, "Not Found"] }
153
157
 
154
158
  it "should fail to find resource" do
155
159
  expect {
@@ -162,12 +166,15 @@ describe Github::Repos::Downloads do
162
166
  describe "#create" do
163
167
  let(:inputs) { {:name => 'new_file.jpg', :size => 114034, :description => "Latest release", :content_type => 'text/plain'} }
164
168
 
165
- context "resouce created" do
166
- before do
167
- stub_post("/repos/#{user}/#{repo}/downloads").with(inputs).
168
- to_return(:body => fixture('repos/download_s3.json'), :status => 201, :headers => {:content_type => "application/json; charset=utf-8"})
169
+ before do
170
+ stub_post("/repos/#{user}/#{repo}/downloads").with(inputs).
171
+ to_return(:body => body, :status => status,
172
+ :headers => {:content_type => "application/json; charset=utf-8"})
173
+ end
169
174
 
170
- end
175
+ context "resouce created" do
176
+ let(:body) { fixture('repos/download_s3.json') }
177
+ let(:status) { 201}
171
178
 
172
179
  it "should fail to create resource if 'name' input is missing" do
173
180
  expect {
@@ -198,11 +205,8 @@ describe Github::Repos::Downloads do
198
205
  end
199
206
 
200
207
  context "failed to create resource" do
201
- before do
202
- stub_post("/repos/#{user}/#{repo}/downloads").with(inputs).
203
- to_return(:body => fixture('repos/download_s3.json'), :status => 404,
204
- :headers => {:content_type => "application/json; charset=utf-8"})
205
- end
208
+ let(:body) { "" }
209
+ let(:status) { [404, "Not Found"] }
206
210
 
207
211
  it "should faile to retrieve resource" do
208
212
  expect {
@@ -215,7 +219,7 @@ describe Github::Repos::Downloads do
215
219
  describe 'upload' do
216
220
  let(:resource) { stub(:resource) }
217
221
  let(:filename) { 'filename' }
218
- let(:res) { stub(:response, :body => 'success') }
222
+ let(:res) { stub(:response, :body => 'success') }
219
223
  let(:uploader) { stub(:uploader, :send => res) }
220
224
 
221
225
  context 'resource uploaded' do
@@ -224,7 +228,9 @@ describe Github::Repos::Downloads do
224
228
  end
225
229
 
226
230
  it "should fail if resource is of incorrect type" do
227
- expect { github.repos.downloads.upload resource, nil }.to raise_error(ArgumentError)
231
+ expect {
232
+ github.repos.downloads.upload resource, nil
233
+ }.to raise_error(ArgumentError)
228
234
  end
229
235
 
230
236
  it "should upload resource successfully" do
@@ -0,0 +1,66 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Repos, '#edit' do
6
+ let(:user) { 'peter-murach' }
7
+ let(:repo) { 'github' }
8
+ let(:request_path) { "/repos/#{user}/#{repo}" }
9
+ let(:inputs) do
10
+ { :name => 'web',
11
+ :description => "This is your first repo",
12
+ :homepage => "https://github.com",
13
+ :private => false,
14
+ :has_issues => true,
15
+ :has_wiki => true }
16
+ end
17
+
18
+ before {
19
+ stub_patch(request_path).with(inputs).
20
+ to_return(:body => body, :status => status,
21
+ :headers => { :content_type => "application/json; charset=utf-8"})
22
+ }
23
+
24
+ after { reset_authentication_for subject }
25
+
26
+ context "resource edited successfully" do
27
+ let(:body) { fixture("repos/repo.json") }
28
+ let(:status) { 200 }
29
+
30
+ it "should fail to edit without 'user/repo' parameters" do
31
+ expect { subject.edit user, nil }.to raise_error(ArgumentError)
32
+ end
33
+
34
+ it "should fail to edit resource without 'name' parameter" do
35
+ expect{
36
+ subject.edit user, repo, inputs.except(:name)
37
+ }.to raise_error(Github::Error::RequiredParams)
38
+ end
39
+
40
+ it "should edit the resource" do
41
+ subject.edit user, repo, inputs
42
+ a_patch(request_path).with(inputs).should have_been_made
43
+ end
44
+
45
+ it "should return resource" do
46
+ repository = subject.edit user, repo, inputs
47
+ repository.should be_a Hashie::Mash
48
+ end
49
+
50
+ it "should be able to retrieve information" do
51
+ repository = subject.edit user, repo, inputs
52
+ repository.name.should == 'Hello-World'
53
+ end
54
+ end
55
+
56
+ context "failed to edit resource" do
57
+ let(:body) { '' }
58
+ let(:status) { 404 }
59
+
60
+ it "should fail to find resource" do
61
+ expect {
62
+ subject.edit user, repo, inputs
63
+ }.to raise_error(Github::Error::NotFound)
64
+ end
65
+ end
66
+ end # edit
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Github::Repos::Forks, '#create' do
6
+ let(:user) { 'peter-murach' }
7
+ let(:repo) { 'github' }
8
+ let(:request_path) { "/repos/#{user}/#{repo}/forks" }
9
+ let(:inputs) { {:org => 'github'} }
10
+
11
+ before {
12
+ stub_post(request_path).with(inputs).
13
+ to_return(:body => body, :status => status,
14
+ :headers => {:content_type => "application/json; charset=utf-8"})
15
+ }
16
+
17
+ after { reset_authentication_for(subject) }
18
+
19
+ context "resouce created" do
20
+ let(:body) { fixture('repos/fork.json') }
21
+ let(:status) { 202 }
22
+
23
+ it "should create resource successfully" do
24
+ subject.create(user, repo, inputs)
25
+ a_post(request_path).with(inputs).should have_been_made
26
+ end
27
+
28
+ it "should return the resource" do
29
+ fork = subject.create user, repo, inputs
30
+ fork.should be_a Hashie::Mash
31
+ end
32
+
33
+ it "should get the fork information" do
34
+ fork = subject.create user, repo, inputs
35
+ fork.name.should == 'Hello-World'
36
+ end
37
+ end
38
+
39
+ context "failed to create resource" do
40
+ let(:body) { "" }
41
+ let(:status) { 404 }
42
+
43
+ it "should faile to retrieve resource" do
44
+ expect {
45
+ subject.create user, repo, inputs
46
+ }.to raise_error(Github::Error::NotFound)
47
+ end
48
+ end
49
+ end # create