thegarage-gitx 2.5.1 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d0b811de52af14874eb51c9c61fd1394fc6ce510
4
- data.tar.gz: a497c02d33bbe70cdc915bbab537f019d20e82d8
3
+ metadata.gz: a1472845b75ae2e8f0c0a41c0ff1d19eda8813af
4
+ data.tar.gz: bbd73d4d28d3d416c3ede2ab3b4334feaae97030
5
5
  SHA512:
6
- metadata.gz: a7cf35490ed34c5b821d659bf89f7e67450a1718c00f2d1fd63dc4843a837d13565bb3f36ca12e80e7e3c8eb9cdf61e4807c0ef62714bcdc067b7cc2c27e5cd2
7
- data.tar.gz: 1d2d0f3cfd6f47ded0614469664a948a73ed5f1237bb8a4f46a97e5100e56616eb6f664673ba50127b11ac3b52e83cc32ead1d32d8234b9a5ca0ea523d9ee8d6
6
+ metadata.gz: cc00306173a80368159b1a29cd92ce1b14f00fb11b8f6cae0c08bdda557bb4e1749610bec58f22db924c39f27d4b433788ff902772a14202007ecd2d29785492
7
+ data.tar.gz: e9b309a00bae2aef338e1fc05af23618f2be9553cd850252c04b3456f0a8e4664fbe536970c05a0819b3d8b2ee12aa8f2f598fa778bb0e05408d768535eb13c3
@@ -0,0 +1,133 @@
1
+ require 'octokit'
2
+
3
+ module Thegarage
4
+ module Gitx
5
+ module Cli
6
+ module Github
7
+ CLIENT_URL = 'https://github.com/thegarage/thegarage-gitx'
8
+ PULL_REQUEST_FOOTER = <<-EOS.dedent
9
+ # Pull Request Protips(tm):
10
+ # * Include description of how this change accomplishes the task at hand.
11
+ # * Use GitHub flavored Markdown http://github.github.com/github-flavored-markdown/
12
+ # * Review CONTRIBUTING.md for recommendations of artifacts, links, images, screencasts, etc.
13
+ #
14
+ # This footer will automatically be stripped from the pull request description
15
+ EOS
16
+
17
+ def find_or_create_pull_request(branch)
18
+ pull_request = find_pull_request(branch)
19
+ pull_request ||= begin
20
+ UpdateCommand.new.update
21
+ pull_request = create_pull_request(branch)
22
+ say 'Created pull request: '
23
+ say pull_request.html_url, :green
24
+
25
+ pull_request
26
+ end
27
+ pull_request
28
+ end
29
+
30
+ # @return [Sawyer::Resource] data structure of pull request info if found
31
+ # @return nil if no pull request found
32
+ def find_pull_request(branch)
33
+ head_reference = "#{github_organization}:#{branch}"
34
+ params = {
35
+ head: head_reference,
36
+ state: 'open'
37
+ }
38
+ pull_requests = github_client.pull_requests(github_slug, params)
39
+ pull_requests.first
40
+ end
41
+
42
+ # @see http://developer.github.com/v3/pulls/
43
+ def create_pull_request(branch)
44
+ say "Creating pull request for "
45
+ say "#{branch} ", :green
46
+ say "against "
47
+ say "#{Thegarage::Gitx::BASE_BRANCH} ", :green
48
+ say "in "
49
+ say github_slug, :green
50
+
51
+ title = branch
52
+ body = pull_request_body(branch)
53
+ github_client.create_pull_request(github_slug, Thegarage::Gitx::BASE_BRANCH, branch, title, body)
54
+ end
55
+
56
+ def pull_request_body(branch)
57
+ changelog = run_cmd "git log #{Thegarage::Gitx::BASE_BRANCH}...#{branch} --no-merges --pretty=format:'* %s%n%b'"
58
+ description = options[:description]
59
+
60
+ description_template = []
61
+ description_template << "#{description}\n" if description
62
+ description_template << '### Changelog'
63
+ description_template << changelog
64
+ description_template << PULL_REQUEST_FOOTER
65
+
66
+ body = ask_editor(description_template.join("\n"), repo.config['core.editor'])
67
+ body.gsub(PULL_REQUEST_FOOTER, '').chomp.strip
68
+ end
69
+
70
+ # token is cached in local git config for future use
71
+ # @return [String] auth token stored in git (current repo, user config or installed global settings)
72
+ # @see http://developer.github.com/v3/oauth/#scopes
73
+ # @see http://developer.github.com/v3/#user-agent-required
74
+ def authorization_token
75
+ auth_token = repo.config['thegarage.gitx.githubauthtoken']
76
+ return auth_token unless auth_token.to_s.blank?
77
+
78
+ auth_token = create_authorization
79
+ repo.config['thegarage.gitx.githubauthtoken'] = auth_token
80
+ auth_token
81
+ end
82
+
83
+ def create_authorization
84
+ password = ask("Github password for #{username}: ", :echo => false)
85
+ say ''
86
+ client = Octokit::Client.new(login: username, password: password)
87
+ response = client.create_authorization(authorization_request_options)
88
+ response.token
89
+ end
90
+
91
+ def authorization_request_options
92
+ timestamp = Time.now.utc.strftime('%Y-%m-%dT%H:%M:%S%z')
93
+ client_name = "The Garage Git eXtensions - #{github_slug} #{timestamp}"
94
+ options = {
95
+ :scopes => ['repo'],
96
+ :note => client_name,
97
+ :note_url => CLIENT_URL
98
+ }
99
+ two_factor_auth_token = ask("Github two factor authorization token (if enabled): ", :echo => false)
100
+ say ''
101
+ options[:headers] = {'X-GitHub-OTP' => two_factor_auth_token} if two_factor_auth_token
102
+ options
103
+ end
104
+
105
+ def github_client
106
+ @client ||= Octokit::Client.new(:access_token => authorization_token)
107
+ end
108
+
109
+ # @return [String] github username (ex: 'wireframe') of the current github.user
110
+ # @raise error if github.user is not configured
111
+ def username
112
+ username = repo.config['github.user']
113
+ fail "Github user not configured. Run: `git config --global github.user 'me@email.com'`" unless username
114
+ username
115
+ end
116
+
117
+ # @return the github slug for the current repository's remote origin url.
118
+ # @example
119
+ # git@github.com:socialcast/thegarage/gitx.git #=> thegarage/gitx
120
+ # @example
121
+ # https://github.com/socialcast/thegarage/gitx.git #=> thegarage/gitx
122
+ def github_slug
123
+ remote = repo.config['remote.origin.url']
124
+ remote.to_s.gsub(/\.git$/,'').split(/[:\/]/).last(2).join('/')
125
+ end
126
+
127
+ def github_organization
128
+ github_slug.split('/').first
129
+ end
130
+ end
131
+ end
132
+ end
133
+ end
@@ -2,11 +2,13 @@ require 'thor'
2
2
  require 'thegarage/gitx'
