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
@@ -22,32 +22,32 @@ describe GitReflow::GitHelpers do
22
22
  describe ".remote_user" do
23
23
  subject { Gitacular.remote_user }
24
24
 
25
- it { should == 'reenhanced.spectacular' }
25
+ it { is_expected.to eq('reenhanced.spectacular') }
26
26
 
27
27
  context "remote origin url isn't set" do
28
28
  let(:origin_url) { nil }
29
- it { should == '' }
29
+ it { is_expected.to eq('') }
30
30
  end
31
31
 
32
32
  context "remote origin uses HTTP" do
33
33
  let(:origin_url) { 'https://github.com/reenhanced.spectacular/this-is-the.shit.git' }
34
- it { should == 'reenhanced.spectacular' }
34
+ it { is_expected.to eq('reenhanced.spectacular') }
35
35
  end
36
36
  end
37
37
 
38
38
  describe ".remote_repo_name" do
39
39
  subject { Gitacular.remote_repo_name }
40
40
 
41
- it { should == 'this-is-the.shit' }
41
+ it { is_expected.to eq('this-is-the.shit') }
42
42
 
43
43
  context "remote origin url isn't set" do
44
44
  let(:origin_url) { nil }
45
- it { should == '' }
45
+ it { is_expected.to eq('') }
46
46
  end
47
47
 
48
48
  context "remote origin uses HTTP" do
49
49
  let(:origin_url) { 'https://github.com/reenhanced.spectacular/this-is-the.shit.git' }
50
- it { should == 'this-is-the.shit' }
50
+ it { is_expected.to eq('this-is-the.shit') }
51
51
  end
52
52
  end
53
53
 
@@ -63,7 +63,7 @@ describe GitReflow::GitHelpers do
63
63
 
64
64
  describe ".push_current_branch" do
65
65
  subject { Gitacular.push_current_branch }
66
- before { Gitacular.stub(:current_branch).and_return('bingo') }
66
+ before { allow(Gitacular).to receive(:current_branch).and_return('bingo') }
67
67
  it { expect{ subject }.to have_run_command "git push origin bingo" }
68
68
  end
69
69
 
@@ -76,7 +76,7 @@ describe GitReflow::GitHelpers do
76
76
  let(:current_branch) { 'bananas' }
77
77
  let(:destination_branch) { 'monkey-business' }
78
78
 
79
- before { Gitacular.stub(:current_branch).and_return(current_branch) }
79
+ before { allow(Gitacular).to receive(:current_branch).and_return(current_branch) }
80
80
  subject { Gitacular.update_destination(destination_branch) }
81
81
 
82
82
  it "updates the destination branch with the latest code from the remote repo" do
@@ -90,7 +90,7 @@ describe GitReflow::GitHelpers do
90
90
 
91
91
  describe ".update_current_branch" do
92
92
  subject { Gitacular.update_current_branch }
93
- before { Gitacular.stub(:current_branch).and_return('new-feature') }
93
+ before { allow(Gitacular).to receive(:current_branch).and_return('new-feature') }
94
94
 
95
95
  it "updates the remote changes and pushes any local changes" do
