git_reflow 0.7.5 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Appraisals +2 -2
  4. data/CHANGELOG.md +75 -0
  5. data/Gemfile.lock +34 -35
  6. data/README.rdoc +187 -60
  7. data/circle.yml +9 -9
  8. data/git_reflow.gemspec +8 -8
  9. data/lib/git_reflow/commands/deliver.rb +1 -9
  10. data/lib/git_reflow/commands/refresh.rb +23 -0
  11. data/lib/git_reflow/commands/review.rb +7 -7
  12. data/lib/git_reflow/commands/setup.rb +7 -3
  13. data/lib/git_reflow/commands/start.rb +13 -5
  14. data/lib/git_reflow/git_helpers.rb +22 -23
  15. data/lib/git_reflow/git_server/bit_bucket/pull_request.rb +4 -4
  16. data/lib/git_reflow/git_server/bit_bucket.rb +7 -7
  17. data/lib/git_reflow/git_server/git_hub/pull_request.rb +75 -2
  18. data/lib/git_reflow/git_server/git_hub.rb +17 -8
  19. data/lib/git_reflow/git_server/pull_request.rb +73 -5
  20. data/lib/git_reflow/git_server.rb +3 -3
  21. data/lib/git_reflow/merge_error.rb +9 -0
  22. data/lib/git_reflow/sandbox.rb +4 -16
  23. data/lib/git_reflow/version.rb +1 -1
  24. data/lib/git_reflow.rb +32 -75
  25. data/spec/git_reflow_spec.rb +157 -141
  26. data/spec/lgtm_git_reflow_spec.rb +165 -139
  27. data/spec/lib/git_reflow/git_helpers_spec.rb +19 -63
  28. data/spec/lib/git_reflow/git_server_spec.rb +24 -24
  29. data/spec/lib/git_server/bit_bucket_spec.rb +12 -12
  30. data/spec/lib/git_server/git_hub/pull_request_spec.rb +7 -5
  31. data/spec/lib/git_server/git_hub_spec.rb +34 -34
  32. data/spec/lib/git_server/pull_request_spec.rb +207 -16
  33. data/spec/support/command_line_helpers.rb +14 -9
  34. data/spec/support/github_helpers.rb +21 -21
  35. data/spec/support/rspec_stub_helpers.rb +2 -2
  36. metadata +18 -16
@@ -5,6 +5,10 @@ describe GitReflow::GitServer::PullRequest do
5
5
  let(:github) { stub_github_with({ user: 'reenhanced', repo: 'repo', pull: pull_request }) }
6
6
  let!(:github_api) { github.connection }
7
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' }
8
12
 
9
13
  describe "#good_to_merge?(options)" do
10
14
  subject { GitReflow::GitServer::GitHub::PullRequest.new(pull_request) }
@@ -20,11 +24,11 @@ describe GitReflow::GitServer::PullRequest do
20
24
  })
21
25
  # setup initial valid state
22
26
  allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:build).and_return(Struct.new(:state, :description, :url).new)
23
- GitReflow.git_server.stub(:find_open_pull_request).with({from: 'new-feature', to: 'master'}).and_return(pull_request)
27
+ allow(GitReflow.git_server).to receive(:find_open_pull_request).with({from: 'new-feature', to: 'master'}).and_return(pull_request)
24
28
 
25
29
  # stubs approvals and last_comment conditions to default to true
26
- pull_request.stub(:approvals).and_return(["Simon", "John"])
27
- pull_request.stub_chain(:last_comment, :match).and_return(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)
28
32
  allow(GitReflow::GitServer::PullRequest).to receive(:minimum_approvals).and_return("2")
29
33
  allow(GitReflow::GitServer::PullRequest).to receive(:approval_regex).and_return(/(?i-mx:lgtm|looks good to me|:\+1:|:thumbsup:|:shipit:)/)
30
34
 
@@ -250,7 +254,7 @@ describe GitReflow::GitServer::PullRequest do
250
254
  allow(subject).to receive(:build_status).and_return('failure')
251
255
  end
