github_api 0.4.4 → 0.4.5

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 (62) hide show
  1. data/features/error_codes.feature +1 -1
  2. data/lib/github_api/error.rb +25 -32
  3. data/lib/github_api/error/bad_request.rb +12 -0
  4. data/lib/github_api/error/forbidden.rb +12 -0
  5. data/lib/github_api/error/internal_server_error.rb +12 -0
  6. data/lib/github_api/error/not_found.rb +12 -0
  7. data/lib/github_api/error/service_error.rb +19 -0
  8. data/lib/github_api/error/service_unavailable.rb +12 -0
  9. data/lib/github_api/error/unauthorized.rb +12 -0
  10. data/lib/github_api/error/unprocessable_entity.rb +12 -0
  11. data/lib/github_api/gists.rb +1 -1
  12. data/lib/github_api/orgs/members.rb +2 -2
  13. data/lib/github_api/orgs/teams.rb +2 -2
  14. data/lib/github_api/pull_requests.rb +14 -7
  15. data/lib/github_api/pull_requests/comments.rb +19 -14
  16. data/lib/github_api/repos/collaborators.rb +1 -1
  17. data/lib/github_api/repos/watching.rb +1 -1
  18. data/lib/github_api/response/raise_error.rb +8 -13
  19. data/lib/github_api/users/followers.rb +1 -1
  20. data/lib/github_api/version.rb +1 -1
  21. data/spec/fixtures/pull_requests/comment.json +17 -0
  22. data/spec/fixtures/pull_requests/comments.json +19 -0
  23. data/spec/fixtures/pull_requests/commits.json +27 -0
  24. data/spec/fixtures/pull_requests/files.json +13 -0
  25. data/spec/fixtures/pull_requests/merge_failure.json +5 -0
  26. data/spec/fixtures/pull_requests/merge_success.json +5 -0
  27. data/spec/fixtures/pull_requests/pull_request.json +123 -0
  28. data/spec/fixtures/pull_requests/pull_requests.json +31 -0
  29. data/spec/github/authorizations_spec.rb +5 -5
  30. data/spec/github/events_spec.rb +8 -8
  31. data/spec/github/gists/comments_spec.rb +5 -5
  32. data/spec/github/gists_spec.rb +7 -7
  33. data/spec/github/git_data/blobs_spec.rb +2 -2
  34. data/spec/github/git_data/commits_spec.rb +2 -2
  35. data/spec/github/git_data/references_spec.rb +4 -4
  36. data/spec/github/git_data/tags_spec.rb +2 -2
  37. data/spec/github/git_data/trees_spec.rb +2 -2
  38. data/spec/github/git_data_spec.rb +0 -1
  39. data/spec/github/issues/comments_spec.rb +5 -5
  40. data/spec/github/issues/events_spec.rb +2 -2
  41. data/spec/github/issues/labels_spec.rb +10 -10
  42. data/spec/github/issues/milestones_spec.rb +5 -5
  43. data/spec/github/issues_spec.rb +5 -5
  44. data/spec/github/orgs/members_spec.rb +5 -5
  45. data/spec/github/orgs/teams_spec.rb +11 -11
  46. data/spec/github/orgs_spec.rb +3 -3
  47. data/spec/github/pull_requests/comments_spec.rb +265 -0
  48. data/spec/github/pull_requests_spec.rb +414 -0
  49. data/spec/github/repos/collaborators_spec.rb +3 -3
  50. data/spec/github/repos/commits_spec.rb +8 -8
  51. data/spec/github/repos/downloads_spec.rb +5 -5
  52. data/spec/github/repos/forks_spec.rb +2 -2
  53. data/spec/github/repos/hooks_spec.rb +6 -6
  54. data/spec/github/repos/keys_spec.rb +5 -5
  55. data/spec/github/repos/pub_sub_hubbub_spec.rb +2 -2
  56. data/spec/github/repos/watching_spec.rb +6 -6
  57. data/spec/github/repos_spec.rb +11 -11
  58. data/spec/github/users/emails_spec.rb +5 -0
  59. data/spec/github/users/followers_spec.rb +5 -0
  60. data/spec/github/users/keys_spec.rb +5 -0
  61. data/spec/github/users_spec.rb +2 -2
  62. metadata +23 -2
@@ -52,7 +52,7 @@ describe Github::Orgs::Teams, :type => :base do
52
52
  it "should return 404 with a message 'Not Found'" do