96
96
  expect { subject }.to have_run_commands_in_order [
@@ -100,64 +100,20 @@ describe GitReflow::GitHelpers do
100
100
  end
101
101
  end
102
102
 
103
- describe ".merge_feature_branch(options)" do
104
- let(:destination_branch) { 'monkey-business' }
105
- let(:feature_branch) { 'bananas' }
106
- let(:merge_options) { {} }
107
-
108
- subject { Gitacular.merge_feature_branch(feature_branch, merge_options) }
103
+ describe ".update_feature_branch" do
104
+ options = {base: "base", remote: "remote"}
105
+ subject { Gitacular.update_feature_branch(options) }
106
+ before { allow(Gitacular).to receive(:current_branch).and_return('feature') }
109
107
 
110
- it 'checks out master as the default destination branch and squash merges the feature branch' do
108
+ it "calls the correct methods" do
111
109
  expect { subject }.to have_run_commands_in_order [
112
- 'git checkout master',
113
- "git merge --squash #{feature_branch}"
110
+ "git checkout base",
111
+ "git pull remote base",
112
+ "git checkout feature",
113
+ "git pull origin feature",
114
+ "git merge base"
114
115
  ]
115
116
  end
116
-
117
- context "providing a destination branch" do
118
- let(:merge_options) {{ destination_branch: destination_branch }}
119
- it { expect{ subject }.to have_run_command "git checkout #{destination_branch}" }
120
- end
121
-
122
- context "with a message" do
123
- let(:merge_options) {{ message: "don't throw doo doo" }}
124
- it "appends the message to the squashed commit message" do
125
- Gitacular.should_receive(:append_to_squashed_commit_message).with("don't throw doo doo")
126
- subject
127
- end
128
-
129
- context 'and a pull reuqest number' do
130
- before { merge_options.merge!(pull_request_number: 3) }
131
- it "appends the message to the squashed commit message" do
132
- Gitacular.should_receive(:append_to_squashed_commit_message).with("don't throw doo doo\nCloses #3\n")
133
- subject
134
- end
135
- end
136
- end
137
-
138
- context "with a pull request number" do
139
- let(:merge_options) {{ pull_request_number: 3 }}
140
- it "appends the message to the squashed commit message" do
141
- Gitacular.should_receive(:append_to_squashed_commit_message).with("\nCloses #3\n")
142
- subject
143
- end
144
- end
145
-
146
- context "with one LGTM author" do
147
- let(:merge_options) {{ lgtm_authors: 'codenamev' }}
148
- it "appends the message to the squashed commit message" do
149
- Gitacular.should_receive(:append_to_squashed_commit_message).with("\nLGTM given by: @#{merge_options[:lgtm_authors]}\n")
150
- subject
151
- end
152
- end
153
-
154
- context "with LGTM authors" do
155
- let(:merge_options) {{ lgtm_authors: ['codenamev', 'nhance'] }}
156
- it "appends the message to the squashed commit message" do
157
- Gitacular.should_receive(:append_to_squashed_commit_message).with("\nLGTM given by: @#{merge_options[:lgtm_authors].join(', @')}\n")
158
- subject
159
- end
160
- end
161
117
  end
162
118
 
163
119
  describe ".append_to_squashed_commit_message(message)" do
@@ -6,7 +6,7 @@ describe GitReflow::GitServer do
6
6
  subject { GitReflow::GitServer.connect connection_options }
7
7
 
8
8
  before do
9
- GitReflow::GitServer::GitHub.stub(:new)
9
+ allow(GitReflow::GitServer::GitHub).to receive(:new)
10
10
 
11
11
  module GitReflow::GitServer
12
12
  class DummyHub < Base
@@ -27,8 +27,8 @@ describe GitReflow::GitServer do
27
27
  describe '.connect(options)' do
28
28
  it 'initializes a new GitHub server provider by default' do
29
29
  stubbed_github = Class.new
30
- stubbed_github.stub(:authenticate)
31
- GitReflow::GitServer::GitHub.should_receive(:new).and_return(stubbed_github)
30
+ allow(stubbed_github).to receive(:authenticate)
31
+ expect(GitReflow::GitServer::GitHub).to receive(:new).and_return(stubbed_github)
32
32
  subject
33
33
  end
34
34
 
@@ -38,39 +38,39 @@ describe GitReflow::GitServer do
38
38
 
39
39
  it 'initializes any server provider that has been implemented' do
40
40
  dummy_hub = GitReflow::GitServer::DummyHub.new({})
41
- GitReflow::GitServer::DummyHub.should_receive(:new).with(expected_server_options).and_return(dummy_hub)
42
- subject.should == dummy_hub
43
- $output.should_not include 'GitServer not setup for: DummyHub'
41
+ expect(GitReflow::GitServer::DummyHub).to receive(:new).with(expected_server_options).and_return(dummy_hub)
42
+ expect(subject).to eq(dummy_hub)
43
+ expect($says).not_to include 'GitServer not setup for: DummyHub'
44
44
  end
45
45
  end
46
46
 
47
47
  context 'provider not yet implemented' do
48
48
  let(:connection_options) {{ provider: 'GitLab' }}
49
- it { expect{ subject }.to have_output "Error connecting to GitLab: GitServer not setup for \"GitLab\"" }
49
+ it { expect{ subject }.to have_said "Error connecting to GitLab: GitServer not setup for \"GitLab\"", :error }
50
50
  end
51
51
  end
52
52
 
53
53
  describe '.current_provider' do
54
54
  subject { GitReflow::GitServer.current_provider }
55
55
 
56
- before { GitReflow::Config.stub(:get).with('reflow.git-server', local: true).and_return(nil) }
56
+ before { allow(GitReflow::Config).to receive(:get).with('reflow.git-server', local: true).and_return(nil) }
57
57
 
58
58
  context 'Reflow setup to use GitHub' do
59
- before { GitReflow::Config.stub(:get).with('reflow.git-server').and_return('GitHub') }
60
- it { should == GitReflow::GitServer::GitHub }
59
+ before { allow(GitReflow::Config).to receive(:get).with('reflow.git-server').and_return('GitHub') }
60
+ it { is_expected.to eq(GitReflow::GitServer::GitHub) }
61
61
  end
62
62
 
63
63
  context 'Reflow has not yet been setup' do
64
- before { GitReflow::Config.stub(:get).with('reflow.git-server').and_return('') }
65
- it { should be_nil }
66
- it { expect{ subject }.to have_output "[notice] Reflow hasn't been setup yet. Run 'git reflow setup' to continue" }
64
+ before { allow(GitReflow::Config).to receive(:get).with('reflow.git-server').and_return('') }
65
+ it { is_expected.to be_nil }
66
+ it { expect{ subject }.to have_said "Reflow hasn't been setup yet. Run 'git reflow setup' to continue", :notice }
67
67
  end
68
68
 
69
69
  context 'an unknown server provider is stored in the git config' do
70
- before { GitReflow::Config.stub(:get).with('reflow.git-server').and_return('GittyUp') }
70
+ before { allow(GitReflow::Config).to receive(:get).with('reflow.git-server').and_return('GittyUp') }
71
71
 
72
- it { should be_nil }
73
- it { expect{ subject }.to have_output "GitServer not setup for \"GittyUp\"" }
72
+ it { is_expected.to be_nil }
73
+ it { expect{ subject }.to have_said "GitServer not setup for \"GittyUp\"", :error }
74
74
  end
75
75
  end
76
76
 
@@ -78,24 +78,24 @@ describe GitReflow::GitServer do
78
78
  subject { GitReflow::GitServer.connection }
79
79
 
80
80
  before do
81
- GitReflow::Config.stub(:get).with('reflow.git-server', local: true).and_return(nil)
82
- GitReflow::Config.stub(:get).with('reflow.git-server').and_return(nil)
81
+ allow(GitReflow::Config).to receive(:get).with('reflow.git-server', local: true).and_return(nil)
82
+ allow(GitReflow::Config).to receive(:get).with('reflow.git-server').and_return(nil)
83
83
  end
84
84
 
85
- it { should be_nil }
85
+ it { is_expected.to be_nil }
86
86
 
87
87
  context "with a valid provider" do
88
- before { GitReflow::Config.stub(:get).with('reflow.git-server').and_return('GitHub') }
88
+ before { allow(GitReflow::Config).to receive(:get).with('reflow.git-server').and_return('GitHub') }
89
89
  it 'calls connection on the provider' do
90
- GitReflow::GitServer::GitHub.should_receive(:connection)
90
+ expect(GitReflow::GitServer::GitHub).to receive(:connection)
91
91
  subject
92
92
  end
93
93
  end
94
94
 
95
95
  context "with an invalid provider" do
96
- before { GitReflow::Config.stub(:get).with('reflow.git-server').and_return('GittyUp') }
97
- it { should be_nil }
98
- it { expect{ subject }.to have_output "GitServer not setup for \"GittyUp\"" }
96
+ before { allow(GitReflow::Config).to receive(:get).with('reflow.git-server').and_return('GittyUp') }
97
+ it { is_expected.to be_nil }
98
+ it { expect{ subject }.to have_said "GitServer not setup for \"GittyUp\"", :error }
99
99
  end
100
100
  end
101
101
  end
@@ -11,7 +11,7 @@ describe GitReflow::GitServer::BitBucket do
11
11
  let(:remote_url) { "git@bitbucket.org:#{user}/#{repo}.git" }
12
12
 
13
13
  before do
14
- HighLine.any_instance.stub(:ask) do |terminal, question|
14
+ allow_any_instance_of(HighLine).to receive(:ask) do |terminal, question|
15
15
  values = {
16
16
  "Please enter your BitBucket username: " => user
17
17
  }
@@ -25,7 +25,7 @@ describe GitReflow::GitServer::BitBucket do
25
25
  subject { GitReflow::GitServer::BitBucket.new({}) }
26
26
 
27
27
  it 'sets the reflow git server provider to BitBucket in the git config' do
28
- GitReflow::Config.should_receive(:set).once.with('reflow.git-server', 'BitBucket', local: false)
28
+ expect(GitReflow::Config).to receive(:set).once.with('reflow.git-server', 'BitBucket', local: false)
29
29
  subject
30
30
  end
31
31
 
@@ -33,7 +33,7 @@ describe GitReflow::GitServer::BitBucket do
33
33
  subject { GitReflow::GitServer::BitBucket.new(project_only: true) }
34
34
 
35
35
  it 'sets the enterprise site and api as the site and api endpoints for the BitBucket provider in the git config' do
36
- GitReflow::Config.should_receive(:set).once.with('reflow.git-server', 'BitBucket', local: true)
36
+ expect(GitReflow::Config).to receive(:set).once.with('reflow.git-server', 'BitBucket', local: true)
37
37
  subject
38
38
  end
39
39
  end
@@ -52,27 +52,27 @@ describe GitReflow::GitServer::BitBucket do
52
52
  allow(GitReflow::Config).to receive(:get).with('bitbucket.user', local: false).and_return(user)
53
53
  allow(GitReflow::Config).to receive(:get).with('bitbucket.api-key', reload: true, local: false).and_return(api_key)
54
54
  allow(GitReflow::Config).to receive(:get).with('reflow.local-projects', all: true).and_return('')
55
- expect { subject }.to have_output "\nYour BitBucket account was already setup with:"
56
- expect { subject }.to have_output "\tUser Name: #{user}"
55
+ expect { subject }.to have_said "\nYour BitBucket account was already setup with:"
56
+ expect { subject }.to have_said "\tUser Name: #{user}"
57
57
  end
58
58
  end
59
59
 
60
60
  context 'not yet authenticated' do
61
61
  context 'with valid BitBucket credentials' do
62
62
  before do
63
- GitReflow::Config.stub(:get).and_return('')
64
- GitReflow::Config.stub(:set)
65
- GitReflow::Config.stub(:set).with('bitbucket.api-key', reload: true).and_return(api_key)
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
66
  allow(GitReflow::Config).to receive(:get).with('bitbucket.api-key', reload: true).and_return('')
67
67
  allow(GitReflow::Config).to receive(:get).with('remote.origin.url').and_return(remote_url)
68
68
  allow(GitReflow::Config).to receive(:get).with('reflow.local-projects').and_return('')
69
- bitbucket.stub(:connection).and_return double(repos: double(all: []))
69
+ allow(bitbucket).to receive(:connection).and_return double(repos: double(all: []))
70
70
  end
71
71
 
72
72
  it "prompts me to setup an API key" do
73
- expect { subject }.to have_output "\nIn order to connect your BitBucket account,"
74
- expect { subject }.to have_output "you'll need to generate an API key for your team"
75
- expect { subject }.to have_output "Visit https://bitbucket.org/account/user/reenhanced/api-key/, to generate it\n"
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
76
  end
77
77
  end
78
78
  end
@@ -16,6 +16,8 @@ describe GitReflow::GitServer::GitHub::PullRequest do
16
16
  let(:existing_pull_requests) { Fixture.new('pull_requests/pull_requests.json').to_json_hashie }
17
17
  let(:existing_pull_commits) { Fixture.new('pull_requests/commits.json').to_json_hashie }
18
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[/[^:]+$/] }
19
21
  let(:existing_pull_comments) {
20
22
  Fixture.new('pull_requests/comments.json.erb',
21
23
  repo_owner: user,
@@ -40,8 +42,8 @@ describe GitReflow::GitServer::GitHub::PullRequest do
40
42
  "Please enter your Enterprise API endpoint (e.g. https://github.company.com/api/v3):" => enterprise_api
41
43
  })