3
3
  require 'thegarage/gitx/cli/base_command'
4
4
  require 'thegarage/gitx/cli/update_command'
5
+ require 'thegarage/gitx/cli/github'
5
6
 
6
7
  module Thegarage
7
8
  module Gitx
8
9
  module Cli
9
10
  class IntegrateCommand < BaseCommand
11
+ include Github
10
12
  desc 'integrate', 'integrate the current branch into one of the aggregate development branches (default = staging)'
11
13
  method_option :resume, :type => :string, :aliases => '-r', :desc => 'resume merging of feature-branch'
12
14
  def integrate(integration_branch = 'staging')
@@ -23,6 +25,9 @@ module Thegarage
23
25
 
24
26
  integrate_branch(branch, integration_branch) unless options[:resume]
25
27
  checkout_branch branch
28
+
29
+ pull_request = find_or_create_pull_request(branch)
30
+ create_integrate_comment(pull_request)
26
31
  end
27
32
 
28
33
  private
@@ -83,6 +88,11 @@ module Thegarage
83
88
  repo.create_branch(target_branch, Thegarage::Gitx::BASE_BRANCH)
84
89
  run_cmd "git push origin #{target_branch}:#{target_branch}"
85
90
  end
91
+
92
+ def create_integrate_comment(pull_request)
93
+ comment = '[gitx] integrated into staging :twisted_rightwards_arrows:'
94
+ github_client.add_comment(github_slug, pull_request.number, comment)
95
+ end
86
96
  end
87
97
  end
88
98
  end
@@ -2,21 +2,13 @@ require 'thor'
2
2
  require 'thegarage/gitx'
3
3
  require 'thegarage/gitx/cli/base_command'
4
4
  require 'thegarage/gitx/cli/update_command'
5
- require 'octokit'
5
+ require 'thegarage/gitx/cli/github'
6
6
 
7
7
  module Thegarage
8
8
  module Gitx
9
9
  module Cli
10
10
  class ReviewCommand < BaseCommand