252
256
 
253
- specify { subject.rejection_message.should eq(": ") }
257
+ specify { expect(subject.rejection_message).to eq(": ") }
254
258
  end
255
259
 
256
260
  context "Testing Minimum Approvals Failure" do
@@ -259,7 +263,7 @@ describe GitReflow::GitServer::PullRequest do
259
263
  allow(subject).to receive(:approval_minimums_reached?).and_return(false)
260
264
  allow(GitReflow::GitServer::PullRequest).to receive(:minimum_approvals).and_return("2")
261
265
  end
262
- specify { subject.rejection_message.should eq("You need approval from at least 2 users!") }
266
+ specify { expect(subject.rejection_message).to eq("You need approval from at least 2 users!") }
263
267
  end
264
268
 
265
269
  context "Testing Minimum Approvals Reached" do
@@ -268,7 +272,7 @@ describe GitReflow::GitServer::PullRequest do
268
272
  allow(subject).to receive(:all_comments_addressed?).and_return(false)
269
273
  allow(subject).to receive(:last_comment).and_return("Hello")
270
274
  end
271
- specify { subject.rejection_message.should eq("The last comment is holding up approval:\nHello") }
275
+ specify { expect(subject.rejection_message).to eq("The last comment is holding up approval:\nHello") }
272
276
  end
273
277
 
274
278
  context "Testing All Comments Addressed" do
@@ -277,7 +281,7 @@ describe GitReflow::GitServer::PullRequest do
277
281
  allow(subject).to receive(:all_comments_addressed?).and_return(false)
278
282
  allow(subject).to receive(:last_comment).and_return("Hello")
279
283
  end
280
- specify { subject.rejection_message.should eq("The last comment is holding up approval:\nHello") }
284
+ specify { expect(subject.rejection_message).to eq("The last comment is holding up approval:\nHello") }
281
285
  end
282
286
 
283
287
  context "Testing All Comments Addressed" do
@@ -287,7 +291,7 @@ describe GitReflow::GitServer::PullRequest do
287
291
  allow(subject).to receive(:all_comments_addressed?).and_return(true)
288
292
  allow(subject).to receive(:approval_minimums_reached?).and_return(true)
289
293
  end
290
- specify { subject.rejection_message.should eq( "You still need a LGTM from: Simon") }
294
+ specify { expect(subject.rejection_message).to eq( "You still need a LGTM from: Simon") }
291
295
  end
292
296
 
293
297
  context "Testing Last Case" do
@@ -297,7 +301,7 @@ describe GitReflow::GitServer::PullRequest do
297
301
  allow(subject).to receive(:all_comments_addressed?).and_return(true)
298
302
  allow(subject).to receive(:approval_minimums_reached?).and_return(true)
299
303
  end
300
- specify { subject.rejection_message.should eq("Your code has not been reviewed yet.") }
304
+ specify { expect(subject.rejection_message).to eq("Your code has not been reviewed yet.") }
301
305
  end
302
306
  end
303
307
 
@@ -313,7 +317,7 @@ describe GitReflow::GitServer::PullRequest do
313
317
  allow(subject).to receive(:minimum_approvals).and_return('2')
314
318
  allow(subject).to receive(:approvals).and_return(['Simon'])
315
319
  end
316
- specify { subject.approval_minimums_reached?.should eq(true) }
320
+ specify { expect(subject.approval_minimums_reached?).to eq(true) }
317
321
  end
318
322
 
319
323
  context "Testing a Success Case" do
@@ -321,7 +325,7 @@ describe GitReflow::GitServer::PullRequest do
321
325
  allow(subject).to receive(:minimum_approvals).and_return('2')
322
326
  allow(subject).to receive(:approvals).and_return(['Simon', 'John'])
323
327
  end
324
- specify { subject.approval_minimums_reached?.should eq(true) }
328
+ specify { expect(subject.approval_minimums_reached?).to eq(true) }
325
329
  end
326
330
 
327
331
  context "Testing Case with no minimum_approval" do