42
44
 
43
- github.class.stub(:remote_user).and_return(user)
44
- github.class.stub(:remote_repo_name).and_return(repo)
45
+ allow(github.class).to receive(:remote_user).and_return(user)
46
+ allow(github.class).to receive(:remote_repo_name).and_return(repo)
45
47
  allow(GitReflow::GitServer::PullRequest).to receive(:approval_regex).and_return(/(?i-mx:lgtm|looks good to me|:\+1:|:thumbsup:|:shipit:)/)
46
48
  end
47
49
 
@@ -49,8 +51,8 @@ describe GitReflow::GitServer::GitHub::PullRequest do
49
51
  specify { expect(subject.number).to eql(existing_pull_request.number) }
50
52
  specify { expect(subject.description).to eql(existing_pull_request.body) }
51
53
  specify { expect(subject.html_url).to eql(existing_pull_request.html_url) }
52
- specify { expect(subject.feature_branch_name).to eql(existing_pull_request.head.label) }
53
- specify { expect(subject.base_branch_name).to eql(existing_pull_request.base.label) }
54
+ specify { expect(subject.feature_branch_name).to eql(feature_branch_name) }
55
+ specify { expect(subject.base_branch_name).to eql(base_branch_name) }
54
56
  specify { expect(subject.build_status).to eql('success') }