11
- CLIENT_URL = 'https://github.com/thegarage/thegarage-gitx'
12
- PULL_REQUEST_FOOTER = <<-EOS.dedent
13
- # Pull Request Protips(tm):
14
- # * Include description of how this change accomplishes the task at hand.
15
- # * Use GitHub flavored Markdown http://github.github.com/github-flavored-markdown/
16
- # * Review CONTRIBUTING.md for recommendations of artifacts, links, images, screencasts, etc.
17
- #
18
- # This footer will automatically be stripped from the pull request description
19
- EOS
11
+ include Github
20
12
 
21
13
  desc "review", "Create or update a pull request on github"
22
14
  method_option :description, :type => :string, :aliases => '-d', :desc => 'pull request description'
@@ -29,6 +21,7 @@ module Thegarage
29
21
 
30
22
  branch = current_branch.name
31
23
  pull_request = find_or_create_pull_request(branch)
24
+ create_bump_comment(pull_request) if options[:bump]
32
25
  assign_pull_request(pull_request) if options[:assignee]
33
26
 
34
27
  run_cmd "open #{pull_request.html_url}" if options[:open]
@@ -36,70 +29,6 @@ module Thegarage
36
29
 
37
30
  private
38
31
 
39
- def find_or_create_pull_request(branch)
40
- pull_request = find_pull_request(branch)
41
- if pull_request
42
- create_bump_comment(pull_request) if options[:bump]
43
- pull_request
44
- else
45
- UpdateCommand.new.update
46
- pull_request = create_pull_request(branch)
47
- say 'Pull request created: '
48
- say pull_request.html_url, :green
49
-
50
- pull_request
51
- end
52
- end
53
-
54
- # token is cached in local git config for future use
55
- # @return [String] auth token stored in git (current repo, user config or installed global settings)
56
- # @see http://developer.github.com/v3/oauth/#scopes
57
- # @see http://developer.github.com/v3/#user-agent-required
58
- def authorization_token
59
- auth_token = repo.config['thegarage.gitx.githubauthtoken']
60
- return auth_token unless auth_token.to_s.blank?
61
-
62
- auth_token = create_authorization
63
- repo.config['thegarage.gitx.githubauthtoken'] = auth_token
64
- auth_token
65
- end
66
-
67
- def create_authorization
68
- password = ask("Github password for #{username}: ", :echo => false)
69
- say ''
70
- client = Octokit::Client.new(login: username, password: password)
71
- response = client.create_authorization(authorization_request_options)
72
- response.token
73
- end
74
-
75
- def authorization_request_options
76
- timestamp = Time.now.utc.strftime('%Y-%m-%dT%H:%M:%S%z')
77
- client_name = "The Garage Git eXtensions - #{github_slug} #{timestamp}"
78
- options = {
79
- :scopes => ['repo'],
80
- :note => client_name,
81
- :note_url => CLIENT_URL
82
- }
83
- two_factor_auth_token = ask("Github two factor authorization token (if enabled): ", :echo => false)
84
- say ''
85
- options[:headers] = {'X-GitHub-OTP' => two_factor_auth_token} if two_factor_auth_token
86
- options
87
- end
88
-
89
- # @see http://developer.github.com/v3/pulls/
90
- def create_pull_request(branch)
91
- say "Creating pull request for "
92
- say "#{branch} ", :green
93
- say "against "
94
- say "#{Thegarage::Gitx::BASE_BRANCH} ", :green
95
- say "in "
96
- say github_slug, :green
97
-
98
- title = branch
99
- body = pull_request_body(branch)
100
- github_client.create_pull_request(github_slug, Thegarage::Gitx::BASE_BRANCH, branch, title, body)
101
- end
102
-
103
32
  def assign_pull_request(pull_request)
104
33
  assignee = options[:assignee]
105
34
  say "Assigning pull request to "
@@ -113,18 +42,6 @@ module Thegarage
113
42
  github_client.update_issue(github_slug, pull_request.number, title, body, options)
114
43
  end
115
44
 
116
- # @return [Sawyer::Resource] data structure of pull request info if found
117
- # @return nil if no pull request found
118
- def find_pull_request(branch)
119
- head_reference = "#{github_organization}:#{branch}"
120
- params = {
121
- head: head_reference,
122
- state: 'open'
123
- }
124
- pull_requests = github_client.pull_requests(github_slug, params)
125
- pull_requests.first
126
- end
127
-
128
45
  def create_bump_comment(pull_request)