@@ -329,7 +333,7 @@ describe GitReflow::GitServer::PullRequest do
329
333
  allow(subject).to receive(:minimum_approvals).and_return('')
330
334
  allow(subject).to receive(:approvals).and_return([])
331
335
  end
332
- specify { subject.approval_minimums_reached?.should eq(true) }
336
+ specify { expect(subject.approval_minimums_reached?).to eq(true) }
333
337
  end
334
338
  end
335
339
 
@@ -347,11 +351,11 @@ describe GitReflow::GitServer::PullRequest do
347
351
  comments: [{author: 'tito', body: 'lgtm'}, {author: 'ringo', body: ':+1:'}]
348
352
  })
349
353
  allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:build).and_return(Struct.new(:state, :description, :url).new)
350
- GitReflow.git_server.stub(:find_open_pull_request).with({from: 'new-external-feature', to: 'master'}).and_return(pull_request)
354
+ allow(GitReflow.git_server).to receive(:find_open_pull_request).with({from: 'new-external-feature', to: 'master'}).and_return(pull_request)
351
355
  end
352
356
 
353
357
  it "displays relavent information about the pull request" do
354
- expect{ subject }.to have_output("branches: new-external-feature -> reenhanced:master")
358
+ expect{ subject }.to have_output("branches: new-external-feature -> master")
355
359
  expect{ subject }.to have_output("number: #{pull_request.number}")
356
360
  expect{ subject }.to have_output("url: #{pull_request.html_url}")
357
361
  expect{ subject }.to have_output("reviewed by: #{"tito".colorize(:green)}, #{"ringo".colorize(:green)}")
@@ -377,11 +381,11 @@ describe GitReflow::GitServer::PullRequest do
377
381
  ]
378
382
  })
379
383
  allow_any_instance_of(GitReflow::GitServer::GitHub::PullRequest).to receive(:build).and_return(Struct.new(:state, :description, :url).new)
380
- GitReflow.git_server.stub(:find_open_pull_request).with({from: 'new-external-feature', to: 'master'}).and_return(pull_request)
384
+ allow(GitReflow.git_server).to receive(:find_open_pull_request).with({from: 'new-external-feature', to: 'master'}).and_return(pull_request)
381
385
  end
382
386
 
383
387
  it "displays relavent information about the pull request" do
384
- expect{ subject }.to have_output("branches: new-external-feature -> reenhanced:master")
388
+ expect{ subject }.to have_output("branches: new-external-feature -> master")
385
389
  expect{ subject }.to have_output("number: #{pull_request.number}")
386
390
  expect{ subject }.to have_output("url: #{pull_request.html_url}")
387
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)}")
@@ -389,4 +393,191 @@ describe GitReflow::GitServer::PullRequest do
389
393
  end
390
394
  end
391
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
392
583
  end
@@ -8,10 +8,8 @@ module CommandLineHelpers
8
8
  stub_run_for GitReflow
9
9
  stub_run_for GitReflow::Sandbox
10
10
 
11
- STDOUT.stub(:puts) do |output|
12
- $output << output
13
- output = ''
14
- end
11
+ stub_output_for(GitReflow)
12
+ stub_output_for(GitReflow::Sandbox)
15
13
 
16
14
  allow_any_instance_of(GitReflow::GitServer::PullRequest).to receive(:printf) do |format, *output|
17
15
  $output << Array(output).join(" ")
@@ -19,15 +17,22 @@ module CommandLineHelpers
19
17
  end.and_return("")
20
18
  end
21
19
 
20
+ def stub_output_for(object_to_stub, method_to_stub = :puts)
21
+ allow_any_instance_of(object_to_stub).to receive(method_to_stub) do |output|
22
+ $output << output
23
+ output = ''
24
+ end
25
+ end
26
+
22
27
  def stub_run_for(module_to_stub)
23
- module_to_stub.stub(:run) do |command, options|
28
+ allow(module_to_stub).to receive(:run) do |command, options|
24
29
  options ||= {}
25
30
  $commands_ran << Hashie::Mash.new(command: command, options: options)