55
57
  specify { expect(subject.source_object).to eql(existing_pull_request) }
56
58
  end
@@ -85,7 +87,7 @@ describe GitReflow::GitServer::GitHub::PullRequest do
85
87
  context "Testing Nil Comments" do
86
88
  before do
87
89
  stub_request(:get, "https://api.github.com/repos/reenhanced/repo/pulls/2/comments?access_token=a1b2c3d4e5f6g7h8i9j0").
88
- 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.12.4'}).
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'}).
89
91
  to_return(:status => 200, :body => "", :headers => {})
90
92
 
91
93
  FakeGitHub.new(
@@ -16,7 +16,7 @@ describe GitReflow::GitServer::GitHub do
16
16
  let(:existing_pull_requests) { Fixture.new('pull_requests/pull_requests.json').to_json_hashie }
17
17
 
18
18
  before do
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,
@@ -28,17 +28,17 @@ describe GitReflow::GitServer::GitHub do
28
28
  return_value
29
29
  end
30
30
 
31
- github.class.stub(:remote_user).and_return(user)
32
- github.class.stub(:remote_repo_name).and_return(repo)
31
+ allow(github.class).to receive(:remote_user).and_return(user)
32
+ allow(github.class).to receive(:remote_repo_name).and_return(repo)
33
33
  end
34
34
 
35
35
  describe '#initialize(options)' do
36
36
  subject { GitReflow::GitServer::GitHub.new({}) }
37
37
 
38
38
  it 'sets the reflow git server provider to GitHub in the git config' do
39
- GitReflow::Config.should_receive(:set).once.with('github.site', github_site, local: false)
40
- GitReflow::Config.should_receive(:set).once.with('github.endpoint', github_api_endpoint, local: false)
41
- GitReflow::Config.should_receive(:set).once.with('reflow.git-server', 'GitHub', local: false)
39
+ expect(GitReflow::Config).to receive(:set).once.with('github.site', github_site, local: false)
40
+ expect(GitReflow::Config).to receive(:set).once.with('github.endpoint', github_api_endpoint, local: false)
41
+ expect(GitReflow::Config).to receive(:set).once.with('reflow.git-server', 'GitHub', local: false)
42
42
  subject
43
43
  end
44
44
 
@@ -46,9 +46,9 @@ describe GitReflow::GitServer::GitHub do
46
46
  subject { GitReflow::GitServer::GitHub.new(enterprise: true) }
47
47
 
48
48
  it 'sets the enterprise site and api as the site and api endpoints for the GitHub provider in the git config' do
49
- GitReflow::Config.should_receive(:set).once.with('github.site', enterprise_site, local: false)
50
- GitReflow::Config.should_receive(:set).once.with('github.endpoint', enterprise_api, local: false)
51
- GitReflow::Config.should_receive(:set).once.with('reflow.git-server', 'GitHub', local: false)
49
+ expect(GitReflow::Config).to receive(:set).once.with('github.site', enterprise_site, local: false)
50
+ expect(GitReflow::Config).to receive(:set).once.with('github.endpoint', enterprise_api, local: false)
51
+ expect(GitReflow::Config).to receive(:set).once.with('reflow.git-server', 'GitHub', local: false)
52
52
  subject
53
53
  end
54
54
 
@@ -58,13 +58,13 @@ describe GitReflow::GitServer::GitHub do
58
58
  subject { GitReflow::GitServer::GitHub.new(project_only: true) }
59
59
 
60
60
  before do
61
- GitReflow::Config.should_receive(:get).twice.with('reflow.local-projects', all: true).and_return("#{user}/#{repo}")
61
+ expect(GitReflow::Config).to receive(:get).twice.with('reflow.local-projects', all: true).and_return("#{user}/#{repo}")
62
62
  end
63
63
 
64
64
  it 'sets the enterprise site and api as the site and api endpoints for the GitHub provider in the git config' do
65
- GitReflow::Config.should_receive(:set).once.with('github.site', github_site, local: true).and_call_original
66
- GitReflow::Config.should_receive(:set).once.with('github.endpoint', github_api_endpoint, local: true)
67
- GitReflow::Config.should_receive(:set).once.with('reflow.git-server', 'GitHub', local: true)
65
+ expect(GitReflow::Config).to receive(:set).once.with('github.site', github_site, local: true).and_call_original
66
+ expect(GitReflow::Config).to receive(:set).once.with('github.endpoint', github_api_endpoint, local: true)
67
+ expect(GitReflow::Config).to receive(:set).once.with('reflow.git-server', 'GitHub', local: true)
68
68
  subject
69
69
  end
70
70
  end
@@ -73,32 +73,32 @@ describe GitReflow::GitServer::GitHub do
73
73
 
74
74
  describe '#authenticate' do
75
75
  let(:github) { GitReflow::GitServer::GitHub.new({}) }
76
- let!(:github_api) { Github.new }
76
+ let!(:github_api) { Github::Client.new }
77
77
  let(:github_authorizations) { Github::Client::Authorizations.new }
78
78
  subject { github.authenticate }
79
79
 
80
80
  before do
81
- GitReflow::GitServer::GitHub.stub(:user).and_return('reenhanced')
82
- github_api.stub(:oauth).and_return(github_authorizations)
83
- github_api.stub_chain(:oauth, :all).and_return([])
84
- github.stub(:run).with('hostname', loud: false).and_return(hostname)
81
+ allow(GitReflow::GitServer::GitHub).to receive(:user).and_return('reenhanced')
82
+ allow(github_api).to receive(:oauth).and_return(github_authorizations)
83
+ allow(github_api).to receive_message_chain(:oauth, :all).and_return([])
84
+ allow(github).to receive(:run).with('hostname', loud: false).and_return(hostname)
85
85
  end
86
86
 
87
87
  context 'not yet authenticated' do
88
88
  context 'with valid GitHub credentials' do
89
89
 
90
90
  before do
91
- Github.stub(:new).and_return(github_api)
92
- github_authorizations.stub(:authenticated?).and_return(true)
93
- github_api.oauth.stub(:create).with({ scopes: ['repo'], note: "git-reflow (#{hostname})" }).and_return(oauth_token_hash)
91
+ allow(Github::Client).to receive(:new).and_return(github_api)
92
+ allow(github_authorizations).to receive(:authenticated?).and_return(true)
93
+ allow(github_api.oauth).to receive(:create).with({ scopes: ['repo'], note: "git-reflow (#{hostname})" }).and_return(oauth_token_hash)
94
94
  end
95
95
 
96
96
  it "notifies the user of successful setup" do
97
- expect { subject }.to have_output "\nYour GitHub account was successfully setup!"
97
+ expect { subject }.to have_said "Your GitHub account was successfully setup!", :success
98
98
  end
99
99
 
100
100
  it "creates a new GitHub oauth token" do
101
- github_api.oauth.should_receive(:create).and_return(oauth_token_hash)
101
+ expect(github_api.oauth).to receive(:create).and_return(oauth_token_hash)
102
102
  subject
103
103
  end
104
104
 
@@ -133,7 +133,7 @@ describe GitReflow::GitServer::GitHub do
133
133
 
134
134
  context "use GitHub enterprise account" do
135
135
  let(:github) { GitReflow::GitServer::GitHub.new(enterprise: true) }
136
- before { GitReflow::GitServer::GitHub.stub(:@using_enterprise).and_return(true) }
136
+ before { allow(GitReflow::GitServer::GitHub).to receive(:@using_enterprise).and_return(true) }
137
137
  it "creates git config keys for github connections" do
138
138
  expect{ subject }.to have_run_command_silently "git config -f #{GitReflow::Config::CONFIG_FILE_PATH} --replace-all github.site \"#{enterprise_site}\""
139
139
  expect{ subject }.to have_run_command_silently "git config -f #{GitReflow::Config::CONFIG_FILE_PATH} --replace-all github.endpoint \"#{enterprise_api}\""
@@ -152,11 +152,11 @@ describe GitReflow::GitServer::GitHub do
152
152
  }}