129
46
  comment_template = []
130
47
  comment_template << '[gitx] review bump :tada:'
@@ -135,46 +52,6 @@ module Thegarage
135
52
  comment = comment.chomp.strip
136
53
  github_client.add_comment(github_slug, pull_request.number, comment)
137
54
  end
138
-
139
- def github_client
140
- @client ||= Octokit::Client.new(:access_token => authorization_token)
141
- end
142
-
143
- # @return [String] github username (ex: 'wireframe') of the current github.user
144
- # @raise error if github.user is not configured
145
- def username
146
- username = repo.config['github.user']
147
- fail "Github user not configured. Run: `git config --global github.user 'me@email.com'`" unless username
148
- username
149
- end
150
-
151
- # @return the github slug for the current repository's remote origin url.
152
- # @example
153
- # git@github.com:socialcast/thegarage/gitx.git #=> thegarage/gitx
154
- # @example
155
- # https://github.com/socialcast/thegarage/gitx.git #=> thegarage/gitx
156
- def github_slug
157
- remote = repo.config['remote.origin.url']
158
- remote.to_s.gsub(/\.git$/,'').split(/[:\/]/).last(2).join('/')
159
- end
160
-
161
- def github_organization
162
- github_slug.split('/').first
163
- end
164
-
165
- def pull_request_body(branch)
166
- changelog = run_cmd "git log #{Thegarage::Gitx::BASE_BRANCH}...#{branch} --no-merges --pretty=format:'* %s%n%b'"
167
- description = options[:description]
168
-
169
- description_template = []
170
- description_template << "#{description}\n" if description
171
- description_template << '### Changelog'
172
- description_template << changelog
173
- description_template << PULL_REQUEST_FOOTER
174
-
175
- body = ask_editor(description_template.join("\n"), repo.config['core.editor'])
176
- body.gsub(PULL_REQUEST_FOOTER, '').chomp.strip
177
- end
178
55
  end
179
56
  end
180
57
  end
@@ -1,5 +1,5 @@
1
1
  module Thegarage
2
2
  module Gitx
3
- VERSION = '2.5.1'
3
+ VERSION = '2.6.0'
4
4
  end
5
5
  end
@@ -29,8 +29,10 @@ describe Thegarage::Gitx::Cli::IntegrateCommand do
29
29
  allow(Thegarage::Gitx::Cli::UpdateCommand).to receive(:new).and_return(fake_update_command)
30
30
  end
31
31
  context 'when integration branch is ommitted and remote branch exists' do
32
+ let(:authorization_token) { '123123' }
32
33
  let(:remote_branch_names) { ['origin/staging'] }
33
34
  before do
35
+ allow(cli).to receive(:authorization_token).and_return(authorization_token)
34
36
  expect(fake_update_command).to receive(:update)
35
37
 
36
38
  expect(cli).to receive(:run_cmd).with("git fetch origin").ordered
@@ -40,15 +42,70 @@ describe Thegarage::Gitx::Cli::IntegrateCommand do
40
42
  expect(cli).to receive(:run_cmd).with("git push origin HEAD").ordered
41
43
  expect(cli).to receive(:run_cmd).with("git checkout feature-branch").ordered
42
44
 
43
- cli.integrate
45
+ stub_request(:post, /.*api.github.com.*/).to_return(:status => 201)
46
+
47
+ VCR.use_cassette('pull_request_does_exist') do
48
+ cli.integrate
49
+ end
44
50
  end
45
51
  it 'defaults to staging branch' do
46
52
  should meet_expectations
47
53
  end
