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,583 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe GitReflow::GitServer::PullRequest do
4
- let(:pull_request) { Fixture.new('pull_requests/external_pull_request.json').to_json_hashie }
5
- let(:github) { stub_github_with({ user: 'reenhanced', repo: 'repo', pull: pull_request }) }
6
- let!(:github_api) { github.connection }
7
- let(:git_server) { GitReflow::GitServer::GitHub.new {} }
8
- let(:user) { 'reenhanced' }
9
- let(:password) { 'shazam' }
10
- let(:enterprise_site) { 'https://github.reenhanced.com' }
11
- let(:enterprise_api) { 'https://github.reenhanced.com' }
12
-
13
- describe "#good_to_merge?(options)" do
14
- subject { GitReflow::GitServer::GitHub::PullRequest.new(pull_request) }
15
-
16
- before do
17
- FakeGitHub.new(
18
- repo_owner: 'reenhanced',
19
- repo_name: 'repo',
20
- pull_request: {
21
- number: pull_request.number,
22
- owner: pull_request.head.user.login,
23
- comments: [{author: 'tito', body: 'lgtm'}, {author: 'ringo', body: ':+1:'}]
24
- })
25
- # setup initial valid state
26
- allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:build).and_return(Struct.new(:state, :description, :url).new)
27
- allow(GitReflow.git_server).to receive(:find_open_pull_request).with({from: 'new-feature', to: 'master'}).and_return(pull_request)
28
-
29
- # stubs approvals and last_comment conditions to default to true
30
- allow(pull_request).to receive(:approvals).and_return(["Simon", "John"])
31
- allow(pull_request).to receive_message_chain(:last_comment, :match).and_return(true)
32
- allow(GitReflow::GitServer::PullRequest).to receive(:minimum_approvals).and_return("2")
33
- allow(GitReflow::GitServer::PullRequest).to receive(:approval_regex).and_return(/(?i-mx:lgtm|looks good to me|:\+1:|:thumbsup:|:shipit:)/)
34
-
35
- end
36
- context "with no status" do
37
- specify { expect(subject.good_to_merge?).to eq(true) }
38
- end
39
-
40
- context "with build status" do
41
- context "of 'success'" do
42
- before { allow(subject).to receive(:build_status).and_return('success') }
43
- specify { expect(subject.good_to_merge?).to eq(true) }
44
- end
45
-
46
- context "NOT of 'success'" do
47
- before { allow(subject).to receive(:build_status).and_return('failure') }
48
- specify { expect(subject.good_to_merge?).to eq(false) }
49
- end
50
- end
51
-
52
- # Need at least 1 comment for you to merge
53
- context "with no comments" do
54
- before {
55
- allow(subject).to receive(:has_comments?).and_return(false)
56
- allow(subject).to receive(:build_status).and_return('success')
57
- allow(subject).to receive(:approvals).and_return(["Simon", "John"])
58
- }
59
- specify { expect(subject.good_to_merge?).to eq(true) }
60
- context "and no approvals" do
61
- before { allow(subject).to receive(:approvals).and_return([]) }
62
- specify { expect(subject.good_to_merge?).to eq(false) }
63
- end
64
- end
65
-
66
- context "with 1 approval" do
67
- before do
68
- allow(subject).to receive(:reviewers).and_return(['bob'])
69
- allow(subject).to receive(:approvals).and_return(['joe'])
70
- end
71
- specify { expect(subject.good_to_merge?).to eq(false) }
72
- end
73
-
74
- context "with 2 approvals" do
75
- before do
76
- allow(subject).to receive(:reviewers).and_return(['bob'])
77
- allow(subject).to receive(:approvals).and_return(['joe', 'bob'])
78
- allow(subject).to receive(:last_comment).and_return('hi')
79
- allow(subject).to receive(:build_status).and_return('success')
80
- end
81
- specify { expect(subject.good_to_merge?).to eq(false) }
82
- end
83
-
84
- context "with 2 approvals and last comment LGTM" do
85
- before do
86
- allow(subject).to receive(:reviewers).and_return(['bob'])
87
- allow(subject).to receive(:approvals).and_return(['joe', 'bob'])
88
- allow(subject).to receive(:last_comment).and_return('LGTM')
89
- end
90
- specify { expect(subject.good_to_merge?).to eq(true) }
91
- end
92
-
93
- context "with comments" do
94
- before do
95
- allow(subject).to receive(:reviewers).and_return(['bob'])
96
- allow(subject).to receive(:approvals).and_return([])
97
- end
98
- specify { expect(subject.good_to_merge?).to eq(false) }
99
- end
100
-
101
- context "force merge?" do
102
- context "with pending comments" do
103
- before { allow(subject).to receive(:approvals).and_return([]) }
104
- specify { expect(subject.good_to_merge?(force: true)).to eq(true) }
105
- end
106
-
107
- context "with build failure" do
108
- before { allow(subject).to receive(:build_status).and_return('failure') }
109
- specify { expect(subject.good_to_merge?(force: true)).to eq(true) }
110
- end
111
- end
112
- end
113
-
114
- describe "#approved?" do
115
- subject { GitReflow::GitServer::GitHub::PullRequest.new(pull_request) }
116
-
117
- context "no approvals and build success" do
118
- before do
119
- FakeGitHub.new(
120
- repo_owner: 'reenhanced',
121
- repo_name: 'repo',
122
- pull_request: {
123
- number: pull_request.number,
124
- owner: pull_request.head.user.login,
125
- comments: []
126
- })
127
- allow(GitReflow.git_server).to receive(:get_build_status).and_return(Struct.new(:state, :description, :target_url).new())
128
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return("0")
129
- end
130
- specify { expect(subject.approved?).to be_truthy }
131
- end
132
-
133
- context "all commenters must approve and minimum_approvals is nil" do
134
- before do
135
- FakeGitHub.new(
136
- repo_owner: 'reenhanced',
137
- repo_name: 'repo',
138
- pull_request: {
139
- number: pull_request.number,
140
- owner: pull_request.head.user.login,
141
- comments: []
142
- })
143
- allow(GitReflow.git_server).to receive(:get_build_status).and_return(Struct.new(:state, :description, :target_url).new())
144
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return(nil)
145
- allow(subject).to receive(:approvals).and_return(["Simon"])
146
- allow(subject).to receive(:has_comments?).and_return(true)
147
- allow(subject).to receive(:reviewers_pending_response).and_return([])
148
- end
149
- specify { expect(subject.approved?).to be_truthy }
150
- end
151
-
152
- context "all commenters must approve but we have no pending reviewers" do
153
- before do
154
- FakeGitHub.new(
155
- repo_owner: 'reenhanced',
156
- repo_name: 'repo',
157
- pull_request: {
158
- number: pull_request.number,
159
- owner: pull_request.head.user.login,
160
- comments: []
161
- })
162
- allow(GitReflow.git_server).to receive(:get_build_status).and_return(Struct.new(:state, :description, :target_url).new())
163
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return("")
164
- allow(subject).to receive(:has_comments?).and_return(true)
165
- allow(subject).to receive(:approvals).and_return(["Simon"])
166
- allow(subject).to receive(:reviewers_pending_response).and_return([])
167
- end
168
- specify { expect(subject.approved?).to be_truthy }
169
- end
170
-
171
- context "all commenters must approve but we have 1 pending reviewer" do
172
- before do
173
- FakeGitHub.new(
174
- repo_owner: 'reenhanced',
175
- repo_name: 'repo',
176
- pull_request: {
177
- number: pull_request.number,
178
- owner: pull_request.head.user.login,
179
- comments: []
180
- })
181
- allow(GitReflow.git_server).to receive(:get_build_status).and_return(Struct.new(:state, :description, :target_url).new())
182
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return("")
183
- allow(subject).to receive(:has_comments?).and_return(true)
184
- allow(subject).to receive(:approvals).and_return(["Simon"])
185
- allow(subject).to receive(:reviewers_pending_response).and_return(["Simon"])
186
- end
187
- specify { expect(subject.approved?).to be_falsy }
188
- end
189
-
190
- context "2 approvals required but we only have 1 approval" do
191
- before do
192
- FakeGitHub.new(
193
- repo_owner: 'reenhanced',
194
- repo_name: 'repo',
195
- pull_request: {
196
- number: pull_request.number,
197
- owner: pull_request.head.user.login,
198
- comments: []
199
- })
200
- allow(GitReflow.git_server).to receive(:get_build_status).and_return(Struct.new(:state, :description, :target_url).new())
201
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return("2")
202
- allow(subject).to receive(:approvals).and_return(["Simon"])
203
- allow(subject).to receive(:last_comment).and_return("LGTM")
204
- end
205
- specify { expect(subject.approved?).to be_falsy }
206
- end
207
-
208
- context "2 approvals required and we have 2 approvals but last comment is not approval" do
209
- before do
210
- FakeGitHub.new(
211
- repo_owner: 'reenhanced',
212
- repo_name: 'repo',
213
- pull_request: {
214
- number: pull_request.number,
215
- owner: pull_request.head.user.login,
216
- comments: []
217
- })
218
- allow(GitReflow.git_server).to receive(:get_build_status).and_return(Struct.new(:state, :description, :target_url).new())
219
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return("2")
220
- allow(subject).to receive(:approvals).and_return(["Simon", "Peter"])
221
- allow(subject).to receive(:last_comment).and_return("Boo")
222
- end
223
- specify { expect(subject.approved?).to be_falsy }
224
- end
225
-
226
- context "2 approvals required and we have 2 approvals and last comment is approval" do
227
- before do
228
- FakeGitHub.new(
229
- repo_owner: 'reenhanced',
230
- repo_name: 'repo',
231
- pull_request: {
232
- number: pull_request.number,
233
- owner: pull_request.head.user.login,
234
- comments: []
235
- })
236
- allow(GitReflow.git_server).to receive(:get_build_status).and_return(Struct.new(:state, :description, :target_url).new())
237
- allow(GitReflow::GitServer::GitHub::PullRequest).to receive(:minimum_approvals).and_return("2")
238
- allow(subject).to receive(:approvals).and_return(["Simon", "Peter"])
239
- allow(subject).to receive(:last_comment).and_return("LGTM")
240
- end
241
- specify { expect(subject.approved?).to be_truthy }
242
- end
243
- end
244
-
245
- describe "#rejection_message" do
246
- subject { GitReflow::GitServer::GitHub::PullRequest.new(pull_request) }
247
-
248
- before do
249
- allow(GitReflow.git_server).to receive(:get_build_status).and_return(Struct.new(:state, :description, :target_url).new())
250
- end
251
-
252
- context "Testing a Failure Build Status" do
253
- before do
254
- allow(subject).to receive(:build_status).and_return('failure')
255
- end
256
-
257
- specify { expect(subject.rejection_message).to eq(": ") }
258
- end
259
-
260
- context "Testing Minimum Approvals Failure" do
261
- before do
262
- allow(subject).to receive(:build_status).and_return('success')
263
- allow(subject).to receive(:approval_minimums_reached?).and_return(false)
264
- allow(GitReflow::GitServer::PullRequest).to receive(:minimum_approvals).and_return("2")
265
- end
266
- specify { expect(subject.rejection_message).to eq("You need approval from at least 2 users!") }
267
- end
268
-
269
- context "Testing Minimum Approvals Reached" do
270
- before do
271
- allow(subject).to receive(:build_status).and_return(nil)
272
- allow(subject).to receive(:all_comments_addressed?).and_return(false)
273
- allow(subject).to receive(:last_comment).and_return("Hello")
274
- end
275
- specify { expect(subject.rejection_message).to eq("The last comment is holding up approval:\nHello") }
276
- end
277
-
278
- context "Testing All Comments Addressed" do
279
- before do
280
- allow(subject).to receive(:build_status).and_return('success')
281
- allow(subject).to receive(:all_comments_addressed?).and_return(false)
282
- allow(subject).to receive(:last_comment).and_return("Hello")
283
- end
284
- specify { expect(subject.rejection_message).to eq("The last comment is holding up approval:\nHello") }
285
- end
286
-
287
- context "Testing All Comments Addressed" do
288
- before do
289
- allow(subject).to receive(:reviewers_pending_response).and_return(['Simon'])
290
- allow(subject).to receive(:build?).and_return('success')
291
- allow(subject).to receive(:all_comments_addressed?).and_return(true)
292
- allow(subject).to receive(:approval_minimums_reached?).and_return(true)
293
- end
294
- specify { expect(subject.rejection_message).to eq( "You still need a LGTM from: Simon") }
295
- end
296
-
297
- context "Testing Last Case" do
298
- before do
299
- allow(subject).to receive(:reviewers_pending_response).and_return([])
300
- allow(subject).to receive(:build?).and_return('success')
301
- allow(subject).to receive(:all_comments_addressed?).and_return(true)
302
- allow(subject).to receive(:approval_minimums_reached?).and_return(true)
303
- end
304
- specify { expect(subject.rejection_message).to eq("Your code has not been reviewed yet.") }
305
- end
306
- end
307
-
308
- describe "#all_comments_addressed" do
309
- subject { GitReflow::GitServer::GitHub::PullRequest.new(pull_request) }
310
-
311
- before do
312
- allow(GitReflow.git_server).to receive(:get_build_status).and_return(Struct.new(:state, :description, :target_url).new())
313
- end
314
-
315
- context "Testing a Failure Case" do
316
- before do
317
- allow(subject).to receive(:minimum_approvals).and_return('2')
318
- allow(subject).to receive(:approvals).and_return(['Simon'])
319
- end
320
- specify { expect(subject.approval_minimums_reached?).to eq(true) }
321
- end
322
-
323
- context "Testing a Success Case" do
324
- before do
325
- allow(subject).to receive(:minimum_approvals).and_return('2')
326
- allow(subject).to receive(:approvals).and_return(['Simon', 'John'])
327
- end
328
- specify { expect(subject.approval_minimums_reached?).to eq(true) }
329
- end
330
-
331
- context "Testing Case with no minimum_approval" do
332
- before do
333
- allow(subject).to receive(:minimum_approvals).and_return('')
334
- allow(subject).to receive(:approvals).and_return([])
335
- end
336
- specify { expect(subject.approval_minimums_reached?).to eq(true) }
337
- end
338
- end
339
-
340
- describe "#display_pull_request_summary" do
341
- subject { GitReflow::GitServer::GitHub::PullRequest.new(pull_request).display_pull_request_summary }
342
-
343
- context "Testing Pull Request Properties" do
344
- before do
345
- FakeGitHub.new(
346
- repo_owner: 'reenhanced',
347
- repo_name: 'repo',
348
- pull_request: {
349
- number: pull_request.number,
350
- owner: pull_request.head.user.login,
351
- comments: [{author: 'tito', body: 'lgtm'}, {author: 'ringo', body: ':+1:'}]
352
- })
353
- allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:build).and_return(Struct.new(:state, :description, :url).new)
354
- allow(GitReflow.git_server).to receive(:find_open_pull_request).with({from: 'new-external-feature', to: 'master'}).and_return(pull_request)
355
- end
356
-
357
- it "displays relavent information about the pull request" do
358
- expect{ subject }.to have_output("branches: new-external-feature -> master")
359
- expect{ subject }.to have_output("number: #{pull_request.number}")
360
- expect{ subject }.to have_output("url: #{pull_request.html_url}")
361
- expect{ subject }.to have_output("reviewed by: #{"tito".colorize(:green)}, #{"ringo".colorize(:green)}")
362
- expect{ subject }.to have_output("Last comment: \":+1:\"")
363
- end
364
- end
365
-
366
- context "Testing Different LGTM Regex Expressions " do
367
- before do
368
- FakeGitHub.new(
369
- repo_owner: 'reenhanced',
370
- repo_name: 'repo',
371
- pull_request: {
372
- number: pull_request.number,
373
- owner: pull_request.head.user.login,
374
- comments: [
375
- {author: 'tito', body: 'lgtm'},
376
- {author: 'ringo', body: ':+1:'},
377
- {author: 'Simon', body: ':shipit:'},
378
- {author: 'Peter', body: 'looks good to me'},
379
- {author: 'Johnny', body: 'LgTm'},
380
- {author: 'Jacob', body: 'LOOKS GOOD TO ME'}
381
- ]
382
- })
383
- allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:build).and_return(Struct.new(:state, :description, :url).new)
384
- allow(GitReflow.git_server).to receive(:find_open_pull_request).with({from: 'new-external-feature', to: 'master'}).and_return(pull_request)
385
- end
386
-
387
- it "displays relavent information about the pull request" do
388
- expect{ subject }.to have_output("branches: new-external-feature -> master")
389
- expect{ subject }.to have_output("number: #{pull_request.number}")
390
- expect{ subject }.to have_output("url: #{pull_request.html_url}")
391
- expect{ subject }.to have_output("reviewed by: #{"tito".colorize(:green)}, #{"ringo".colorize(:green)}, #{"Simon".colorize(:green)}, #{"Peter".colorize(:green)}, #{"Johnny".colorize(:green)}, #{"Jacob".colorize(:green)}")
392
- expect{ subject }.to have_output("Last comment: \"LOOKS GOOD TO ME\"")
393
- end
394
- end
395
- end
396
-
397
- context ".merge!" do
398
- subject { GitReflow::GitServer::GitHub::PullRequest.new(pull_request) }
399
-
400
- let(:inputs) {
401
- {
402
- :base => "base_branch",
403
- :title => "title",
404
- :message => "message"
405
- }
406
- }
407
-
408
- let(:lgtm_comment_authors) {
409
- ["simonzhu24", "reenhanced"]
410
- }
411
-
412
- let(:merge_response) { { :message => "Failure_Message" } }
413
-
414
- context "finds pull request but merge response fails" do
415
- before do
416
- allow(GitReflow).to receive(:git_server).and_return(git_server)
417
- allow(git_server).to receive(:connection).and_return(github)
418
- allow(git_server).to receive(:get_build_status).and_return(Struct.new(:state, :description, :target_url).new())
419
- allow(GitReflow::GitServer::GitHub).to receive_message_chain(:connection, :pull_requests, :merge).and_return(merge_response)
420
- allow(merge_response).to receive(:success?).and_return(false)
421
- allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:approvals).and_return(lgtm_comment_authors)
422
- allow(subject).to receive(:deliver?).and_return(true)
423
- allow(merge_response).to receive(:to_s).and_return("Merge failed")
424
- end
425
-
426
- it "throws an error" do
427
- expect { subject.merge! inputs }.to have_said "Merge failed", :deliver_halted
428
- expect { subject.merge! inputs }.to have_said "There were problems commiting your feature... please check the errors above and try again.", :error
429
- end
430
- end
431
- end
432
-
433
- context ".commit_message_for_merge" do
434
- subject { GitReflow::GitServer::GitHub::PullRequest.new(pull_request) }
435
-
436
- let(:lgtm_comment_authors) {
437
- ["simonzhu24", "reenhanced"]
438
- }
439
-
440
- let(:output) { lgtm_comment_authors.join(', @') }
441
-
442
- context "checks commit message generated is correct" do
443
- before do
444
- allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:build).and_return(Struct.new(:state, :description, :url).new)
445
- allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:description).and_return("Description")
446
- allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:number).and_return(1)
447
- allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:approvals).and_return(lgtm_comment_authors)
448
- end
449
-
450
- it "throws an exception without message" do
451
- expect(subject.commit_message_for_merge).to eq("Description\nMerges #1\n\nLGTM given by: @simonzhu24, @reenhanced\n\n")
452
- end
453
- end
454
- end
455
-
456
- context :cleanup_feature_branch? do
457
- subject { GitReflow::GitServer::GitHub::PullRequest.new(pull_request).cleanup_feature_branch? }
458
-
459
- before do
460
- allow(GitReflow::Config).to receive(:get).with("reflow.always-cleanup").and_return("false")
461
- allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:build).and_return(Struct.new(:state, :description, :url).new)
462
- FakeGitHub.new(
463
- repo_owner: 'reenhanced',
464
- repo_name: 'repo',
465
- pull_request: {
466
- number: pull_request.number,
467
- owner: pull_request.head.user.login,
468
- comments: [{author: 'tito', body: 'lgtm'}, {author: 'ringo', body: ':+1:'}]
469
- })
470
- end
471
-
472
- context "doesn't cleanup feature branch" do
473
- before do
474
- allow_any_instance_of(HighLine).to receive(:ask) do |terminal, question|
475
- values = {
476
- "Please enter your GitHub username: " => user,
477
- "Please enter your GitHub password (we do NOT store this): " => password,
478
- "Please enter your Enterprise site URL (e.g. https://github.company.com):" => enterprise_site,
479
- "Please enter your Enterprise API endpoint (e.g. https://github.company.com/api/v3):" => enterprise_api,
480
- "Would you like to push this branch to your remote repo and cleanup your feature branch? " => 'no',
481
- "Would you like to open it in your browser?" => 'n',
482
- "This is the current status of your Pull Request. Are you sure you want to deliver? " => 'n',
483
- "Please enter your delivery commit title: (leaving blank will use default)" => 'title',
484
- "Please enter your delivery commit message: (leaving blank will use default)" => 'message'
485
- }
486
- return_value = values[question] || values[terminal]
487
- question = ""
488
- return_value
489
- end
490
- end
491
-
492
- it "doesn't cleans up feature branch" do
493
- expect(subject).to be_falsy
494
- end
495
- end
496
-
497
- context "does cleanup feature branch" do
498
- before do
499
- stub_command_line_inputs({
500
- "Please enter your GitHub username: " => user,
501
- "Please enter your GitHub password (we do NOT store this): " => password,
502
- "Please enter your Enterprise site URL (e.g. https://github.company.com):" => enterprise_site,
503
- "Please enter your Enterprise API endpoint (e.g. https://github.company.com/api/v3):" => enterprise_api,
504
- "Would you like to push this branch to your remote repo and cleanup your feature branch? " => 'yes',
505
- "This is the current status of your Pull Request. Are you sure you want to deliver? " => 'n',
506
- "Please enter your delivery commit title: (leaving blank will use default)" => 'title',
507
- "Please enter your delivery commit message: (leaving blank will use default)" => 'message'
508
- })
509
- end
510
-
511
- it "cleans up feature branch" do
512
- expect(subject).to be_truthy
513
- end
514
- end
515
- end
516
-
517
- context :deliver? do
518
- subject { GitReflow::GitServer::GitHub::PullRequest.new(pull_request).deliver? }
519
-
520
- before do
521
- allow(GitReflow::Config).to receive(:get).with("reflow.always-deliver").and_return("false")
522
- allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:build).and_return(Struct.new(:state, :description, :url).new)
523
- FakeGitHub.new(
524
- repo_owner: 'reenhanced',
525
- repo_name: 'repo',
526
- pull_request: {
527
- number: pull_request.number,
528
- owner: pull_request.head.user.login,
529
- comments: [{author: 'tito', body: 'lgtm'}, {author: 'ringo', body: ':+1:'}]
530
- })
531
- end
532
-
533
- context "doesn't deliver feature branch" do
534
- before do
535
- allow_any_instance_of(HighLine).to receive(:ask) do |terminal, question|
536
- values = {
537
- "Please enter your GitHub username: " => user,
538
- "Please enter your GitHub password (we do NOT store this): " => password,
539
- "Please enter your Enterprise site URL (e.g. https://github.company.com):" => enterprise_site,
540
- "Please enter your Enterprise API endpoint (e.g. https://github.company.com/api/v3):" => enterprise_api,
541
- "Would you like to push this branch to your remote repo and cleanup your feature branch? " => 'no',
542
- "Would you like to open it in your browser?" => 'n',
543
- "This is the current status of your Pull Request. Are you sure you want to deliver? " => 'n',
544
- "Please enter your delivery commit title: (leaving blank will use default)" => 'title',
545
- "Please enter your delivery commit message: (leaving blank will use default)" => 'message'
546
- }
547
- return_value = values[question] || values[terminal]
548
- question = ""
549
- return_value
550
- end
551
- end
552
-
553
- it "doesn't deliver feature branch" do
554
- expect(subject).to be_falsy
555
- end
556
- end
557
-
558
- context "does deliver feature branch" do
559
- before do
560
- allow_any_instance_of(HighLine).to receive(:ask) do |terminal, question|
561
- values = {
562
- "Please enter your GitHub username: " => user,
563
- "Please enter your GitHub password (we do NOT store this): " => password,
564
- "Please enter your Enterprise site URL (e.g. https://github.company.com):" => enterprise_site,
565
- "Please enter your Enterprise API endpoint (e.g. https://github.company.com/api/v3):" => enterprise_api,
566
- "Would you like to push this branch to your remote repo and cleanup your feature branch? " => 'no',
567
- "Would you like to open it in your browser?" => 'n',
568
- "This is the current status of your Pull Request. Are you sure you want to deliver? " => 'y',
569
- "Please enter your delivery commit title: (leaving blank will use default)" => 'title',
570
- "Please enter your delivery commit message: (leaving blank will use default)" => 'message'
571
- }
572
- return_value = values[question] || values[terminal]
573
- question = ""
574
- return_value
575
- end
576
- end
577
-
578
- it "does deliver feature branch" do
579
- expect(subject).to be_truthy
580
- end
581
- end
582
- end
583
- end
data/spec/spec_helper.rb DELETED
@@ -1,38 +0,0 @@
1
- require 'rubygems'
2
- require 'rspec'
3
- require 'multi_json'
4
- require 'webmock/rspec'
5
- require 'pry'
6
-
7
- $LOAD_PATH << 'lib'
8
- require 'git_reflow'
9
-
10
- require 'git_reflow/rspec'
11
-
12
- Dir[File.expand_path('../support/**/*.rb', __FILE__)].each {|f| require f}
13
-
14
- RSpec.configure do |config|
15
- config.include WebMock::API
16
- config.include GitReflow::RSpec::CommandLineHelpers
17
- config.include GithubHelpers
18
- config.include GitReflow::RSpec::StubHelpers
19
-
20
- config.expect_with :rspec do |c|
21
- c.syntax = [:should, :expect]
22
- end
23
-
24
- config.mock_with :rspec do |c|
25
- c.syntax = [:should, :expect]
26
- end
27
-
28
- config.before(:each) do
29
- WebMock.reset!
30
- stub_command_line
31
- allow_message_expectations_on_nil
32
- end
33
-
34
- config.after(:each) do
35
- WebMock.reset!
36
- reset_stubbed_command_line
37
- end
38
- end