26
31
  ret_value = $stubbed_commands[command] || ""
27
32
  command = "" # we need this due to a bug in rspec that will keep this assignment on subsequent runs of the stub
28
33
  ret_value
29
34
  end
30
- module_to_stub.stub(:say) do |output, type|
35
+ allow(module_to_stub).to receive(:say) do |output, type|
31
36
  $says << {message: output, type: type}
32
37
  end
33
38
  end
@@ -41,11 +46,11 @@ module CommandLineHelpers
41
46
 
42
47
  def stub_command(command, return_value)
43
48
  $stubbed_commands[command] = return_value
44
- GitReflow::Sandbox.stub(:run).with(command).and_return(return_value)
49
+ allow(GitReflow::Sandbox).to receive(:run).with(command).and_return(return_value)
45
50
  end
46
51
 
47
52
  def stub_command_line_inputs(inputs)
48
- HighLine.any_instance.stub(:ask) do |terminal, question|
53
+ allow_any_instance_of(HighLine).to receive(:ask) do |terminal, question|
49
54
  return_value = inputs[question]
50
55
  question = ""
51
56
  return_value
@@ -93,7 +98,7 @@ RSpec::Matchers.define :have_run_commands_in_order do |commands|
93
98
  next unless command_start_index
94
99
  if command_count >= 1
95
100
  current_command = commands[command_count - 1]
96
- current_command.should == command_ran.command
101
+ expect(current_command).to eq(command_ran.command)
97
102
  command_count -= 1
98
103
  end
99
104
  end
@@ -16,7 +16,7 @@ module GithubHelpers
16
16
  branch = options[:branch] || 'new-feature'
17
17
  pull = options[:pull]
18
18
 
19
- HighLine.any_instance.stub(:ask) do |terminal, question|
19
+ allow_any_instance_of(HighLine).to receive(:ask) do |terminal, question|
20
20
  values = {
21
21
  "Please enter your GitHub username: " => user,
22
22
  "Please enter your GitHub password (we do NOT store this): " => password,
@@ -37,27 +37,27 @@ module GithubHelpers
37
37
  end
38
38
 
39
39
  stub_request(:get, "#{api_endpoint}/authorizations?").to_return(:body => [oauth_token_hash].to_json, status: 200, headers: {})
40
- Github.stub(:new).and_return(github)
41
- GitReflow.stub(:push_current_branch).and_return(true)
42
- GitReflow.stub(:github).and_return(github)
43
- GitReflow.stub(:current_branch).and_return(branch)
44
- GitReflow.stub(:remote_repo_name).and_return(repo)
45
- GitReflow.stub(:remote_user).and_return(user)
46
- GitReflow.stub(:fetch_destination).and_return(true)
47
- GitReflow.stub(:update_destination).and_return(true)
40
+ allow(Github::Client).to receive(:new).and_return(github)
41
+ allow(GitReflow).to receive(:push_current_branch).and_return(true)
42
+ allow(GitReflow).to receive(:github).and_return(github)
43
+ allow(GitReflow).to receive(:current_branch).and_return(branch)
44
+ allow(GitReflow).to receive(:remote_repo_name).and_return(repo)
45
+ allow(GitReflow).to receive(:remote_user).and_return(user)
46
+ allow(GitReflow).to receive(:fetch_destination).and_return(true)
47
+ allow(GitReflow).to receive(:update_destination).and_return(true)
48
48
 
49
- GitReflow::GitServer::GitHub.any_instance.stub(:run).with('hostname', loud: false).and_return(hostname)
49
+ allow_any_instance_of(GitReflow::GitServer::GitHub).to receive(:run).with('hostname', loud: false).and_return(hostname)
50
50
  github_server = GitReflow::GitServer::GitHub.new
51
- github_server.class.stub(:user).and_return(user)
52
- github_server.class.stub(:oauth_token).and_return(oauth_token_hash.token)
53
- github_server.class.stub(:site_url).and_return(site_url)
54
- github_server.class.stub(:api_endpoint).and_return(api_endpoint)
55
- github_server.class.stub(:remote_user).and_return(user)
56
- github_server.class.stub(:remote_repo).and_return(repo)
57
- github_server.class.stub(:oauth_token).and_return(oauth_token_hash.token)
58
- github_server.class.stub(:get_committed_time).and_return(Time.now)
51
+ allow(github_server.class).to receive(:user).and_return(user)
52
+ allow(github_server.class).to receive(:oauth_token).and_return(oauth_token_hash.token)
53
+ allow(github_server.class).to receive(:site_url).and_return(site_url)
54
+ allow(github_server.class).to receive(:api_endpoint).and_return(api_endpoint)
55
+ allow(github_server.class).to receive(:remote_user).and_return(user)
56
+ allow(github_server.class).to receive(:remote_repo).and_return(repo)
57
+ allow(github_server.class).to receive(:oauth_token).and_return(oauth_token_hash.token)
58
+ allow(github_server.class).to receive(:get_committed_time).and_return(Time.now)
59
59
 
60
- GitReflow.stub(:git_server).and_return(github_server)
60
+ allow(GitReflow).to receive(:git_server).and_return(github_server)
61
61
 
62
62
  # Stubbing statuses for a given commit
63
63
  #stub_request(:get, %r{#{GitReflow.git_server.class.api_endpoint}/repos/#{user}/commits/\w+}).
@@ -79,9 +79,9 @@ module GithubHelpers
79
79
  to_return(:body => Fixture.new('pull_requests/pull_requests.json').to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"})
80
80
  # Stubbing pull request comments
81
81
  stub_get("/repos/#{user}/#{repo}/pulls/#{pull.number}/comments?").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}).