54
+ it 'posts comment to pull request' do
55
+ expect(WebMock).to have_requested(:post, "https://api.github.com/repos/thegarage/thegarage-gitx/issues/10/comments").
56
+ with(body: {body: '[gitx] integrated into staging :twisted_rightwards_arrows:'})
57
+ end
58
+ end
59
+ context 'when a pull request doesnt exist for the feature-branch' do
60
+ let(:authorization_token) { '123123' }
61
+ let(:changelog) { '* made some fixes' }
62
+ let(:new_pull_request) do
63
+ {
64
+ html_url: "https://path/to/html/pull/request",
65
+ issue_url: "https://api/path/to/issue/url",
66
+ number: 10,
67
+ head: {
68
+ ref: "branch_name"
69
+ }
70
+ }
71
+ end
72
+ before do
73
+ allow(cli).to receive(:ask_editor).and_return('description')
74
+ allow(cli).to receive(:authorization_token).and_return(authorization_token)
75
+ expect(fake_update_command).to receive(:update).twice
76
+
77
+ expect(cli).to receive(:run_cmd).with("git fetch origin").ordered
78
+ expect(cli).to receive(:run_cmd).with("git branch -D staging", allow_failure: true).ordered
79
+ expect(cli).to receive(:run_cmd).with("git checkout staging").ordered
80
+ expect(cli).to receive(:run_cmd).with("git merge feature-branch").ordered
81
+ expect(cli).to receive(:run_cmd).with("git push origin HEAD").ordered
82
+ expect(cli).to receive(:run_cmd).with("git checkout feature-branch").ordered
83
+
84
+ expect(cli).to receive(:run_cmd).with("git log master...feature-branch --no-merges --pretty=format:'* %s%n%b'").and_return("2013-01-01 did some stuff").ordered
85
+
86
+ stub_request(:post, 'https://api.github.com/repos/thegarage/thegarage-gitx/pulls').to_return(:status => 201, :body => new_pull_request.to_json, :headers => {'Content-Type' => 'application/json'})
87
+ stub_request(:post, 'https://api.github.com/repos/thegarage/thegarage-gitx/issues/10/comments').to_return(:status => 201)
88
+
89
+ VCR.use_cassette('pull_request_does_not_exist') do
90
+ cli.integrate
91
+ end
92
+ end
93
+ it 'creates github pull request' do
94
+ should meet_expectations
95
+ end
96
+ it 'creates github comment for integration' do
97
+ expect(WebMock).to have_requested(:post, "https://api.github.com/repos/thegarage/thegarage-gitx/issues/10/comments").
98
+ with(body: {body: '[gitx] integrated into staging :twisted_rightwards_arrows:'})
99
+ end
100
+ it 'runs expected commands' do
101
+ should meet_expectations
102
+ end
48
103
  end
49
104
  context 'when staging branch does not exist remotely' do
105
+ let(:authorization_token) { '123123' }
50
106
  let(:remote_branch_names) { [] }
51
107
  before do
108
+ allow(cli).to receive(:authorization_token).and_return(authorization_token)
52
109
  expect(fake_update_command).to receive(:update)
53
110
 
54
111
  expect(repo).to receive(:create_branch).with('staging', 'master')
@@ -62,15 +119,24 @@ describe Thegarage::Gitx::Cli::IntegrateCommand do
62
119
  expect(cli).to receive(:run_cmd).with("git push origin HEAD").ordered
63
120
  expect(cli).to receive(:run_cmd).with("git checkout feature-branch").ordered
64
121
 
65
- cli.integrate
122
+ stub_request(:post, /.*api.github.com.*/).to_return(:status => 201)
123
+
124
+ VCR.use_cassette('pull_request_does_exist') do
125
+ cli.integrate
126
+ end
66
127
  end
67
128
  it 'creates remote aggregate branch' do
68
129
  should meet_expectations
69
130
  end
131
+ it 'posts comment to pull request' do
132
+ expect(WebMock).to have_requested(:post, "https://api.github.com/repos/thegarage/thegarage-gitx/issues/10/comments")
133
+ end
70
134
  end
71
135
  context 'when integration branch == prototype and remote branch exists' do
136
+ let(:authorization_token) { '123123' }
72
137
  let(:remote_branch_names) { ['origin/prototype'] }
73
138
  before do
139
+ allow(cli).to receive(:authorization_token).and_return(authorization_token)
74
140
  expect(fake_update_command).to receive(:update)
75
141
 
76
142
  expect(cli).to receive(:run_cmd).with("git fetch origin").ordered
@@ -80,11 +146,18 @@ describe Thegarage::Gitx::Cli::IntegrateCommand do
80
146
  expect(cli).to receive(:run_cmd).with("git push origin HEAD").ordered
81
147
  expect(cli).to receive(:run_cmd).with("git checkout feature-branch").ordered
82
148
 
83
- cli.integrate 'prototype'
149
+ stub_request(:post, /.*api.github.com.*/).to_return(:status => 201)
150
+
151
+ VCR.use_cassette('pull_request_does_exist') do
152
+ cli.integrate 'prototype'
153
+ end
84
154
  end
85
155
  it 'runs expected commands' do
86
156
  should meet_expectations
87
157
  end
158
+ it 'posts comment to pull request' do
159
+ expect(WebMock).to have_requested(:post, "https://api.github.com/repos/thegarage/thegarage-gitx/issues/10/comments")
160
+ end
88
161
  end