153
153
 
154
154
  before do
155
- Github.should_receive(:new).and_raise Github::Error::Unauthorized.new(unauthorized_error_response)
155
+ allow(Github::Client).to receive(:new).and_raise Github::Error::Unauthorized.new(unauthorized_error_response)
156
156
  end
157
157
 
158
158
  it "notifies user of invalid login details" do
159
- expect { subject }.to have_output "\nGithub Authentication Error: #{Github::Error::Unauthorized.new(unauthorized_error_response).inspect}"
159
+ expect { subject }.to have_said "Github Authentication Error: #{Github::Error::Unauthorized.new(unauthorized_error_response).inspect}", :error
160
160
  end
161
161
  end
162
162
  end
@@ -170,7 +170,7 @@ describe GitReflow::GitServer::GitHub do
170
170
  subject { github.create_pull_request({ title: title, body: body, base: 'master' }) }
171
171
 
172
172
  before do
173
- github.class.stub(:current_branch).and_return(current_branch)
173
+ allow(github.class).to receive(:current_branch).and_return(current_branch)
174
174
  allow(GitReflow).to receive(:git_server).and_return(github)
175
175
  stub_request(:post, %r{/repos/#{user}/#{repo}/pulls}).
176
176
  to_return(body: Fixture.new('pull_requests/pull_request.json').to_s, status: 201, headers: {content_type: "application/json; charset=utf-8"})
@@ -179,7 +179,7 @@ describe GitReflow::GitServer::GitHub do
179
179
  specify { expect(subject.class.to_s).to eq('GitReflow::GitServer::GitHub::PullRequest') }
180
180
 
181
181
  it 'creates a pull request using the remote user and repo' do
182
- github_api.stub(:pull_requests)
182
+ allow(github_api).to receive(:pull_requests)
183
183
  expect(github_api.pull_requests).to receive(:create).with(user, repo, title: title, body: body, head: "#{user}:#{current_branch}", base: 'master').and_return(existing_pull_request)
184
184
  subject
185
185
  end
@@ -189,25 +189,25 @@ describe GitReflow::GitServer::GitHub do
189
189
  subject { github.find_open_pull_request({ from: 'new-feature', to: 'master'}) }
190
190
 
191
191
  it 'looks for an open pull request matching the remote user/repo' do
192
- subject.number.should == existing_pull_requests.first.number
192
+ expect(subject.number).to eq(existing_pull_requests.first.number)
193
193
  end
194
194
 
195
195
  context 'no pull request exists' do
196
196
  before do
197
- github_api.stub(:pull_requests)
198
- github_api.pull_requests.should_receive(:all).and_return([])
197
+ allow(github_api).to receive(:pull_requests)
198
+ expect(github_api.pull_requests).to receive(:all).and_return([])
199
199
  end
200
- it { should == nil }
200
+ it { is_expected.to eq(nil) }
201
201
  end
202
202
  end
203
203
 
204
204
  describe '#get_build_status(sha)' do
205
205
  let(:sha) { '6dcb09b5b57875f334f61aebed695e2e4193db5e' }
206
206
  subject { github.get_build_status(sha) }
207
- before { github_api.stub_chain(:repos, :statuses) }
207
+ before { allow(github_api).to receive_message_chain(:repos, :statuses) }
208
208
 
209
209
  it 'gets the latest build status for the given commit hash' do
210
- github_api.repos.statuses.should_receive(:all).with(user, repo, sha).and_return([{ state: 'success'}])
210
+ expect(github_api.repos.statuses).to receive(:all).with(user, repo, sha).and_return([{ state: 'success'}])
211
211
  subject
212
212
  end
213
213
  end