git_reflow 0.8.4 → 0.8.6

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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/Appraisals +1 -1
  3. data/Gemfile.lock +17 -17
  4. data/git_reflow.gemspec +1 -1
  5. data/lib/git_reflow/config.rb +1 -1
  6. data/lib/git_reflow/git_helpers.rb +2 -2
  7. data/lib/git_reflow/git_server/bit_bucket/pull_request.rb +1 -1
  8. data/lib/git_reflow/git_server/git_hub/pull_request.rb +11 -10
  9. data/lib/git_reflow/git_server/pull_request.rb +18 -4
  10. data/lib/git_reflow/rspec/command_line_helpers.rb +9 -9
  11. data/lib/git_reflow/version.rb +1 -1
  12. data/lib/git_reflow/workflow.rb +6 -1
  13. data/lib/git_reflow/workflows/core.rb +1 -3
  14. data/lib/git_reflow/workflows/flat_merge.rb +10 -0
  15. data/lib/git_reflow.rb +9 -1
  16. metadata +7 -70
  17. data/spec/fixtures/git/git_config +0 -7
  18. data/spec/fixtures/issues/comment.json.erb +0 -27
  19. data/spec/fixtures/issues/comments.json +0 -29
  20. data/spec/fixtures/issues/comments.json.erb +0 -15
  21. data/spec/fixtures/pull_requests/comment.json.erb +0 -45
  22. data/spec/fixtures/pull_requests/comments.json +0 -47
  23. data/spec/fixtures/pull_requests/comments.json.erb +0 -15
  24. data/spec/fixtures/pull_requests/commits.json +0 -29
  25. data/spec/fixtures/pull_requests/external_pull_request.json +0 -145
  26. data/spec/fixtures/pull_requests/pull_request.json +0 -142
  27. data/spec/fixtures/pull_requests/pull_request.json.erb +0 -142
  28. data/spec/fixtures/pull_requests/pull_request_exists_error.json +0 -32
  29. data/spec/fixtures/pull_requests/pull_requests.json +0 -136
  30. data/spec/fixtures/repositories/commit.json +0 -53
  31. data/spec/fixtures/repositories/commit.json.erb +0 -53
  32. data/spec/fixtures/repositories/commits.json.erb +0 -13
  33. data/spec/fixtures/repositories/statuses.json +0 -31
  34. data/spec/lib/git_reflow/config_spec.rb +0 -74
  35. data/spec/lib/git_reflow/git_helpers_spec.rb +0 -182
  36. data/spec/lib/git_reflow/git_server_spec.rb +0 -101
  37. data/spec/lib/git_reflow/workflow_spec.rb +0 -56
  38. data/spec/lib/git_reflow/workflows/core_spec.rb +0 -665
  39. data/spec/lib/git_reflow_spec.rb +0 -39
  40. data/spec/lib/git_server/bit_bucket_spec.rb +0 -81
  41. data/spec/lib/git_server/git_hub/pull_request_spec.rb +0 -472
  42. data/spec/lib/git_server/git_hub_spec.rb +0 -221
  43. data/spec/lib/git_server/pull_request_spec.rb +0 -583
  44. data/spec/spec_helper.rb +0 -38
  45. data/spec/support/fake_github.rb +0 -128
  46. data/spec/support/fixtures.rb +0 -54
  47. data/spec/support/github_helpers.rb +0 -109
  48. data/spec/support/web_mocks.rb +0 -39
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe GitReflow do
4
-
5
- describe ".default_editor" do
6
- subject { GitReflow.default_editor }
7
-
8
- context "when the environment has EDITOR set" do
9
- before { allow(ENV).to receive(:[]).with('EDITOR').and_return('emacs') }
10
- specify { expect( subject ).to eql('emacs') }
11
- end
12
-
13
- context "when the environment has no EDITOR set" do
14
- before { allow(ENV).to receive(:[]).with('EDITOR').and_return(nil) }
15
- specify { expect( subject ).to eql('vi') }
16
- end
17
- end
18
-
19
- describe ".git_server" do
20
- subject { GitReflow.git_server }
21
-
22
- before do
23
- allow(GitReflow::Config).to receive(:get).with('reflow.git-server').and_return('GitHub ')
24
- end
25
-
26
- it "attempts to connect to the provider" do
27
- expect(GitReflow::GitServer).to receive(:connect).with(provider: 'GitHub', silent: true)
28
- subject
29
- end
30
- end
31
-
32
- context "aliases workflow commands" do
33
- %w{deliver refresh review setup stage start status}.each do |command|
34
- it "aliases the command to the workflow" do
35
- expect( subject.respond_to?(command.to_sym) ).to be_truthy
36
- end
37
- end
38
- end
39
- end
@@ -1,81 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe GitReflow::GitServer::BitBucket do
4
- let(:user) { 'reenhanced' }
5
- let(:password) { 'shazam' }
6
- let(:repo) { 'repo' }
7
- let(:api_key) { 'a1b2c3d4e5f6g7h8i9j0' }
8
- let(:hostname) { 'hostname.local' }
9
- let(:api_endpoint) { 'https://bitbucket.org/api/1.0' }
10
- let(:site) { 'https://bitbucket.org' }
11
- let(:remote_url) { "git@bitbucket.org:#{user}/#{repo}.git" }
12
-
13
- before do
14
- allow_any_instance_of(HighLine).to receive(:ask) do |terminal, question|
15
- values = {
16
- "Please enter your BitBucket username: " => user
17
- }
18
- return_value = values[question]
19
- question = ""
20
- return_value
21
- end
22
- end
23
-
24
- describe '#initialize(options)' do
25
- subject { GitReflow::GitServer::BitBucket.new({}) }
26
-
27
- it 'sets the reflow git server provider to BitBucket in the git config' do
28
- expect(GitReflow::Config).to receive(:set).once.with('reflow.git-server', 'BitBucket', local: false)
29
- subject
30
- end
31
-
32
- context 'storing git config settings only for this project' do
33
- subject { GitReflow::GitServer::BitBucket.new(project_only: true) }
34
-
35
- it 'sets the enterprise site and api as the site and api endpoints for the BitBucket provider in the git config' do
36
- expect(GitReflow::Config).to receive(:set).once.with('reflow.git-server', 'BitBucket', local: true)
37
- subject
38
- end
39
- end
40
-
41
- end
42
-
43
- describe '#authenticate' do
44
- let(:bitbucket) { GitReflow::GitServer::BitBucket.new( { }) }
45
- let!(:bitbucket_api) { BitBucket.new }
46
- subject { bitbucket.authenticate }
47
-
48
- context 'already authenticated' do
49
- it "notifies the user of successful setup" do
50
- allow(GitReflow::Config).to receive(:set).with('reflow.git-server', 'BitBucket', local: false)
51
- allow(GitReflow::Config).to receive(:get).with('remote.origin.url').and_return(remote_url)
52
- allow(GitReflow::Config).to receive(:get).with('bitbucket.user', local: false).and_return(user)
53
- allow(GitReflow::Config).to receive(:get).with('bitbucket.api-key', reload: true, local: false).and_return(api_key)
54
- allow(GitReflow::Config).to receive(:get).with('reflow.local-projects', all: true).and_return('')
55
- expect { subject }.to have_said "\nYour BitBucket account was already setup with:"
56
- expect { subject }.to have_said "\tUser Name: #{user}"
57
- end
58
- end
59
-
60
- context 'not yet authenticated' do
61
- context 'with valid BitBucket credentials' do
62
- before do
63
- allow(GitReflow::Config).to receive(:get).and_return('')
64
- allow(GitReflow::Config).to receive(:set)
65
- allow(GitReflow::Config).to receive(:set).with('bitbucket.api-key', reload: true).and_return(api_key)
66
- allow(GitReflow::Config).to receive(:get).with('bitbucket.api-key', reload: true).and_return('')
67
- allow(GitReflow::Config).to receive(:get).with('remote.origin.url').and_return(remote_url)
68
- allow(GitReflow::Config).to receive(:get).with('reflow.local-projects').and_return('')
69
- allow(bitbucket).to receive(:connection).and_return double(repos: double(all: []))
70
- end
71
-
72
- it "prompts me to setup an API key" do
73
- expect { subject }.to have_said "\nIn order to connect your BitBucket account,"
74
- expect { subject }.to have_said "you'll need to generate an API key for your team"
75
- expect { subject }.to have_said "Visit https://bitbucket.org/account/user/reenhanced/api-key/, to generate it\n"
76
- end
77
- end
78
- end
79
- end
80
-
81
- end
@@ -1,472 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe GitReflow::GitServer::GitHub::PullRequest do
4
- let(:user) { 'reenhanced' }
5
- let(:password) { 'shazam' }
6
- let(:repo) { 'repo' }
7
- let(:oauth_token_hash) { Hashie::Mash.new({ token: 'a1b2c3d4e5f6g7h8i9j0'}) }
8
- let(:hostname) { 'hostname.local' }
9
- let(:github_site) { 'https://github.com' }
10
- let(:github_api_endpoint) { 'https://api.github.com' }
11
- let(:enterprise_site) { 'https://github.gittyup.com' }
12
- let(:enterprise_api) { 'https://github.gittyup.com/api/v3' }
13
- let(:github) { stub_github_with }
14
- let!(:github_api) { github.connection }
15
- let(:existing_pull_request) { Fixture.new('pull_requests/external_pull_request.json').to_json_hashie }
16
- let(:existing_pull_requests) { Fixture.new('pull_requests/pull_requests.json').to_json_hashie }
17
- let(:existing_pull_commits) { Fixture.new('pull_requests/commits.json').to_json_hashie }
18
- let(:comment_author) { 'octocat' }
19
- let(:feature_branch_name) { existing_pull_request.head.label[/[^:]+$/] }
20
- let(:base_branch_name) { existing_pull_request.base.label[/[^:]+$/] }
21
- let(:existing_pull_comments) {
22
- Fixture.new('pull_requests/comments.json.erb',
23
- repo_owner: user,
24
- repo_name: repo,
25
- comments: [{author: comment_author}],
26
- pull_request_number: existing_pull_request.number).to_json_hashie }
27
- let(:existing_issue_comments) {
28
- Fixture.new('issues/comments.json.erb',
29
- repo_owner: user,
30
- repo_name: repo,
31
- comments: [{author: comment_author}],
32
- pull_request_number: existing_pull_request.number).to_json_hashie }
33
-
34
- subject { GitReflow::GitServer::GitHub::PullRequest.new(existing_pull_request) }
35
-
36
-
37
- before do
38
- stub_command_line_inputs({
39
- "Please enter your GitHub username: " => user,
40
- "Please enter your GitHub password (we do NOT store this): " => password,
41
- "Please enter your Enterprise site URL (e.g. https://github.company.com):" => enterprise_site,
42
- "Please enter your Enterprise API endpoint (e.g. https://github.company.com/api/v3):" => enterprise_api
43
- })
44
-
45
- allow(github.class).to receive(:remote_user).and_return(user)
46
- allow(github.class).to receive(:remote_repo_name).and_return(repo)
47
- allow(GitReflow::GitServer::PullRequest).to receive(:approval_regex).and_return(/(?i-mx:lgtm|looks good to me|:\+1:|:thumbsup:|:shipit:)/)
48
- end
49
-
50
- describe '#initialize(options)' do
51
- specify { expect(subject.number).to eql(existing_pull_request.number) }
52
- specify { expect(subject.description).to eql(existing_pull_request.body) }
53
- specify { expect(subject.html_url).to eql(existing_pull_request.html_url) }
54
- specify { expect(subject.feature_branch_name).to eql(feature_branch_name) }
55
- specify { expect(subject.base_branch_name).to eql(base_branch_name) }
56
- specify { expect(subject.build_status).to eql('success') }
57
- specify { expect(subject.source_object).to eql(existing_pull_request) }
58
- end
59
-
60
- describe '#commit_author' do
61
- before do
62
- stub_request(:get, %r{#{GitReflow.git_server.class.api_endpoint}/repos/#{user}/#{repo}/pulls/#{existing_pull_request.number}/commits}).
63
- with(query: {"access_token" => "a1b2c3d4e5f6g7h8i9j0"}).
64
- to_return(:body => Fixture.new("pull_requests/commits.json").to_s, status: 201, headers: {content_type: "application/json; charset=utf-8"})
65
- end
66
- specify { expect(subject.commit_author).to eql("#{existing_pull_commits.first.commit.author.name} <#{existing_pull_commits.first.commit.author.email}>") }
67
- end
68
-
69
- describe '#comments' do
70
- context "Testing Appending of Comments" do
71
- before do
72
- FakeGitHub.new(
73
- repo_owner: user,
74
- repo_name: repo,
75
- pull_request: {
76
- number: existing_pull_request.number,
77
- comments: [{author: comment_author}]
78
- },
79
- issue: {
80
- number: existing_pull_request.number,
81
- comments: [{author: comment_author}]
82
- })
83
- end
84
- specify { expect(subject.comments).to eql(existing_pull_comments.to_a + existing_issue_comments.to_a) }
85
- end
86
-
87
- context "Testing Nil Comments" do
88
- before do
89
- stub_request(:get, "https://api.github.com/repos/reenhanced/repo/pulls/2/comments?access_token=a1b2c3d4e5f6g7h8i9j0").
90
- with(:headers => {'Accept'=>'application/vnd.github.v3+json,application/vnd.github.beta+json;q=0.5,application/json;q=0.1', 'Accept-Charset'=>'utf-8', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'Authorization'=>'token a1b2c3d4e5f6g7h8i9j0', 'User-Agent'=>'Github API Ruby Gem 0.14.0'}).
91
- to_return(:status => 200, :body => "", :headers => {})
92
-
93
- FakeGitHub.new(
94
- repo_owner: user,
95
- repo_name: repo,
96
- pull_request: {
97
- number: existing_pull_request.number,
98
- comments: nil
99
- },
100
- issue: {
101
- number: existing_pull_request.number,
102
- comments: nil
103
- })
104
- end
105
- specify { expect(subject.comments).to eql([]) }
106
- end
107
- end
108
-
109
- describe '#reviewers' do
110
- before do
111
- allow(existing_pull_request.user).to receive(:login).and_return('ringo')
112
-
113
- FakeGitHub.new(
114
- repo_owner: user,
115
- repo_name: repo,
116
- pull_request: {
117
- number: existing_pull_request.number,
118
- owner: existing_pull_request.user.login,
119
- comments: [{author: 'tito'}, {author: 'bobby'}, {author: 'ringo'}]
120
- },
121
- issue: {
122
- number: existing_pull_request.number,
123
- comments: [{author: 'ringo'}, {author: 'randy'}]
124
- })
125
- end
126
-
127
- specify { expect(subject.reviewers).to eq(['tito', 'bobby', 'randy']) }
128
- end
129
-
130
-
131
- describe "#approved?" do
132
-
133
- context "no approvals and build success" do
134
- before do
135
- FakeGitHub.new(
136
- repo_owner: user,
137
- repo_name: repo,
138
- pull_request: {
139
- number: existing_pull_request.number,
140
- owner: existing_pull_request.head.user.login,
141
- comments: []
142
- })
143
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return("0")
144
- end
145
- specify { expect(subject.approved?).to be_truthy }
146
- end
147
-
148
- context "all commenters must approve and minimum_approvals is nil" do
149
- before do
150
- FakeGitHub.new(
151
- repo_owner: user,
152
- repo_name: repo,
153
- pull_request: {
154
- number: existing_pull_request.number,
155
- owner: existing_pull_request.head.user.login,
156
- comments: []
157
- })
158
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return(nil)
159
- allow(subject).to receive(:has_comments?).and_return(true)
160
- allow(subject).to receive(:approvals).and_return(["Simon"])
161
- allow(subject).to receive(:reviewers_pending_response).and_return([])
162
- end
163
- specify { expect(subject.approved?).to be_truthy }
164
- end
165
-
166
- context "all commenters must approve but we have no pending reviewers" do
167
- before do
168
- FakeGitHub.new(
169
- repo_owner: user,
170
- repo_name: repo,
171
- pull_request: {
172
- number: existing_pull_request.number,
173
- owner: existing_pull_request.head.user.login,
174
- comments: []
175
- })
176
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return("")
177
- allow(subject).to receive(:has_comments?).and_return(true)
178
- allow(subject).to receive(:approvals).and_return(["Simon"])
179
- allow(subject).to receive(:reviewers_pending_response).and_return([])
180
- end
181
- specify { expect(subject.approved?).to be_truthy }
182
- end
183
-
184
- context "all commenters must approve but we have 1 pending reviewer" do
185
- before do
186
- FakeGitHub.new(
187
- repo_owner: user,
188
- repo_name: repo,
189
- pull_request: {
190
- number: existing_pull_request.number,
191
- owner: existing_pull_request.head.user.login,
192
- comments: []
193
- })
194
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return("")
195
- allow(subject).to receive(:has_comments?).and_return(true)
196
- allow(subject).to receive(:approvals).and_return(["Simon"])
197
- allow(subject).to receive(:reviewers_pending_response).and_return(["Simon"])
198
- end
199
- specify { expect(subject.approved?).to be_falsy }
200
- end
201
-
202
- context "2 approvals required but we only have 1 approval" do
203
- before do
204
- FakeGitHub.new(
205
- repo_owner: user,
206
- repo_name: repo,
207
- pull_request: {
208
- number: existing_pull_request.number,
209
- owner: existing_pull_request.head.user.login,
210
- comments: []
211
- })
212
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return("2")
213
- allow(subject).to receive(:approvals).and_return(["Simon"])
214
- allow(subject).to receive(:last_comment).and_return("LGTM")
215
- end
216
- specify { expect(subject.approved?).to be_falsy }
217
- end
218
-
219
- context "2 approvals required and we have 2 approvals but last comment is not approval" do
220
- before do
221
- FakeGitHub.new(
222
- repo_owner: user,
223
- repo_name: repo,
224
- pull_request: {
225
- number: existing_pull_request.number,
226
- owner: existing_pull_request.head.user.login,
227
- comments: []
228
- })
229
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return("2")
230
- allow(subject).to receive(:approvals).and_return(["Simon", "Peter"])
231
- allow(subject).to receive(:last_comment).and_return("Boo")
232
- end
233
- specify { expect(subject.approved?).to be_falsy }
234
- end
235
-
236
- context "2 approvals required and we have 2 approvals and last comment is approval" do
237
- before do
238
- FakeGitHub.new(
239
- repo_owner: user,
240
- repo_name: repo,
241
- pull_request: {
242
- number: existing_pull_request.number,
243
- owner: existing_pull_request.head.user.login,
244
- comments: []
245
- })
246
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return("2")
247
- allow(subject).to receive(:approvals).and_return(["Simon", "Peter"])
248
- allow(subject).to receive(:last_comment).and_return("LGTM")
249
- end
250
- specify { expect(subject.approved?).to be_truthy }
251
- end
252
- end
253
-
254
- describe '#approvals' do
255
- context "no comments" do
256
- before do
257
- FakeGitHub.new(
258
- repo_owner: user,
259
- repo_name: repo,
260
- pull_request: {
261
- number: existing_pull_request.number,
262
- owner: existing_pull_request.head.user.login,
263
- comments: []
264
- })
265
- end
266
-
267
- specify { expect(subject.approvals).to eq([]) }
268
- end
269
-
270
- context "single reviewer without approval" do
271
- before do
272
- FakeGitHub.new(
273
- repo_owner: user,
274
- repo_name: repo,
275
- pull_request: {
276
- number: existing_pull_request.number,
277
- owner: existing_pull_request.head.user.login,
278
- comments: [{author: 'tito', body: 'This is some funky stuff'}]
279
- })
280
- end
281
-
282
- specify { expect(subject.approvals).to eq([]) }
283
- end
284
-
285
- context "single reviewer with approval" do
286
- before do
287
- FakeGitHub.new(
288
- repo_owner: user,
289
- repo_name: repo,
290
- pull_request: {
291
- number: existing_pull_request.number,
292
- owner: existing_pull_request.head.user.login,
293
- comments: [{author: 'tito', body: 'LGTM'}]
294
- })
295
- end
296
-
297
- specify { expect(subject.approvals).to eq(['tito']) }
298
-
299
- context "but a new commit has been introduced" do
300
- before do
301
- FakeGitHub.new(
302
- repo_owner: user,
303
- repo_name: repo,
304
- commits: [
305
- {
306
- author: user,
307
- pull_request_number: existing_pull_request.number,
308
- created_at: Chronic.parse("1 second ago")
309
- }
310
- ],
311
- pull_request: {
312
- number: existing_pull_request.number,
313
- owner: existing_pull_request.head.user.login,
314
- comments: [{author: 'tito', body: 'LGTM', created_at: Chronic.parse('1 minute ago')}]
315
- })
316
- end
317
-
318
- specify { expect(subject.approvals).to eq([]) }
319
- end
320
- end
321
-
322
- context "multiple reviewers with only one approval" do
323
- before do
324
- FakeGitHub.new(
325
- repo_owner: user,
326
- repo_name: repo,
327
- pull_request: {
328
- number: existing_pull_request.number,
329
- owner: existing_pull_request.head.user.login,
330
- comments: [{author: 'tito', body: 'LGTM'}, {author: 'ringo', body: 'Needs more cowbell.'}]
331
- })
332
- end
333
-
334
- specify { expect(subject.approvals).to eq(['tito']) }
335
- end
336
-
337
- context "multiple reviewers with all approvals" do
338
- before do
339
- FakeGitHub.new(
340
- repo_owner: user,
341
- repo_name: repo,
342
- pull_request: {
343
- number: existing_pull_request.number,
344
- owner: existing_pull_request.head.user.login,
345
- comments: [{author: 'tito', body: 'lgtm'}, {author: 'ringo', body: ':+1:'}]
346
- })
347
-
348
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:approval_regex).and_return(/(?i-mx:lgtm|looks good to me|:\+1:|:thumbsup:|:shipit:)/)
349
- end
350
-
351
- context "2 approvals" do
352
- specify { expect(subject.approvals).to eq(['tito', 'ringo']) }
353
- end
354
-
355
- context "but a new commit has been introduced" do
356
- before do
357
- FakeGitHub.new(
358
- repo_owner: user,
359
- repo_name: repo,
360
- commits: [
361
- {
362
- author: user,
363
- pull_request_number: existing_pull_request.number,
364
- created_at: Chronic.parse("1 second ago")
365
- }
366
- ],
367
- pull_request: {
368
- number: existing_pull_request.number,
369
- owner: existing_pull_request.head.user.login,
370
- comments: [{author: 'tito', body: 'lgtm', created_at: Chronic.parse('1 minute ago')}, {author: 'ringo', body: ':+1:', created_at: Chronic.parse('1 minute ago')}]
371
- })
372
- end
373
-
374
- specify { expect(subject.approvals).to eq([]) }
375
- end
376
- end
377
-
378
- end
379
-
380
- describe '#last_comment' do
381
- before do
382
- FakeGitHub.new(
383
- repo_owner: user,
384
- repo_name: repo,
385
- pull_request: {
386
- number: existing_pull_request.number,
387
- owner: existing_pull_request.head.user.login,
388
- comments: [{author: 'tito', body: 'lgtm'}, {author: 'ringo', body: 'Cha cha cha'}]
389
- })
390
- end
391
-
392
- specify { expect(subject.last_comment).to eq('"Cha cha cha"') }
393
- end
394
-
395
- describe '#build' do
396
- let(:build) { Fixture.new('repositories/statuses.json').to_json_hashie.first }
397
-
398
- context "with an existing build" do
399
- specify { expect(subject.build.state).to eq(build.state) }
400
- specify { expect(subject.build.description).to eq(build.description) }
401
- specify { expect(subject.build.url).to eq(build.target_url) }
402
- end
403
-
404
- context "no build found" do
405
- before { allow(GitReflow.git_server).to receive(:get_build_status).and_return(nil) }
406
- specify { expect(subject.build.state).to eq(nil) }
407
- specify { expect(subject.build.description).to eq(nil) }
408
- specify { expect(subject.build.url).to eq(nil) }
409
- end
410
- end
411
-
412
-
413
- describe '.create(options)' do
414
- let(:title) { 'Bone Saw is ready!' }
415
- let(:body) { 'Snap into a Slim Jim!' }
416
- let(:base_branch_name) { 'base-branch' }
417
- let(:pull_request_response) do
418
- Fixture.new('pull_requests/pull_request.json.erb',
419
- number: 2,
420
- title: title,
421
- body: body,
422
- base_branch: base_branch_name,
423
- repo_owner: user,
424
- repo_name: repo)
425
- end
426
-
427
- subject { GitReflow::GitServer::GitHub::PullRequest.create(title: title, body: body, base: base_branch_name) }
428
-
429
- before do
430
- stub_request(:post, %r{/repos/#{user}/#{repo}/pulls}).
431
- to_return(body: pull_request_response.to_s, status: 201, headers: {content_type: "application/json; charset=utf-8"})
432
- end
433
-
434
- specify { expect(subject.class.to_s).to eql('GitReflow::GitServer::GitHub::PullRequest') }
435
- specify { expect(subject.title).to eql(title) }
436
- specify { expect(subject.description).to eql(body) }
437
- specify { expect(subject.base_branch_name).to eql(base_branch_name) }
438
- end
439
-
440
- describe '.find_open(options)' do
441
- let(:feature_branch) { 'new-feature' }
442
- let(:base_branch) { 'base-branch' }
443
-
444
- subject { GitReflow::GitServer::GitHub::PullRequest.find_open(from: feature_branch, to: base_branch) }
445
-
446
- before do
447
- allow(GitReflow.git_server.class).to receive(:current_branch).and_return(feature_branch)
448
- FakeGitHub.new(
449
- repo_owner: user,
450
- repo_name: repo,
451
- pull_request: {
452
- number: existing_pull_request.number,
453
- owner: existing_pull_request.head.user.login,
454
- base_branch: base_branch,
455
- feature_branch: feature_branch
456
- })
457
- end
458
-
459
- specify { expect(subject.class.to_s).to eql('GitReflow::GitServer::GitHub::PullRequest') }
460
- specify { expect(subject.number).to eql(existing_pull_request.number) }
461
-
462
- context "without any options" do
463
- let(:base_branch) { 'master' }
464
- subject { GitReflow::GitServer::GitHub::PullRequest.find_open() }
465
- it "defaults to the current branch as the feature branch and 'master' as the base branch" do
466
- expect(subject.class.to_s).to eql('GitReflow::GitServer::GitHub::PullRequest')
467
- expect(subject.number).to eql(existing_pull_request.number)
468
- end
469
- end
470
- end
471
-
472
- end