53
53
  expect {
54
54
  github.orgs.teams org
55
- }.to raise_error(Github::ResourceNotFound)
55
+ }.to raise_error(Github::Error::NotFound)
56
56
  end
57
57
  end
58
58
  end # teams
@@ -94,7 +94,7 @@ describe Github::Orgs::Teams, :type => :base do
94
94
  it "should fail to retrive resource" do
95
95
  expect {
96
96
  github.orgs.team team
97
- }.to raise_error(Github::ResourceNotFound)
97
+ }.to raise_error(Github::Error::NotFound)
98
98
  end
99
99
  end
100
100
  end # team
@@ -145,7 +145,7 @@ describe Github::Orgs::Teams, :type => :base do
145
145
  it "should faile to retrieve resource" do
146
146
  expect {
147
147
  github.orgs.create_team org, inputs
148
- }.to raise_error(Github::ResourceNotFound)
148
+ }.to raise_error(Github::Error::NotFound)
149
149
  end
150
150
  end
151
151
  end # create_team
@@ -196,7 +196,7 @@ describe Github::Orgs::Teams, :type => :base do
196
196
  it "should faile to retrieve resource" do
197
197
  expect {
198
198
  github.orgs.edit_team team, inputs
199
- }.to raise_error(Github::ResourceNotFound)
199
+ }.to raise_error(Github::Error::NotFound)
200
200
  end
201
201
  end
202
202
  end # edit_team
@@ -228,7 +228,7 @@ describe Github::Orgs::Teams, :type => :base do
228
228
  end
229
229
 
230
230
  it "should fail to find resource" do
231
- expect { github.orgs.delete_team team }.to raise_error(Github::ResourceNotFound)
231
+ expect { github.orgs.delete_team team }.to raise_error(Github::Error::NotFound)
232
232
  end
233
233
  end
234
234
  end # delete_team
@@ -280,7 +280,7 @@ describe Github::Orgs::Teams, :type => :base do
280
280
  it "should return 404 with a message 'Not Found'" do
281
281
  expect {
282
282
  github.orgs.team_members team
283
- }.to raise_error(Github::ResourceNotFound)
283
+ }.to raise_error(Github::Error::NotFound)
284
284
  end
285
285
  end
286
286
  end # team_members
@@ -351,7 +351,7 @@ describe Github::Orgs::Teams, :type => :base do
351
351
  it "should fail to add resource" do
352
352
  expect {
353
353
  github.orgs.add_team_member team, member
354
- }.to raise_error(Github::ResourceNotFound)
354
+ }.to raise_error(Github::Error::NotFound)
355
355
  end
356
356
  end
357
357
  end # add_team_member
@@ -390,7 +390,7 @@ describe Github::Orgs::Teams, :type => :base do
390
390
  it "should fail to remove resource" do
391
391
  expect {
392
392
  github.orgs.remove_team_member team, member
393
- }.to raise_error(Github::ResourceNotFound)
393
+ }.to raise_error(Github::Error::NotFound)
394
394
  end
395
395
  end
396
396
  end # remove_team_member
@@ -442,7 +442,7 @@ describe Github::Orgs::Teams, :type => :base do
442
442
  it "should return 404 with a message 'Not Found'" do
443
443
  expect {
444
444
  github.orgs.team_repos team
445
- }.to raise_error(Github::ResourceNotFound)
445
+ }.to raise_error(Github::Error::NotFound)
446
446
  end
447
447
  end
448
448
  end # team_repos
@@ -512,7 +512,7 @@ describe Github::Orgs::Teams, :type => :base do
512
512
  it "should fail to add resource" do
513
513
  expect {
514
514
  github.orgs.add_team_repo team, user, repo
515
- }.to raise_error(Github::ResourceNotFound)
515
+ }.to raise_error(Github::Error::NotFound)
516
516
  end
517
517
  end
518
518
  end # add_team_repo
@@ -551,7 +551,7 @@ describe Github::Orgs::Teams, :type => :base do
551
551
  it "should fail to remove resource" do
552
552
  expect {
553
553
  github.orgs.remove_team_repo team, user, repo
554
- }.to raise_error(Github::ResourceNotFound)
554
+ }.to raise_error(Github::Error::NotFound)
555
555
  end
556
556
  end
557
557
  end # remove_team_repo
@@ -63,7 +63,7 @@ describe Github::Orgs, :type => :base do
63
63
  it "should return 404 with a message 'Not Found'" do