82
- to_return(:body => Fixture.new('pull_requests/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_json.to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"})
82
+ to_return(:body => Fixture.new('pull_requests/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_json.to_s, :status => 201, :headers => {'Accept' => 'application/vnd.github.v3+json,application/vnd.github.beta+json;q=0.5,application/json;q=0.1', :content_type => "application/json; charset=utf-8"})
83
83
  stub_get("/repos/#{user}/pulls/#{pull.number}/comments?").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}).
84
- to_return(:body => Fixture.new('pull_requests/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"})
84
+ to_return(:body => Fixture.new('pull_requests/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_s, :status => 201, :headers => {'Accept' => 'application/vnd.github.v3+json,application/vnd.github.beta+json;q=0.5,application/json;q=0.1', :content_type => "application/json; charset=utf-8"})
85
85
  # Stubbing issue comments
86
86
  stub_get("/repos/#{user}/issues/#{pull.number}/comments?").with(:query => {'access_token' => 'a1b2c3d4e5f6g7h8i9j0'}).
87
87
  to_return(:body => Fixture.new('issues/comments.json.erb', repo_owner: user, repo_name: repo, comments: [{author: user}], pull_request_number: pull.number).to_s, :status => 201, :headers => {:content_type => "application/json; charset=utf-8"})
@@ -1,7 +1,7 @@
1
1
  module RspecStubHelpers
2
2
  def stub_with_fallback(obj, method)
3
3
  original_method = obj.method(method)
4
- obj.stub(method).with(anything()) { |*args| original_method.call(*args) }
5
- return obj.stub(method)
4
+ allow(obj).to receive(method).with(anything()) { |*args| original_method.call(*args) }
5
+ return allow(obj).to receive(method)
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_reflow
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.5
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Valentino Stoll
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2016-04-14 00:00:00.000000000 Z
13
+ date: 2016-05-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: appraisal
@@ -18,28 +18,28 @@ dependencies:
18
18
  requirements:
19
19
  - - '='
20
20
  - !ruby/object:Gem::Version
21
- version: 1.0.3
21
+ version: 2.1.0
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - '='
27
27
  - !ruby/object:Gem::Version
28
- version: 1.0.3
28
+ version: 2.1.0
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: bundler
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
33
  - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: '1.11'
35
+ version: '1.12'
36
36
  type: :development
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
40
  - - "~>"
41
41
  - !ruby/object:Gem::Version
42
- version: '1.11'
42
+ version: '1.12'
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: chronic
45
45
  requirement: !ruby/object:Gem::Requirement
@@ -74,14 +74,14 @@ dependencies:
74
74
  requirements:
75
75
  - - "~>"
76
76
  - !ruby/object:Gem::Version
77
- version: '10.0'
77
+ version: '11.0'
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
82
  - - "~>"
83
83
  - !ruby/object:Gem::Version
84
- version: '10.0'
84
+ version: '11.0'
85
85
  - !ruby/object:Gem::Dependency
86
86
  name: rdoc
87
87
  requirement: !ruby/object:Gem::Requirement
@@ -102,14 +102,14 @@ dependencies:
102
102
  requirements:
103
103
  - - "~>"
104
104
  - !ruby/object:Gem::Version
105
- version: '3.0'
105
+ version: 3.4.0
106
106
  type: :development
107
107
  prerelease: false
108
108
  version_requirements: !ruby/object:Gem::Requirement
109
109
  requirements:
110
110
  - - "~>"
111
111
  - !ruby/object:Gem::Version
112
- version: '3.0'
112
+ version: 3.4.0
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: webmock
115
115
  requirement: !ruby/object:Gem::Requirement
@@ -130,14 +130,14 @@ dependencies:
130
130
  requirements:
131
131
  - - '='
132
132
  - !ruby/object:Gem::Version
133
- version: 0.7.0
133
+ version: 1.3.0
134
134
  type: :development
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  requirements:
138
138
  - - '='
139
139
  - !ruby/object:Gem::Version
140
- version: 0.7.0
140
+ version: 1.3.0
141
141
  - !ruby/object:Gem::Dependency
142
142
  name: colorize
143
143
  requirement: !ruby/object:Gem::Requirement
@@ -158,14 +158,14 @@ dependencies:
158
158
  requirements:
159
159
  - - '='
160
160
  - !ruby/object:Gem::Version
161
- version: 2.13.2
161
+ version: 2.14.0
162
162
  type: :runtime
163
163
  prerelease: false
164
164
  version_requirements: !ruby/object:Gem::Requirement
165
165
  requirements:
166
166
  - - '='
167
167
  - !ruby/object:Gem::Version
168
- version: 2.13.2
168
+ version: 2.14.0
169
169
  - !ruby/object:Gem::Dependency
170
170
  name: highline
171
171
  requirement: !ruby/object:Gem::Requirement
@@ -200,14 +200,14 @@ dependencies:
200
200
  requirements:
201
201
  - - '='
202
202
  - !ruby/object:Gem::Version
203
- version: 0.12.4
203
+ version: 0.14.0
204
204
  type: :runtime
205
205
  prerelease: false
206
206
  version_requirements: !ruby/object:Gem::Requirement
207
207
  requirements:
208
208
  - - '='
209
209
  - !ruby/object:Gem::Version
210
- version: 0.12.4
210
+ version: 0.14.0
211
211
  - !ruby/object:Gem::Dependency
212
212
  name: reenhanced_bitbucket_api
213
213
  requirement: !ruby/object:Gem::Requirement
@@ -247,6 +247,7 @@ files:
247
247
  - lib/git_reflow.rb
248
248
  - lib/git_reflow/base.rb
249
249
  - lib/git_reflow/commands/deliver.rb
250
+ - lib/git_reflow/commands/refresh.rb
250
251
  - lib/git_reflow/commands/review.rb
251
252
  - lib/git_reflow/commands/setup.rb
252
253
  - lib/git_reflow/commands/stage.rb
@@ -261,6 +262,7 @@ files:
261
262
  - lib/git_reflow/git_server/git_hub.rb
262
263
  - lib/git_reflow/git_server/git_hub/pull_request.rb
263
264
  - lib/git_reflow/git_server/pull_request.rb
265
+ - lib/git_reflow/merge_error.rb
264
266
  - lib/git_reflow/os_detector.rb
265
267
  - lib/git_reflow/sandbox.rb
266
268
  - lib/git_reflow/version.rb