89
162
  context 'when integration branch is not an aggregate branch' do
90
163
  it 'raises an error' do
@@ -125,41 +198,57 @@ describe Thegarage::Gitx::Cli::IntegrateCommand do
125
198
  }
126
199
  end
127
200
  let(:repo) { cli.send(:repo) }
201
+ let(:authorization_token) { '123123' }
128
202
  before do
203
+ allow(cli).to receive(:authorization_token).and_return(authorization_token)
204
+
129
205
  expect(fake_update_command).to receive(:update)
130
206
 
131
207
  expect(cli).not_to receive(:run_cmd).with("git branch -D staging")
132
208
  expect(cli).not_to receive(:run_cmd).with("git push origin HEAD")
133
209
  expect(cli).to receive(:run_cmd).with("git checkout feature-branch")
134
210
 
135
- cli.integrate
211
+ stub_request(:post, /.*api.github.com.*/).to_return(:status => 201)
212
+
213
+ VCR.use_cassette('pull_request_does_exist') do
214
+ cli.integrate
215
+ end
136
216
  end
137
217
  it 'does not delete local staging branch' do
138
218
  should meet_expectations
139
219
  end
220
+ it 'posts comment to pull request' do
221
+ expect(WebMock).to have_requested(:post, "https://api.github.com/repos/thegarage/thegarage-gitx/issues/10/comments")
222
+ end
140
223
  end
141
224
  context 'with --resume "feature-branch" flag when feature-branch does not exist' do
142
225
  let(:options) do
143
226
  {
144
- resume: 'feature-branch'
227
+ resume: 'invalid-feature-branch'
145
228
  }
146
229
  end
147
- let(:repo) { cli.send(:repo) }
148
- let(:branches) { double(each_name: ['my-feature-branch'])}
149
- let(:local_branch_names) { ['another-feature-branch'] }
230
+ let(:local_branch_names) { ['feature-branch'] }
231
+ let(:authorization_token) { '123123' }
150
232
  before do
233
+ allow(cli).to receive(:authorization_token).and_return(authorization_token)
151
234
  expect(fake_update_command).to receive(:update)
152
- expect(cli).to receive(:ask).and_return('another-feature-branch')
235
+ expect(cli).to receive(:ask).and_return('feature-branch')
153
236
 
154
237
  expect(cli).not_to receive(:run_cmd).with("git branch -D staging")
155
238
  expect(cli).not_to receive(:run_cmd).with("git push origin HEAD")
156
- expect(cli).to receive(:run_cmd).with("git checkout another-feature-branch").ordered
239
+ expect(cli).to receive(:run_cmd).with("git checkout feature-branch").ordered
157
240
 
158
- cli.integrate
241
+ stub_request(:post, /.*api.github.com.*/).to_return(:status => 201)
242
+ VCR.use_cassette('pull_request_does_exist') do
243
+ cli.integrate
244
+ end
159
245
  end
160
246
  it 'asks user for feature-branch name' do
161
247
  should meet_expectations
162
248
  end
249
+ it 'posts comment to pull request' do
250
+ expect(WebMock).to have_requested(:post, "https://api.github.com/repos/thegarage/thegarage-gitx/issues/10/comments")
251
+ end
163
252
  end
164
253
  end
165
254
  end
@@ -133,7 +133,8 @@ describe Thegarage::Gitx::Cli::ReviewCommand do
133
133
  end
134
134
  end
135
135
  it 'posts comment to github' do
136
- expect(WebMock).to have_requested(:post, "https://api.github.com/repos/thegarage/thegarage-gitx/issues/10/comments")
136
+ expect(WebMock).to have_requested(:post, "https://api.github.com/repos/thegarage/thegarage-gitx/issues/10/comments").
137
+ with(body: {body: 'comment description'})
137
138
  end
138
139
  end
139
140
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thegarage-gitx
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.1
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Sonnek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-24 00:00:00.000000000 Z
11
+ date: 2014-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rugged
@@ -263,6 +263,7 @@ files:
263
263
  - lib/thegarage/gitx/cli/base_command.rb
264
264
  - lib/thegarage/gitx/cli/buildtag_command.rb
265
265
  - lib/thegarage/gitx/cli/cleanup_command.rb
266
+ - lib/thegarage/gitx/cli/github.rb
266
267
  - lib/thegarage/gitx/cli/integrate_command.rb
267
268
  - lib/thegarage/gitx/cli/nuke_command.rb
268
269
  - lib/thegarage/gitx/cli/release_command.rb