64
64
  expect {
65
65
  github.orgs.orgs user
66
- }.to raise_error(Github::ResourceNotFound)
66
+ }.to raise_error(Github::Error::NotFound)
67
67
  end
68
68
  end
69
69
  end # orgs
@@ -105,7 +105,7 @@ describe Github::Orgs, :type => :base do
105
105
  it "should fail to retrive resource" do
106
106
  expect {
107
107
  github.orgs.org org
108
- }.to raise_error(Github::ResourceNotFound)
108
+ }.to raise_error(Github::Error::NotFound)
109
109
  end
110
110
  end
111
111
  end # org
@@ -148,7 +148,7 @@ describe Github::Orgs, :type => :base do
148
148
  it "should fail to find resource" do
149
149
  expect {
150
150
  github.orgs.edit_org org
151
- }.to raise_error(Github::ResourceNotFound)
151
+ }.to raise_error(Github::Error::NotFound)
152
152
  end
153
153
  end
154
154
  end # edit_org
@@ -0,0 +1,265 @@
1
+ require 'spec_helper'
2
+
3
+ describe Github::PullRequests::Comments, :type => :base do
4
+
5
+ let(:pull_request_id) { 1 }
6
+ let(:comment_id) { 1 }
7
+
8
+ describe "#comments" do
9
+ context 'check aliases' do
10
+ it { github.pull_requests.should respond_to :comments }
11
+ it { github.pull_requests.should respond_to :request_comments }
12
+ end
13
+
14
+ context 'resource found' do
15
+
16
+ before do
17
+ stub_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/comments").
18
+ to_return(:body => fixture('pull_requests/comments.json'),
19
+ :status => 200,
20
+ :headers => {:content_type => "application/json; charset=utf-8"})
21
+ end
22
+
23
+ it "throws error if comment id not provided" do
24
+ expect {
25
+ github.pull_requests.comments user, repo, nil
26
+ }.to raise_error(ArgumentError)
27
+ end
28
+
29
+ it "should get the resources" do
30
+ github.pull_requests.comments user, repo, pull_request_id
31
+ a_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/comments").
32
+ should have_been_made
33
+ end
34
+
35
+ it "should return array of resources" do
36
+ comments = github.pull_requests.comments user, repo, pull_request_id
37
+ comments.should be_an Array
38
+ comments.should have(1).items
39
+ end
40
+
41
+ it "should be a mash type" do
42
+ comments = github.pull_requests.comments user, repo, pull_request_id
43
+ comments.first.should be_a Hashie::Mash
44
+ end
45
+
46
+ it "should get pull request comment information" do
47
+ comments = github.pull_requests.comments user, repo, pull_request_id
48
+ comments.first.id.should == pull_request_id
49
+ end
50
+
51
+ it "should yield to a block" do
52
+ github.pull_requests.should_receive(:comments).
53
+ with(user, repo, pull_request_id).and_yield('web')
54
+ github.pull_requests.comments(user, repo, pull_request_id) {|param| 'web' }
55
+ end
56
+ end
57
+
58
+ context 'resource not found' do
59
+ before do
60
+ stub_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/comments").
61
+ to_return(:body => "", :status => [404, "Not Found"])
62
+ end
63
+
64
+ it "should return 404 with a message 'Not Found'" do
65
+ expect {
66
+ github.pull_requests.comments user, repo, pull_request_id
67
+ }.to raise_error(Github::Error::NotFound)
68
+ end
69
+ end
70
+ end # comments
71
+
72
+ describe "#comment" do
73
+ context 'check aliases' do
74
+ it { github.pull_requests.should respond_to :comment }
75
+ it { github.pull_requests.should respond_to :get_comment }
76
+ end
77
+
78
+ context 'resource found' do
79
+ before do
80
+ stub_get("/repos/#{user}/#{repo}/pulls/comments/#{comment_id}").
81
+ to_return(:body => fixture('pull_requests/comment.json'),
82
+ :status => 200,
83
+ :headers => {:content_type => "application/json; charset=utf-8"})
84
+ end
85
+
86
+ it "should fail to get resource without comment id" do
87
+ expect {
88
+ github.pull_requests.comment user, repo, nil
89
+ }.to raise_error(ArgumentError)
90
+ end
91
+
92
+ it "should get the resource" do
93
+ github.pull_requests.comment user, repo, pull_request_id
94
+ a_get("/repos/#{user}/#{repo}/pulls/comments/#{comment_id}").
95
+ should have_been_made
96
+ end
97
+
98
+ it "should get comment information" do
99
+ comment = github.pull_requests.comment user, repo, comment_id
100
+ comment.id.should eq comment_id
101
+ comment.user.login.should == 'octocat'
102
+ end
103
+
104
+ it "should return mash" do
105
+ comment = github.pull_requests.comment user, repo, comment_id
106
+ comment.should be_a Hashie::Mash
107
+ end
108
+ end
109
+
110
+ context 'resource not found' do
111
+ before do
112
+ stub_get("/repos/#{user}/#{repo}/pulls/comments/#{comment_id}").
113
+ to_return(:body => fixture('pull_requests/comment.json'),
114
+ :status => 404,
115
+ :headers => {:content_type => "application/json; charset=utf-8"})
116
+ end
117
+
118
+ it "should fail to retrive resource" do
119
+ expect {
120
+ github.pull_requests.comment user, repo, comment_id
121
+ }.to raise_error(Github::Error::NotFound)
122
+ end
123
+ end
124
+ end # comment
125
+
126
+ describe "create_request" do
127
+ let(:inputs) {
128
+ {
129
+ "body" => "Nice change",
130
+ "commit_id" => "6dcb09b5b57875f334f61aebed695e2e4193db5e",
131
+ "path" => "file1.txt",
132
+ "position" => 4,
133
+ "in_reply_to" => 4,
134
+ 'unrelated' => 'giberrish'
135
+ }
136
+ }
137
+
138
+ context "resouce created" do
139
+ before do
140
+ stub_post("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/comments").
141
+ with(:body => JSON.generate(inputs.except('unrelated'))).
142
+ to_return(:body => fixture('pull_requests/comment.json'), :status => 201, :headers => {:content_type => "application/json; charset=utf-8"})
143
+ end
144
+
145
+ it 'raises error when pull_request_id is missing' do
146
+ expect {
147
+ github.pull_requests user, repo, nil
148
+ }.to raise_error(ArgumentError)
149
+ end
150
+
151
+ it "should create resource successfully" do
152
+ github.pull_requests.create_comment user, repo, pull_request_id, inputs
153
+ a_post("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/comments").
154
+ with(inputs).should have_been_made
155
+ end
156
+
157
+ it "should return the resource" do
158
+ pull_request = github.pull_requests.create_comment user, repo, pull_request_id, inputs
159
+ pull_request.should be_a Hashie::Mash
160
+ end
161
+
162
+ it "should get the request information" do
163
+ pull_request = github.pull_requests.create_comment user, repo, pull_request_id, inputs
164
+ pull_request.id.should == pull_request_id
165
+ end
166
+ end
167
+
168
+ context "fails to create resource" do
169
+ before do
170
+ stub_post("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/comments").
171
+ with(inputs.except('unrelated')).
172
+ to_return(:body => fixture('pull_requests/comment.json'), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"})
173
+
174
+ end
175
+
176
+ it "should faile to retrieve resource" do
177
+ expect {
178
+ github.pull_requests.create_comment user, repo, pull_request_id, inputs
179
+ }.to raise_error(Github::Error::NotFound)
180
+ end
181
+ end
182
+ end # create_comment
183
+
184
+ describe "#edit_comment" do
185
+ let(:inputs) {
186
+ {
187
+ "body" => "Nice change",
188
+ 'unrelated' => 'giberrish'
189
+ }
190
+ }
191
+
192
+ context "resouce edited" do
193
+ before do
194
+ stub_patch("/repos/#{user}/#{repo}/pulls/comments/#{comment_id}").
195
+ with(:body => JSON.generate(inputs.except('unrelated'))).
196
+ to_return(:body => fixture('pull_requests/comment.json'),
197
+ :status => 200,
198
+ :headers => {:content_type => "application/json; charset=utf-8"})
199
+ end
200
+
201
+ it "should edit resource successfully" do
202
+ github.pull_requests.edit_comment user, repo, comment_id, inputs
203
+ a_patch("/repos/#{user}/#{repo}/pulls/comments/#{comment_id}").
204
+ with(inputs).should have_been_made
205
+ end
206
+
207
+ it "should return the resource" do
208
+ comment = github.pull_requests.edit_comment user, repo, comment_id, inputs
209
+ comment.should be_a Hashie::Mash
210
+ end
211
+
212
+ it "should get the comment information" do
213
+ comment = github.pull_requests.edit_comment user, repo, comment_id, inputs
214
+ comment.user.login.should == 'octocat'
215
+ end
216
+ end
217
+
218
+ context "failed to edit resource" do
219
+ before do
220
+ stub_patch("/repos/#{user}/#{repo}/pulls/comments/#{comment_id}").with(inputs).
221
+ to_return(:body => fixture('pull_requests/comment.json'),
222
+ :status => 404,
223
+ :headers => {:content_type => "application/json; charset=utf-8"})
224
+ end
225
+
226
+ it "should fail to retrieve resource" do
227
+ expect {
228
+ github.pull_requests.edit_comment user, repo, comment_id, inputs
229
+ }.to raise_error(Github::Error::NotFound)
230
+ end
231
+ end
232
+ end # edit_comment
233
+
234
+ context "#delete_comment" do
235
+ before do
236
+ stub_delete("/repos/#{user}/#{repo}/pulls/comments/#{comment_id}").
237
+ to_return(:body => fixture('pull_requests/comment.json'),
238
+ :status => 204,
239
+ :headers => {:content_type => "application/json; charset=utf-8"})
240
+ end
241
+
242
+ it 'should raise error if comment_id not present' do
243
+ expect {
244
+ github.pull_requests.delete_comment user, repo, nil
245
+ }.to raise_error(ArgumentError)
246
+ end
247
+
248
+ it "should remove resource successfully" do
249
+ github.pull_requests.delete_comment user, repo, comment_id
250
+ a_delete("/repos/#{user}/#{repo}/pulls/comments/#{comment_id}").
251
+ should have_been_made
252
+ end
253
+
254
+ it "fails to delete resource" do
255
+ stub_delete("/repos/#{user}/#{repo}/pulls/comments/#{comment_id}").
256
+ to_return(:body => '',
257
+ :status => 404,
258
+ :headers => {:content_type => "application/json; charset=utf-8"})
259
+ expect {
260
+ github.pull_requests.delete_comment user, repo, comment_id
261
+ }.to raise_error(Github::Error::NotFound)
262
+ end
263
+ end # delete_gist
264
+
265
+ end # Github::PullRequests::Comments
@@ -0,0 +1,414 @@
1
+ require 'spec_helper'
2
+
3
+ describe Github::PullRequests, :type => :base do
4
+
5
+ let(:pull_request_id) { 1 }
6
+
7
+ describe "#pull_requests" do
8
+ context 'check aliases' do
9
+ it { github.pull_requests.should respond_to :pulls }
10
+ it { github.pull_requests.should respond_to :requests }
11
+ end
12
+
13
+ context 'resource found' do
14
+ let(:params) { { :state => 'closed', :unrelated => true } }
15
+
16
+ before do
17
+ stub_get("/repos/#{user}/#{repo}/pulls").
18
+ with(:query => params.except(:unrelated)).
19
+ to_return(:body => fixture('pull_requests/pull_requests.json'),
20
+ :status => 200,
21
+ :headers => {:content_type => "application/json; charset=utf-8"})
22
+ end
23
+
24
+ it "throws error if pull_request id not provided" do
25
+ expect { github.pull_requests.pull_requests nil}.to raise_error(ArgumentError)
26
+ end
27
+
28
+ it "should get the resources" do
29
+ github.pull_requests.pull_requests user, repo, params
30
+ a_get("/repos/#{user}/#{repo}/pulls").with(:query => params).should have_been_made
31
+ end
32
+
33
+ it "should return array of resources" do
34
+ pull_requests = github.pull_requests.pull_requests user, repo, params
35
+ pull_requests.should be_an Array
36
+ pull_requests.should have(1).items
37
+ end
38
+
39
+ it "should be a mash type" do
40
+ pull_requests = github.pull_requests.pull_requests user, repo, params
41
+ pull_requests.first.should be_a Hashie::Mash
42
+ end
43
+
44
+ it "should get pull request information" do
45
+ pull_requests = github.pull_requests.pull_requests user, repo, params
46
+ pull_requests.first.title.should == 'new-feature'
47
+ end
48
+
49
+ it "should yield to a block" do
50
+ github.pull_requests.should_receive(:pull_requests).with(user, repo).
51
+ and_yield('web')
52
+ github.pull_requests.pull_requests(user, repo) { |param| 'web' }
53
+ end
54
+ end
55
+
56
+ context 'resource not found' do
57
+ before do
58
+ stub_get("/repos/#{user}/#{repo}/pulls").
59
+ to_return(:body => "", :status => [404, "Not Found"])
60
+ end
61
+
62
+ it "should return 404 with a message 'Not Found'" do
63
+ expect {
64
+ github.pull_requests.pull_requests user, repo
65
+ }.to raise_error(Github::Error::NotFound)
66
+ end
67
+ end
68
+ end # pull_requests
69
+
70
+ describe "#pull_request" do
71
+ context 'check aliases' do
72
+ it { github.pull_requests.should respond_to :pull_request }
73
+ it { github.pull_requests.should respond_to :get_pull_request }
74
+ end
75
+
76
+ context 'resource found' do
77
+ before do
78
+ stub_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}").
79
+ to_return(:body => fixture('pull_requests/pull_request.json'),
80
+ :status => 200,
81
+ :headers => {:content_type => "application/json; charset=utf-8"})
82
+ end
83
+
84
+ it "should fail to get resource without pull_request id" do
85
+ expect { github.pull_requests.pull_request nil }.to raise_error(ArgumentError)
86
+ end
87
+
88
+ it "should get the resource" do
89
+ github.pull_requests.pull_request user, repo, pull_request_id
90
+ a_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}").
91
+ should have_been_made
92
+ end
93
+
94
+ it "should get pull_request information" do
95
+ pull_request = github.pull_requests.pull_request user, repo, pull_request_id
96
+ pull_request.number.should eq pull_request_id
97
+ pull_request.head.user.login.should == 'octocat'
98
+ end
99
+
100
+ it "should return mash" do
101
+ pull_request = github.pull_requests.pull_request user, repo, pull_request_id
102
+ pull_request.should be_a Hashie::Mash
103
+ end
104
+ end
105
+
106
+ context 'resource not found' do
107
+ before do
108
+ stub_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}").
109
+ to_return(:body => fixture('pull_requests/pull_request.json'),
110
+ :status => 404,
111
+ :headers => {:content_type => "application/json; charset=utf-8"})
112
+ end
113
+
114
+ it "should fail to retrive resource" do
115
+ expect {
116
+ github.pull_requests.pull_request user, repo, pull_request_id
117
+ }.to raise_error(Github::Error::NotFound)
118
+ end
119
+ end
120
+ end # pull_request
121
+
122
+ describe "create_request" do
123
+ let(:inputs) {
124
+ {
125
+ "title" => "Amazing new feature",
126
+ "body" => "Please pull this in!",
127
+ "head" => "octocat:new-feature",
128
+ "base" => "master",
129
+ "state" => "open",
130
+ 'unrelated' => 'giberrish'
131
+ }
132
+ }
133
+
134
+ context "resouce created" do
135
+ before do
136
+ stub_post("/repos/#{user}/#{repo}/pulls").
137
+ with(:body => JSON.generate(inputs.except('unrelated'))).
138
+ to_return(:body => fixture('pull_requests/pull_request.json'), :status => 201, :headers => {:content_type => "application/json; charset=utf-8"})
139
+ end
140
+
141
+ it "should create resource successfully" do
142
+ github.pull_requests.create_request user, repo, inputs
143
+ a_post("/repos/#{user}/#{repo}/pulls").with(inputs).should have_been_made
144
+ end
145
+
146
+ it "should return the resource" do
147
+ pull_request = github.pull_requests.create_request user, repo, inputs
148
+ pull_request.should be_a Hashie::Mash
149
+ end
150
+
151
+ it "should get the request information" do
152
+ pull_request = github.pull_requests.create_request user, repo, inputs
153
+ pull_request.title.should eql "new-feature"
154
+ end
155
+ end
156
+
157
+ context "failed to create resource" do
158
+ before do
159
+ stub_post("/repos/#{user}/#{repo}/pulls").with(inputs).
160
+ to_return(:body => fixture('pull_requests/pull_request.json'), :status => 404, :headers => {:content_type => "application/json; charset=utf-8"})
161
+
162
+ end
163
+
164
+ it "should faile to retrieve resource" do
165
+ expect {
166
+ github.pull_requests.create_request user, repo, inputs
167
+ }.to raise_error(Github::Error::NotFound)
168
+ end
169
+ end
170
+ end # create_request
171
+
172
+ describe "#update_request" do
173
+ let(:inputs) {
174
+ {
175
+ "title" => "new title",
176
+ "body" => "updated body",
177
+ "state" => "open",
178
+ "unrelated" => true
179
+ }
180
+ }
181
+
182
+ context "resouce updateed" do
183
+ before do
184
+ stub_patch("/repos/#{user}/#{repo}/pulls/#{pull_request_id}").
185
+ with(:body => JSON.generate(inputs.except('unrelated'))).
186
+ to_return(:body => fixture('pull_requests/pull_request.json'),
187
+ :status => 201,
188
+ :headers => {:content_type => "application/json; charset=utf-8"})
189
+ end
190
+
191
+ it "should create resource successfully" do
192
+ github.pull_requests.update_request user, repo, pull_request_id, inputs
193
+ a_patch("/repos/#{user}/#{repo}/pulls/#{pull_request_id}").with(inputs).
194
+ should have_been_made
195
+ end
196
+
197
+ it "should return the resource" do
198
+ pull_request = github.pull_requests.update_request user, repo,
199
+ pull_request_id, inputs
200
+ pull_request.should be_a Hashie::Mash
201
+ end
202
+
203
+ it "should get the pull_request information" do
204
+ pull_request = github.pull_requests.update_request user, repo,
205
+ pull_request_id, inputs
206
+ pull_request.title.should == 'new-feature'
207
+ end
208
+ end
209
+
210
+ context "failed to create resource" do
211
+ before do
212
+ stub_patch("/repos/#{user}/#{repo}/pulls/#{pull_request_id}").
213
+ with(inputs).
214
+ to_return(:body => fixture('pull_requests/pull_request.json'),
215
+ :status => 404,
216
+ :headers => {:content_type => "application/json; charset=utf-8"})
217
+ end
218
+
219
+ it "should faile to retrieve resource" do
220
+ expect {
221
+ github.pull_requests.update_request user, repo, pull_request_id, inputs
222
+ }.to raise_error(Github::Error::NotFound)
223
+ end
224
+ end
225
+ end # update_request
226
+
227
+ describe "#commits" do
228
+ context 'check aliases' do
229
+ it { github.pull_requests.should respond_to :commits }
230
+ it { github.pull_requests.should respond_to :request_commits }
231
+ end
232
+
233
+ context 'resource found' do
234
+ before do
235
+ stub_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/commits").
236
+ to_return(:body => fixture('pull_requests/commits.json'),
237
+ :status => 200,
238
+ :headers => {:content_type => "application/json; charset=utf-8"})
239
+ end
240
+
241
+ it "throws error if pull_request_id not provided" do
242
+ expect {
243
+ github.pull_requests.commits user, repo, nil
244
+ }.to raise_error(ArgumentError)
245
+ end
246
+
247
+ it "should get the resources" do
248
+ github.pull_requests.commits user, repo, pull_request_id
249
+ a_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/commits").
250
+ should have_been_made
251
+ end
252
+
253
+ it "should return array of resources" do
254
+ pull_requests = github.pull_requests.commits user, repo, pull_request_id
255
+ pull_requests.should be_an Array
256
+ pull_requests.should have(1).items
257
+ end
258
+
259
+ it "should be a mash type" do
260
+ pull_requests = github.pull_requests.commits user, repo, pull_request_id
261
+ pull_requests.first.should be_a Hashie::Mash
262
+ end
263
+
264
+ it "should get pull request information" do
265
+ pull_requests = github.pull_requests.commits user, repo, pull_request_id
266
+ pull_requests.first.committer.name.should == 'Scott Chacon'
267
+ end
268
+
269
+ it "should yield to a block" do
270
+ github.pull_requests.should_receive(:commits).
271
+ with(user, repo, pull_request_id).and_yield('web')
272
+ github.pull_requests.commits(user, repo, pull_request_id) {|param| 'web' }
273
+ end
274
+ end
275
+
276
+ context 'resource not found' do
277
+ before do
278
+ stub_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/commits").
279
+ to_return(:body => "", :status => [404, "Not Found"])
280
+ end
281
+
282
+ it "should return 404 with a message 'Not Found'" do
283
+ expect {
284
+ github.pull_requests.commits user, repo, pull_request_id
285
+ }.to raise_error(Github::Error::NotFound)
286
+ end
287
+ end
288
+ end # commits
289
+
290
+ describe "#files" do
291
+ context 'check aliases' do
292
+ it { github.pull_requests.should respond_to :files }
293
+ it { github.pull_requests.should respond_to :request_files }
294
+ end
295
+
296
+ context 'resource found' do
297
+ before do
298
+ stub_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/files").
299
+ to_return(:body => fixture('pull_requests/files.json'),
300
+ :status => 200,
301
+ :headers => {:content_type => "application/json; charset=utf-8"})
302
+ end
303
+
304
+ it "should get the resources" do
305
+ github.pull_requests.files user, repo, pull_request_id
306
+ a_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/files").
307
+ should have_been_made
308
+ end
309
+
310
+ it "should return array of resources" do
311
+ pull_requests = github.pull_requests.files user, repo, pull_request_id
312
+ pull_requests.should be_an Array
313
+ pull_requests.should have(1).items
314
+ end
315
+
316
+ it "should be a mash type" do
317
+ pull_requests = github.pull_requests.files user, repo, pull_request_id
318
+ pull_requests.first.should be_a Hashie::Mash
319
+ end
320
+
321
+ it "should get pull request information" do
322
+ pull_requests = github.pull_requests.files user, repo, pull_request_id
323
+ pull_requests.first.filename.should == 'file1.txt'
324
+ end
325
+
326
+ it "should yield to a block" do
327
+ github.pull_requests.should_receive(:files).with(user, repo, pull_request_id).
328
+ and_yield('web')
329
+ github.pull_requests.files(user, repo, pull_request_id) { |param| 'web' }
330
+ end
331
+ end
332
+
333
+ context 'resource not found' do
334
+ before do
335
+ stub_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/files").
336
+ to_return(:body => "", :status => [404, "Not Found"])
337
+ end
338
+
339
+ it "should return 404 with a message 'Not Found'" do
340
+ expect {
341
+ github.pull_requests.files user, repo, pull_request_id
342
+ }.to raise_error(Github::Error::NotFound)
343
+ end
344
+ end
345
+ end # files
346
+
347
+ describe "#merged?" do
348
+ context "checks whetehr pull request has been merged" do
349
+ before do
350
+ github.oauth_token = nil
351
+ github.user = nil
352
+ stub_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/merge").
353
+ to_return(:body => "", :status => 404, :headers => {:user_agent => github.user_agent})
354
+ end
355
+
356
+ it "should fail validation " do
357
+ expect {
358
+ github.pull_requests.merged?(nil, nil, pull_request_id)
359
+ }.to raise_error(ArgumentError)
360
+ end
361
+
362
+ it "should return false if resource not found" do
363
+ merged = github.pull_requests.merged? user, repo, pull_request_id
364
+ merged.should be_false
365
+ end
366
+
367
+ it "should return true if resoure found" do
368
+ stub_get("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/merge").
369
+ to_return(:body => "", :status => 200,
370
+ :headers => {:user_agent => github.user_agent})
371
+ merged = github.pull_requests.merged? user, repo, pull_request_id
372
+ merged.should be_true
373
+ end
374
+ end
375
+ end # merged?
376
+
377
+ describe "#merge" do
378
+ context 'successful' do
379
+ before do
380
+ stub_put("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/merge").
381
+ to_return(:body => fixture('pull_requests/merge_success.json'),
382
+ :status => 200,
383
+ :headers => {:user_agent => github.user_agent})
384
+ end
385
+
386
+ it 'performs request' do
387
+ github.pull_requests.merge user, repo, pull_request_id
388
+ a_put("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/merge").
389
+ should have_been_made
390
+ end
391
+
392
+ it 'response contains merge success flag' do
393
+ response = github.pull_requests.merge(user, repo, pull_request_id)
394
+ response.merged.should be_true
395
+ end
396
+ end
397
+
398
+ context 'cannot be performed' do
399
+ before do
400
+ stub_put("/repos/#{user}/#{repo}/pulls/#{pull_request_id}/merge").
401
+ to_return(:body => fixture('pull_requests/merge_failure.json'),
402
+ :status => 200,
403
+ :headers => {:user_agent => github.user_agent})
404
+
405
+ end
406
+
407
+ it 'response contains merge failure flag' do
408
+ response = github.pull_requests.merge(user, repo, pull_request_id)
409
+ response.merged.should be_false
410
+ end
411
+ end
412
+ end # merge
413
+
414
+ end # Github::PullRequests