git_helper 3.5.1 → 3.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +23 -24
- data/README.md +2 -2
- data/lib/git_helper/github_client.rb +70 -0
- data/lib/git_helper/gitlab_client.rb +46 -2
- data/lib/git_helper/merge_request.rb +25 -22
- data/lib/git_helper/pull_request.rb +33 -46
- data/lib/git_helper/version.rb +1 -1
- data/lib/git_helper.rb +1 -2
- data/spec/git_helper/code_request_spec.rb +1 -1
- data/spec/git_helper/github_client_spec.rb +131 -0
- data/spec/git_helper/gitlab_client_spec.rb +120 -4
- data/spec/git_helper/merge_request_spec.rb +12 -13
- data/spec/git_helper/pull_request_spec.rb +18 -19
- metadata +5 -33
- data/lib/git_helper/octokit_client.rb +0 -13
- data/spec/git_helper/octokit_client_spec.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4cab8515ee7c8c8e345b477178e3352c600ff5db7bab81e8c3479c7db13bc7a
|
4
|
+
data.tar.gz: 53d031494e6e52826f7911c8f06337e82853f069e3cbfc18275d5f918886a443
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 446213efbe6058b0ab790750b390a05dfb7b47793554667ceb20a1c2720a9140c10e2aa9368d2127b62dce538b60b19826c9a9b6380ca88ff7046194e4cf20b9
|
7
|
+
data.tar.gz: 9db27ee02e2cc0a5f343b4c0f32b022cc9cbab48e152bb03c38ce8c8360258d9ff68be8154955653fd14b5d3f0c2184ea778ce0fe820b955a3e0b16f00bb78ca
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
git_helper (3.5.1
|
5
|
-
gitlab
|
6
|
-
gli
|
7
|
-
highline_wrapper
|
8
|
-
octokit
|
4
|
+
git_helper (3.5.1)
|
5
|
+
gitlab
|
6
|
+
gli
|
7
|
+
highline_wrapper
|
8
|
+
octokit
|
9
9
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
@@ -16,9 +16,9 @@ GEM
|
|
16
16
|
coderay (1.1.3)
|
17
17
|
concurrent-ruby (1.1.9)
|
18
18
|
diff-lcs (1.4.4)
|
19
|
-
faker (2.
|
19
|
+
faker (2.19.0)
|
20
20
|
i18n (>= 1.6, < 2)
|
21
|
-
faraday (1.
|
21
|
+
faraday (1.8.0)
|
22
22
|
faraday-em_http (~> 1.0)
|
23
23
|
faraday-em_synchrony (~> 1.0)
|
24
24
|
faraday-excon (~> 1.1)
|
@@ -37,7 +37,7 @@ GEM
|
|
37
37
|
faraday-net_http_persistent (1.2.0)
|
38
38
|
faraday-patron (1.0.0)
|
39
39
|
faraday-rack (1.0.0)
|
40
|
-
ffi (1.15.
|
40
|
+
ffi (1.15.4)
|
41
41
|
formatador (0.3.0)
|
42
42
|
gitlab (4.17.0)
|
43
43
|
httparty (~> 0.18)
|
@@ -60,12 +60,12 @@ GEM
|
|
60
60
|
highline (2.0.3)
|
61
61
|
highline_wrapper (1.3.0)
|
62
62
|
highline (~> 2.0)
|
63
|
-
httparty (0.
|
63
|
+
httparty (0.20.0)
|
64
64
|
mime-types (~> 3.0)
|
65
65
|
multi_xml (>= 0.5.2)
|
66
66
|
i18n (1.8.10)
|
67
67
|
concurrent-ruby (~> 1.0)
|
68
|
-
listen (3.
|
68
|
+
listen (3.7.0)
|
69
69
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
70
70
|
rb-inotify (~> 0.9, >= 0.9.10)
|
71
71
|
lumberjack (1.2.8)
|
@@ -82,7 +82,7 @@ GEM
|
|
82
82
|
octokit (4.21.0)
|
83
83
|
faraday (>= 0.9)
|
84
84
|
sawyer (~> 0.8.0, >= 0.5.3)
|
85
|
-
parallel (1.
|
85
|
+
parallel (1.21.0)
|
86
86
|
parser (3.0.2.0)
|
87
87
|
ast (~> 2.4.1)
|
88
88
|
pry (0.14.1)
|
@@ -108,16 +108,16 @@ GEM
|
|
108
108
|
diff-lcs (>= 1.2.0, < 2.0)
|
109
109
|
rspec-support (~> 3.10.0)
|
110
110
|
rspec-support (3.10.2)
|
111
|
-
rubocop (1.
|
111
|
+
rubocop (1.22.1)
|
112
112
|
parallel (~> 1.10)
|
113
113
|
parser (>= 3.0.0.0)
|
114
114
|
rainbow (>= 2.2.2, < 4.0)
|
115
115
|
regexp_parser (>= 1.8, < 3.0)
|
116
116
|
rexml
|
117
|
-
rubocop-ast (>= 1.
|
117
|
+
rubocop-ast (>= 1.12.0, < 2.0)
|
118
118
|
ruby-progressbar (~> 1.7)
|
119
119
|
unicode-display_width (>= 1.4.0, < 3.0)
|
120
|
-
rubocop-ast (1.
|
120
|
+
rubocop-ast (1.12.0)
|
121
121
|
parser (>= 3.0.1.1)
|
122
122
|
ruby-progressbar (1.11.0)
|
123
123
|
ruby2_keywords (0.0.5)
|
@@ -125,22 +125,21 @@ GEM
|
|
125
125
|
addressable (>= 2.3.5)
|
126
126
|
faraday (> 0.8, < 2.0)
|
127
127
|
shellany (0.0.1)
|
128
|
-
terminal-table (1.
|
129
|
-
unicode-display_width (~> 1.1, >= 1.1.1)
|
128
|
+
terminal-table (1.6.0)
|
130
129
|
thor (1.1.0)
|
131
|
-
unicode-display_width (1.
|
130
|
+
unicode-display_width (2.1.0)
|
132
131
|
|
133
132
|
PLATFORMS
|
134
133
|
x86_64-darwin-19
|
135
134
|
|
136
135
|
DEPENDENCIES
|
137
|
-
bundler
|
138
|
-
faker
|
136
|
+
bundler
|
137
|
+
faker
|
139
138
|
git_helper!
|
140
|
-
guard-rspec
|
141
|
-
pry
|
142
|
-
rspec
|
143
|
-
rubocop
|
139
|
+
guard-rspec
|
140
|
+
pry
|
141
|
+
rspec
|
142
|
+
rubocop
|
144
143
|
|
145
144
|
BUNDLED WITH
|
146
|
-
2.2.
|
145
|
+
2.2.29
|
data/README.md
CHANGED
@@ -115,7 +115,7 @@ git-helper clean-branches
|
|
115
115
|
|
116
116
|
### `code-request`
|
117
117
|
|
118
|
-
This command can be used to handily make new GitHub/GitLab pull/merge requests from the command-line. The command uses either the [
|
118
|
+
This command can be used to handily make new GitHub/GitLab pull/merge requests from the command-line. The command uses either the [GitHub REST API](https://docs.github.com/en/rest) or [GitLab API](https://docs.gitlab.com/ee/api/) to do this, so make sure you have a `~/.git_helper/config.yml` file set up in the home directory of your computer. For instructions on how to do that, see [Gem Usage](#gem-usage). Furthermore, this project will use [JSON](https://www.npmjs.com/package/json), [YAML](https://www.cloudbees.com/blog/yaml-tutorial-everything-you-need-get-started), and [cURL](https://developer.zendesk.com/documentation/developer-tools/getting-started/installing-and-using-curl/).
|
119
119
|
|
120
120
|
After setup is complete, you can call the command like this:
|
121
121
|
|
@@ -149,7 +149,7 @@ git-helper forget-local-commits
|
|
149
149
|
|
150
150
|
### `merge-code-request`
|
151
151
|
|
152
|
-
This command can be used to merge pull/merge requests from the command-line. The command uses either the [
|
152
|
+
This command can be used to merge pull/merge requests from the command-line. The command uses either the [GitHub REST API](https://docs.github.com/en/rest) or [GitLab API](https://docs.gitlab.com/ee/api/) to do this, so make sure you have a `~/.git_helper/config.yml` file set up in the home directory of your computer. For instructions on how to do that, see [Gem Usage](#gem-usage). Furthermore, this project will use [JSON](https://www.npmjs.com/package/json), [YAML](https://www.cloudbees.com/blog/yaml-tutorial-everything-you-need-get-started), and [cURL](https://developer.zendesk.com/documentation/developer-tools/getting-started/installing-and-using-curl/).
|
153
153
|
|
154
154
|
After setup is complete, you can call the proper command like this:
|
155
155
|
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GitHelper
|
4
|
+
class GitHubClient
|
5
|
+
def repository(repo_name)
|
6
|
+
run(repo_name.split('/').first, nil, "/repos/#{repo_name}")
|
7
|
+
end
|
8
|
+
|
9
|
+
def pull_request(repo_name, pull_request_id)
|
10
|
+
run(repo_name.split('/').first, nil, "/repos/#{repo_name}/pulls/#{pull_request_id}")
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_pull_request(repo_name, options)
|
14
|
+
opts_as_string = format_options(options)
|
15
|
+
run(
|
16
|
+
repo_name.split('/').first,
|
17
|
+
'POST',
|
18
|
+
"/repos/#{repo_name}/pulls",
|
19
|
+
opts_as_string
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
def merge_pull_request(repo_name, pull_request_id, options)
|
24
|
+
opts_as_string = format_options(options)
|
25
|
+
run(
|
26
|
+
repo_name.split('/').first,
|
27
|
+
'PUT',
|
28
|
+
"/repos/#{repo_name}/pulls/#{pull_request_id}/merge",
|
29
|
+
opts_as_string
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
private def format_options(options)
|
34
|
+
opts_as_string = ''.dup
|
35
|
+
options.each do |key, value|
|
36
|
+
next if value == ''
|
37
|
+
|
38
|
+
opts_as_string << "#{key.to_json}:#{value.to_json.gsub("'", "'\\\\''")},"
|
39
|
+
end
|
40
|
+
opts_as_string = opts_as_string.reverse.sub(',', '').reverse
|
41
|
+
opts_as_string.empty? ? '' : "{#{opts_as_string}}"
|
42
|
+
end
|
43
|
+
|
44
|
+
# rubocop:disable Layout/LineLength
|
45
|
+
private def run(username, request_type, curl_url, options = '')
|
46
|
+
OpenStruct.new(
|
47
|
+
JSON.parse(
|
48
|
+
if request_type
|
49
|
+
`curl -s -u #{username}:#{github_token} -H "Accept: application/vnd.github.v3+json" -X #{request_type} -d '#{options}' "#{github_endpoint}#{curl_url}"`
|
50
|
+
else
|
51
|
+
`curl -s -u #{username}:#{github_token} -H "Accept: application/vnd.github.v3+json" "#{github_endpoint}#{curl_url}"`
|
52
|
+
end
|
53
|
+
)
|
54
|
+
)
|
55
|
+
end
|
56
|
+
# rubocop:enable Layout/LineLength
|
57
|
+
|
58
|
+
private def github_token
|
59
|
+
git_config_reader.github_token
|
60
|
+
end
|
61
|
+
|
62
|
+
private def git_config_reader
|
63
|
+
@git_config_reader ||= GitHelper::GitConfigReader.new
|
64
|
+
end
|
65
|
+
|
66
|
+
private def github_endpoint
|
67
|
+
'https://api.github.com'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -2,8 +2,52 @@
|
|
2
2
|
|
3
3
|
module GitHelper
|
4
4
|
class GitLabClient
|
5
|
-
def
|
6
|
-
|
5
|
+
def project(project_name)
|
6
|
+
run('GET', "/projects/#{url_encode(project_name)}")
|
7
|
+
end
|
8
|
+
|
9
|
+
def merge_request(project_name, merge_request_id)
|
10
|
+
run('GET', "/projects/#{url_encode(project_name)}/merge_requests/#{merge_request_id}")
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_merge_request(project_name, options)
|
14
|
+
opts_as_string = format_options(options)
|
15
|
+
run('POST', "/projects/#{url_encode(project_name)}/merge_requests#{opts_as_string}")
|
16
|
+
end
|
17
|
+
|
18
|
+
def accept_merge_request(project_name, merge_request_id, options)
|
19
|
+
opts_as_string = format_options(options)
|
20
|
+
run(
|
21
|
+
'PUT',
|
22
|
+
"/projects/#{url_encode(project_name)}/merge_requests/#{merge_request_id}/merge#{opts_as_string}"
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
private def format_options(options)
|
27
|
+
opts_as_string = ''.dup
|
28
|
+
options.each do |key, value|
|
29
|
+
next if value == ''
|
30
|
+
|
31
|
+
opts_as_string << "#{key}=#{url_encode(value.to_s)}&"
|
32
|
+
end
|
33
|
+
opts_as_string = opts_as_string.reverse.sub('&', '').reverse
|
34
|
+
opts_as_string.empty? ? '' : "?#{opts_as_string}"
|
35
|
+
end
|
36
|
+
|
37
|
+
private def run(request_type, curl_url)
|
38
|
+
OpenStruct.new(
|
39
|
+
JSON.parse(
|
40
|
+
`curl -s -X #{request_type} -H "PRIVATE-TOKEN: #{gitlab_token}" "#{gitlab_endpoint}#{curl_url}"`
|
41
|
+
)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
private def url_encode(string)
|
46
|
+
string.b.gsub(/[^a-zA-Z0-9_\-.~]/n) { |m| format('%%%<val>02X', val: m.unpack1('C')) }
|
47
|
+
end
|
48
|
+
|
49
|
+
private def gitlab_token
|
50
|
+
git_config_reader.gitlab_token
|
7
51
|
end
|
8
52
|
|
9
53
|
private def git_config_reader
|
@@ -22,23 +22,28 @@ module GitHelper
|
|
22
22
|
target_branch: base_branch,
|
23
23
|
squash: squash_merge_request,
|
24
24
|
remove_source_branch: remove_source_branch,
|
25
|
-
description: new_mr_body
|
25
|
+
description: new_mr_body,
|
26
|
+
title: new_mr_title
|
26
27
|
}
|
27
28
|
|
28
29
|
puts "Creating merge request: #{new_mr_title}"
|
29
|
-
mr = gitlab_client.create_merge_request(local_project,
|
30
|
+
mr = gitlab_client.create_merge_request(local_project, options)
|
30
31
|
|
31
|
-
if mr.diff_refs.
|
32
|
+
raise StandardError, mr.message if mr.diff_refs.nil? || mr.web_url.nil?
|
33
|
+
|
34
|
+
if mr.diff_refs['base_sha'] == mr.diff_refs['head_sha']
|
32
35
|
puts "Merge request was created, but no commits have been pushed to GitLab: #{mr.web_url}"
|
33
36
|
else
|
34
37
|
puts "Merge request successfully created: #{mr.web_url}"
|
35
38
|
end
|
36
|
-
rescue Gitlab::Error::Conflict
|
37
|
-
puts 'Could not create merge request:'
|
38
|
-
puts ' A merge request already exists for this branch'
|
39
39
|
rescue StandardError => e
|
40
40
|
puts 'Could not create merge request:'
|
41
|
-
|
41
|
+
|
42
|
+
if e.message.include?('Another open merge request already exists')
|
43
|
+
puts ' A merge request already exists for this branch'
|
44
|
+
else
|
45
|
+
puts " #{e.message}"
|
46
|
+
end
|
42
47
|
end
|
43
48
|
# rubocop:enable Metrics/AbcSize
|
44
49
|
# rubocop:enable Metrics/MethodLength
|
@@ -61,21 +66,19 @@ module GitHelper
|
|
61
66
|
merge = gitlab_client.accept_merge_request(local_project, mr_id, options)
|
62
67
|
end
|
63
68
|
|
64
|
-
if merge.merge_commit_sha.nil?
|
65
|
-
|
66
|
-
|
67
|
-
else
|
68
|
-
puts "Merge request successfully merged: #{merge.merge_commit_sha}"
|
69
|
-
end
|
70
|
-
rescue Gitlab::Error::MethodNotAllowed
|
71
|
-
puts 'Could not merge merge request:'
|
72
|
-
puts ' The merge request is not mergeable'
|
73
|
-
rescue Gitlab::Error::NotFound
|
74
|
-
puts 'Could not merge merge request:'
|
75
|
-
puts " Could not a locate a merge request to merge with ID #{mr_id}"
|
69
|
+
raise StandardError, merge.message if merge.merge_commit_sha.nil?
|
70
|
+
|
71
|
+
puts "Merge request successfully merged: #{merge.merge_commit_sha}"
|
76
72
|
rescue StandardError => e
|
77
73
|
puts 'Could not merge merge request:'
|
78
|
-
|
74
|
+
|
75
|
+
if e.message.include?('404 Not found')
|
76
|
+
puts ' Could not a locate a merge request to merge with given ID'
|
77
|
+
elsif e.message.include?('405 Method Not Allowed')
|
78
|
+
puts ' The merge request is not mergeable'
|
79
|
+
else
|
80
|
+
puts " #{e.message}"
|
81
|
+
end
|
79
82
|
end
|
80
83
|
# rubocop:enable Metrics/AbcSize
|
81
84
|
# rubocop:enable Metrics/MethodLength
|
@@ -121,7 +124,7 @@ module GitHelper
|
|
121
124
|
end
|
122
125
|
|
123
126
|
private def mr_id
|
124
|
-
@mr_id ||= highline.ask('Merge Request ID?')
|
127
|
+
@mr_id ||= highline.ask('Merge Request ID?', { required: true })
|
125
128
|
end
|
126
129
|
|
127
130
|
private def squash_merge_request
|
@@ -154,7 +157,7 @@ module GitHelper
|
|
154
157
|
end
|
155
158
|
|
156
159
|
private def gitlab_client
|
157
|
-
@gitlab_client ||= GitHelper::GitLabClient.new
|
160
|
+
@gitlab_client ||= GitHelper::GitLabClient.new
|
158
161
|
end
|
159
162
|
end
|
160
163
|
end
|
@@ -17,29 +17,29 @@ module GitHelper
|
|
17
17
|
@base_branch = options[:base_branch]
|
18
18
|
@new_pr_title = options[:new_title]
|
19
19
|
|
20
|
-
|
20
|
+
options = {
|
21
|
+
head: local_branch,
|
22
|
+
base: base_branch,
|
23
|
+
body: new_pr_body,
|
24
|
+
title: new_pr_title
|
25
|
+
}
|
21
26
|
|
22
27
|
puts "Creating pull request: #{new_pr_title}"
|
23
|
-
pr =
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
new_pr_title,
|
28
|
-
new_pr_body
|
29
|
-
)
|
28
|
+
pr = github_client.create_pull_request(local_repo, options)
|
29
|
+
|
30
|
+
raise StandardError, pr.errors.first['message'] if pr.html_url.nil?
|
31
|
+
|
30
32
|
puts "Pull request successfully created: #{pr.html_url}"
|
31
|
-
rescue
|
33
|
+
rescue StandardError => e
|
32
34
|
puts 'Could not create pull request:'
|
33
|
-
|
35
|
+
|
36
|
+
if e.message.include?('A pull request already exists')
|
34
37
|
puts ' A pull request already exists for this branch'
|
35
38
|
elsif e.message.include?('No commits between')
|
36
39
|
puts ' No commits have been pushed to GitHub'
|
37
40
|
else
|
38
|
-
puts e.message
|
41
|
+
puts " #{e.message}"
|
39
42
|
end
|
40
|
-
rescue StandardError => e
|
41
|
-
puts 'Could not create pull request:'
|
42
|
-
puts e.message
|
43
43
|
end
|
44
44
|
# rubocop:enable Metrics/AbcSize
|
45
45
|
# rubocop:enable Metrics/MethodLength
|
@@ -48,39 +48,26 @@ module GitHelper
|
|
48
48
|
# rubocop:disable Metrics/AbcSize
|
49
49
|
def merge
|
50
50
|
pr_id
|
51
|
-
|
51
|
+
|
52
|
+
options = {
|
53
|
+
merge_method: merge_method,
|
54
|
+
commit_title: existing_pr.title
|
55
|
+
}
|
52
56
|
|
53
57
|
puts "Merging pull request: #{pr_id}"
|
54
|
-
merge =
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
{ merge_method: merge_method }
|
59
|
-
)
|
58
|
+
merge = github_client.merge_pull_request(local_repo, pr_id, options)
|
59
|
+
|
60
|
+
raise StandardError, merge.message if merge.sha.nil?
|
61
|
+
|
60
62
|
puts "Pull request successfully merged: #{merge.sha}"
|
61
|
-
rescue
|
62
|
-
puts 'Could not merge pull request:'
|
63
|
-
puts " Could not a locate a pull request to merge with ID #{pr_id}"
|
64
|
-
rescue Octokit::MethodNotAllowed => e
|
63
|
+
rescue StandardError => e
|
65
64
|
puts 'Could not merge pull request:'
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
puts ' The base branch has been modified'
|
70
|
-
elsif e.message.include?('405 - Pull Request is not mergeable')
|
71
|
-
puts ' The pull request is not mergeable'
|
72
|
-
elsif e.message.include?('405 - Rebase merges are not allowed on this repository')
|
73
|
-
puts ' Rebase merges are not allowed on this repository'
|
74
|
-
elsif e.message.include?('405 - Merge commits are not allowed on this repository')
|
75
|
-
puts ' Merge commits are not allowed on this repository'
|
76
|
-
elsif e.message.include?('405 - Squash commits are not allowed on this repository')
|
77
|
-
puts ' Squash merges are not allowed on this repository'
|
65
|
+
|
66
|
+
if e.message.include?('Not found')
|
67
|
+
puts ' Could not a locate a pull request to merge with given ID'
|
78
68
|
else
|
79
|
-
puts e.message
|
69
|
+
puts " #{e.message}"
|
80
70
|
end
|
81
|
-
rescue StandardError => e
|
82
|
-
puts 'Could not merge pull request:'
|
83
|
-
puts e.message
|
84
71
|
end
|
85
72
|
# rubocop:enable Metrics/AbcSize
|
86
73
|
# rubocop:enable Metrics/MethodLength
|
@@ -126,7 +113,7 @@ module GitHelper
|
|
126
113
|
end
|
127
114
|
|
128
115
|
private def pr_id
|
129
|
-
@pr_id ||= highline.ask('Pull Request ID?')
|
116
|
+
@pr_id ||= highline.ask('Pull Request ID?', { required: true })
|
130
117
|
end
|
131
118
|
|
132
119
|
private def merge_method
|
@@ -149,15 +136,15 @@ module GitHelper
|
|
149
136
|
end
|
150
137
|
|
151
138
|
private def existing_project
|
152
|
-
@existing_project ||=
|
139
|
+
@existing_project ||= github_client.repository(local_repo)
|
153
140
|
end
|
154
141
|
|
155
142
|
private def existing_pr
|
156
|
-
@existing_pr ||=
|
143
|
+
@existing_pr ||= github_client.pull_request(local_repo, pr_id)
|
157
144
|
end
|
158
145
|
|
159
|
-
private def
|
160
|
-
@
|
146
|
+
private def github_client
|
147
|
+
@github_client ||= GitHelper::GitHubClient.new
|
161
148
|
end
|
162
149
|
end
|
163
150
|
end
|
data/lib/git_helper/version.rb
CHANGED
data/lib/git_helper.rb
CHANGED
@@ -250,7 +250,7 @@ describe GitHelper::CodeRequest do
|
|
250
250
|
end
|
251
251
|
|
252
252
|
describe '#local_code' do
|
253
|
-
it 'should call the
|
253
|
+
it 'should call the GitHub client' do
|
254
254
|
expect(GitHelper::LocalCode).to receive(:new).and_return(local_code)
|
255
255
|
subject.send(:local_code)
|
256
256
|
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'git_helper'
|
5
|
+
|
6
|
+
describe GitHelper::GitHubClient do
|
7
|
+
let(:git_config_reader) { double(:git_config_reader, github_token: :token) }
|
8
|
+
|
9
|
+
subject { GitHelper::GitHubClient.new }
|
10
|
+
|
11
|
+
before do
|
12
|
+
allow(GitHelper::GitConfigReader).to receive(:new).and_return(git_config_reader)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#repository' do
|
16
|
+
it 'should call to run a query' do
|
17
|
+
expect(subject).to receive(:run)
|
18
|
+
subject.repository(Faker::Lorem.word)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return the run command's answer" do
|
22
|
+
expect(subject).to receive(:run).and_return(:command_complete)
|
23
|
+
expect(subject.repository(Faker::Lorem.word)).to eq(:command_complete)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#pull_request' do
|
28
|
+
it 'should call to run a query' do
|
29
|
+
expect(subject).to receive(:run)
|
30
|
+
subject.pull_request(Faker::Lorem.word, Faker::Number.number)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return the run command's answer" do
|
34
|
+
expect(subject).to receive(:run).and_return(:command_complete)
|
35
|
+
expect(subject.pull_request(Faker::Lorem.word, Faker::Number.number)).to eq(:command_complete)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#create_pull_request' do
|
40
|
+
it 'should call to run a query' do
|
41
|
+
expect(subject).to receive(:run)
|
42
|
+
subject.create_pull_request(Faker::Lorem.word, {})
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should generate a string list of options' do
|
46
|
+
expect(subject).to receive(:format_options).with({})
|
47
|
+
subject.create_pull_request(Faker::Lorem.word, {})
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should return the run command's answer" do
|
51
|
+
expect(subject).to receive(:run).and_return(:command_complete)
|
52
|
+
expect(subject.create_pull_request(Faker::Lorem.word, {})).to eq(:command_complete)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '#merge_pull_request' do
|
57
|
+
it 'should call to run a query' do
|
58
|
+
expect(subject).to receive(:run)
|
59
|
+
subject.merge_pull_request(Faker::Lorem.word, Faker::Number.number, {})
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should generate a string list of options' do
|
63
|
+
expect(subject).to receive(:format_options).with({})
|
64
|
+
subject.merge_pull_request(Faker::Lorem.word, Faker::Number.number, {})
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should return the run command's answer" do
|
68
|
+
expect(subject).to receive(:run).and_return(:command_complete)
|
69
|
+
expect(subject.merge_pull_request(Faker::Lorem.word, Faker::Number.number, {})).to eq(:command_complete)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#format_options' do
|
74
|
+
it 'will make a list of hash options into a JSON parsed chunk of key/value pairs as string' do
|
75
|
+
options = {
|
76
|
+
key1: 'value1',
|
77
|
+
key2: true,
|
78
|
+
key3: '',
|
79
|
+
key4: false,
|
80
|
+
key5: 'value5'
|
81
|
+
}
|
82
|
+
# rubocop:disable Style/StringLiterals
|
83
|
+
result = "{\"key1\":\"value1\",\"key2\":true,\"key4\":false,\"key5\":\"value5\"}"
|
84
|
+
# rubocop:enable Style/StringLiterals
|
85
|
+
expect(subject.send(:format_options, options)).to eq(result)
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'will return an empty string if an empty hash is given' do
|
89
|
+
expect(subject.send(:format_options, {})).to eq('')
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'will return an empty string if all values are empty strings' do
|
93
|
+
options = {
|
94
|
+
key1: '',
|
95
|
+
key2: '',
|
96
|
+
key3: ''
|
97
|
+
}
|
98
|
+
expect(subject.send(:format_options, options)).to eq('')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe '#run' do
|
103
|
+
it 'should call CURL' do
|
104
|
+
expect(subject).to receive(:`).and_return('{}')
|
105
|
+
subject.send(:run, Faker::Lorem.word, 'GET', "/projects/#{Faker::Lorem.word}")
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'should use JSON to parse the response' do
|
109
|
+
expect(JSON).to receive(:parse).and_return({})
|
110
|
+
subject.send(:run, Faker::Lorem.word, 'GET', "/projects/#{Faker::Lorem.word}")
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'should use OpenStruct to turn the hash into an object' do
|
114
|
+
expect(OpenStruct).to receive(:new).and_return(OpenStruct.new)
|
115
|
+
subject.send(:run, Faker::Lorem.word, 'GET', "/projects/#{Faker::Lorem.word}")
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe '#github_token' do
|
120
|
+
it 'should return a token' do
|
121
|
+
expect(subject.send(:github_token)).to eq(:token)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
describe '#git_config_reader' do
|
126
|
+
it 'should make a new git config reader' do
|
127
|
+
expect(GitHelper::GitConfigReader).to receive(:new)
|
128
|
+
subject.send(:git_config_reader)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
@@ -12,10 +12,126 @@ describe GitHelper::GitLabClient do
|
|
12
12
|
allow(GitHelper::GitConfigReader).to receive(:new).and_return(git_config_reader)
|
13
13
|
end
|
14
14
|
|
15
|
-
describe '#
|
16
|
-
it 'should call
|
17
|
-
expect(
|
18
|
-
subject.
|
15
|
+
describe '#project' do
|
16
|
+
it 'should call to run a query' do
|
17
|
+
expect(subject).to receive(:run)
|
18
|
+
subject.project(Faker::Lorem.word)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return the run command's answer" do
|
22
|
+
expect(subject).to receive(:run).and_return(:command_complete)
|
23
|
+
expect(subject.project(Faker::Lorem.word)).to eq(:command_complete)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#merge_request' do
|
28
|
+
it 'should call to run a query' do
|
29
|
+
expect(subject).to receive(:run)
|
30
|
+
subject.merge_request(Faker::Lorem.word, Faker::Number.number)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should return the run command's answer" do
|
34
|
+
expect(subject).to receive(:run).and_return(:command_complete)
|
35
|
+
expect(subject.merge_request(Faker::Lorem.word, Faker::Number.number)).to eq(:command_complete)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe '#create_merge_request' do
|
40
|
+
it 'should call to run a query' do
|
41
|
+
expect(subject).to receive(:run)
|
42
|
+
subject.create_merge_request(Faker::Lorem.word, {})
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should generate a string list of options' do
|
46
|
+
expect(subject).to receive(:format_options).with({})
|
47
|
+
subject.create_merge_request(Faker::Lorem.word, {})
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should return the run command's answer" do
|
51
|
+
expect(subject).to receive(:run).and_return(:command_complete)
|
52
|
+
expect(subject.create_merge_request(Faker::Lorem.word, {})).to eq(:command_complete)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '#accept_merge_request' do
|
57
|
+
it 'should call to run a query' do
|
58
|
+
expect(subject).to receive(:run)
|
59
|
+
subject.accept_merge_request(Faker::Lorem.word, Faker::Number.number, {})
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should generate a string list of options' do
|
63
|
+
expect(subject).to receive(:format_options).with({})
|
64
|
+
subject.accept_merge_request(Faker::Lorem.word, Faker::Number.number, {})
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should return the run command's answer" do
|
68
|
+
expect(subject).to receive(:run).and_return(:command_complete)
|
69
|
+
expect(subject.accept_merge_request(Faker::Lorem.word, Faker::Number.number, {})).to eq(:command_complete)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#format_options' do
|
74
|
+
it 'will make a list of hash options into a URL string' do
|
75
|
+
options = {
|
76
|
+
key1: 'value1',
|
77
|
+
key2: true,
|
78
|
+
key3: '',
|
79
|
+
key4: false,
|
80
|
+
key5: 'value5'
|
81
|
+
}
|
82
|
+
result = '?key1=value1&key2=true&key4=false&key5=value5'
|
83
|
+
expect(subject.send(:format_options, options)).to eq(result)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'will return an empty string if an empty hash is given' do
|
87
|
+
expect(subject.send(:format_options, {})).to eq('')
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'will return an empty string if all values are empty strings' do
|
91
|
+
options = {
|
92
|
+
key1: '',
|
93
|
+
key2: '',
|
94
|
+
key3: ''
|
95
|
+
}
|
96
|
+
expect(subject.send(:format_options, options)).to eq('')
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe '#run' do
|
101
|
+
it 'should call CURL' do
|
102
|
+
expect(subject).to receive(:`).and_return('{}')
|
103
|
+
subject.send(:run, 'GET', "/projects/#{Faker::Lorem.word}")
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should use JSON to parse the response' do
|
107
|
+
expect(JSON).to receive(:parse).and_return({})
|
108
|
+
subject.send(:run, 'GET', "/projects/#{Faker::Lorem.word}")
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'should use OpenStruct to turn the hash into an object' do
|
112
|
+
expect(OpenStruct).to receive(:new).and_return(OpenStruct.new)
|
113
|
+
subject.send(:run, 'GET', "/projects/#{Faker::Lorem.word}")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
describe '#url_encode' do
|
118
|
+
let(:group_name) { Faker::Lorem.word }
|
119
|
+
let(:project_name) { Faker::Lorem.word }
|
120
|
+
|
121
|
+
it 'should return the same string as passed in but with no spaces' do
|
122
|
+
expect(subject.send(:url_encode, "#{group_name}/#{project_name}")).to eq("#{group_name}%2F#{project_name}")
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'should never include a space or a slash' do
|
126
|
+
resp = subject.send(:url_encode, "#{group_name} #{Faker::Lorem.word}/#{project_name}")
|
127
|
+
expect(resp).not_to include(' ')
|
128
|
+
expect(resp).not_to include('/')
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
describe '#gitlab_token' do
|
133
|
+
it 'should return a token' do
|
134
|
+
expect(subject.send(:gitlab_token)).to eq(:token)
|
19
135
|
end
|
20
136
|
end
|
21
137
|
|
@@ -6,13 +6,12 @@ require 'git_helper'
|
|
6
6
|
describe GitHelper::GitLabMergeRequest do
|
7
7
|
let(:local_code) { double(:local_code, read_template: Faker::Lorem.word) }
|
8
8
|
let(:highline_wrapper) { double(:highline_wrapper) }
|
9
|
-
let(:
|
10
|
-
let(:gitlab_client) { double(:gitlab_client, client: gitlab_client_client) }
|
11
|
-
let(:diff_refs) { double(:diff_refs, base_sha: :base, head_sha: :head) }
|
9
|
+
let(:gitlab_client) { double(:gitlab_client) }
|
12
10
|
|
13
11
|
let(:merge_request) do
|
14
12
|
double(:merge_request,
|
15
|
-
|
13
|
+
message: Faker::Lorem.sentence,
|
14
|
+
diff_refs: { base_sha: Faker::Lorem.word, head_sha: Faker::Lorem.word },
|
16
15
|
web_url: Faker::Internet.url,
|
17
16
|
merge_commit_sha: Faker::Internet.password)
|
18
17
|
end
|
@@ -38,7 +37,7 @@ describe GitHelper::GitLabMergeRequest do
|
|
38
37
|
allow(subject).to receive(:squash_merge_request).and_return(true)
|
39
38
|
allow(subject).to receive(:remove_source_branch).and_return(false)
|
40
39
|
allow(subject).to receive(:new_mr_body).and_return('')
|
41
|
-
expect(
|
40
|
+
expect(gitlab_client).to receive(:create_merge_request).and_return(merge_request)
|
42
41
|
subject.create({ base_branch: Faker::Lorem.word, new_title: Faker::Lorem.word })
|
43
42
|
end
|
44
43
|
|
@@ -46,7 +45,7 @@ describe GitHelper::GitLabMergeRequest do
|
|
46
45
|
expect(subject).to receive(:squash_merge_request).and_return(true)
|
47
46
|
expect(subject).to receive(:remove_source_branch).and_return(false)
|
48
47
|
expect(subject).to receive(:new_mr_body).and_return('')
|
49
|
-
allow(
|
48
|
+
allow(gitlab_client).to receive(:create_merge_request).and_return(merge_request)
|
50
49
|
subject.create({ base_branch: Faker::Lorem.word, new_title: Faker::Lorem.word })
|
51
50
|
end
|
52
51
|
|
@@ -54,7 +53,7 @@ describe GitHelper::GitLabMergeRequest do
|
|
54
53
|
allow(subject).to receive(:squash_merge_request).and_return(true)
|
55
54
|
allow(subject).to receive(:remove_source_branch).and_return(false)
|
56
55
|
allow(subject).to receive(:new_mr_body).and_return('')
|
57
|
-
allow(
|
56
|
+
allow(gitlab_client).to receive(:create_merge_request).and_raise(StandardError)
|
58
57
|
expect(subject.create({ base_branch: Faker::Lorem.word, new_title: Faker::Lorem.word })).to eq(nil)
|
59
58
|
end
|
60
59
|
end
|
@@ -63,28 +62,28 @@ describe GitHelper::GitLabMergeRequest do
|
|
63
62
|
it 'should call the gitlab client to merge' do
|
64
63
|
allow(subject).to receive(:existing_mr).and_return(double(should_remove_source_branch: true, squash: false, title: 'title'))
|
65
64
|
allow(subject).to receive(:mr_id).and_return(Faker::Number.number)
|
66
|
-
expect(
|
65
|
+
expect(gitlab_client).to receive(:accept_merge_request).and_return(merge_request)
|
67
66
|
subject.merge
|
68
67
|
end
|
69
68
|
|
70
69
|
it 'should call various other methods' do
|
71
70
|
expect(subject).to receive(:existing_mr).and_return(double(should_remove_source_branch: true, squash: false, title: 'title')).at_least(:once)
|
72
71
|
expect(subject).to receive(:mr_id).and_return(Faker::Number.number).at_least(:once)
|
73
|
-
allow(
|
72
|
+
allow(gitlab_client).to receive(:accept_merge_request).and_return(merge_request)
|
74
73
|
subject.merge
|
75
74
|
end
|
76
75
|
|
77
76
|
it 'should catch the raised error if the merge does not work' do
|
78
77
|
allow(subject).to receive(:existing_mr).and_return(double(should_remove_source_branch: true, squash: false, title: 'title'))
|
79
78
|
allow(subject).to receive(:mr_id).and_return(Faker::Number.number)
|
80
|
-
allow(
|
79
|
+
allow(gitlab_client).to receive(:accept_merge_request).and_raise(StandardError)
|
81
80
|
expect(subject.merge).to eq(nil)
|
82
81
|
end
|
83
82
|
|
84
83
|
it 'should try to merge multiple times if the first merge errors' do
|
85
84
|
allow(subject).to receive(:existing_mr).and_return(double(should_remove_source_branch: true, squash: false, title: 'title'))
|
86
85
|
allow(subject).to receive(:mr_id).and_return(Faker::Number.number)
|
87
|
-
expect(
|
86
|
+
expect(gitlab_client).to receive(:accept_merge_request).and_return(double(merge_commit_sha: nil, merge_error: Faker::Lorem.word, message: Faker::Lorem.sentence)).exactly(2).times
|
88
87
|
expect(subject.merge).to eq(nil)
|
89
88
|
end
|
90
89
|
end
|
@@ -257,7 +256,7 @@ describe GitHelper::GitLabMergeRequest do
|
|
257
256
|
|
258
257
|
describe '#existing_project' do
|
259
258
|
it 'should call the gitlab client' do
|
260
|
-
expect(
|
259
|
+
expect(gitlab_client).to receive(:project).and_return(:project)
|
261
260
|
subject.send(:existing_project)
|
262
261
|
end
|
263
262
|
end
|
@@ -265,7 +264,7 @@ describe GitHelper::GitLabMergeRequest do
|
|
265
264
|
describe '#existing_mr' do
|
266
265
|
it 'should call the gitlab client' do
|
267
266
|
allow(highline_wrapper).to receive(:ask).and_return(Faker::Number.number)
|
268
|
-
expect(
|
267
|
+
expect(gitlab_client).to receive(:merge_request).and_return(:merge_request)
|
269
268
|
subject.send(:existing_mr)
|
270
269
|
end
|
271
270
|
end
|
@@ -6,8 +6,7 @@ require 'git_helper'
|
|
6
6
|
describe GitHelper::GitHubPullRequest do
|
7
7
|
let(:local_code) { double(:local_code, read_template: Faker::Lorem.word) }
|
8
8
|
let(:highline_wrapper) { double(:highline_wrapper) }
|
9
|
-
let(:
|
10
|
-
let(:octokit_client) { double(:octokit_client, client: octokit_client_client) }
|
9
|
+
let(:github_client) { double(:github_client) }
|
11
10
|
|
12
11
|
let(:options) do
|
13
12
|
{
|
@@ -21,36 +20,36 @@ describe GitHelper::GitHubPullRequest do
|
|
21
20
|
subject { GitHelper::GitHubPullRequest.new(options) }
|
22
21
|
|
23
22
|
before do
|
24
|
-
allow(GitHelper::
|
23
|
+
allow(GitHelper::GitHubClient).to receive(:new).and_return(github_client)
|
25
24
|
allow(subject).to receive(:puts)
|
26
25
|
end
|
27
26
|
|
28
27
|
describe '#create' do
|
29
|
-
it 'should call the
|
28
|
+
it 'should call the GitHub client to create' do
|
30
29
|
allow(subject).to receive(:new_pr_body).and_return('')
|
31
|
-
expect(
|
30
|
+
expect(github_client).to receive(:create_pull_request).and_return(double(html_url: Faker::Internet.url))
|
32
31
|
subject.create({ base_branch: Faker::Lorem.word, new_title: Faker::Lorem.word })
|
33
32
|
end
|
34
33
|
|
35
34
|
it 'should call various other methods' do
|
36
35
|
expect(subject).to receive(:new_pr_body).and_return('').at_least(:once)
|
37
|
-
allow(
|
36
|
+
allow(github_client).to receive(:create_pull_request).and_return(double(html_url: Faker::Internet.url))
|
38
37
|
subject.create({ base_branch: Faker::Lorem.word, new_title: Faker::Lorem.word })
|
39
38
|
end
|
40
39
|
|
41
40
|
it 'should catch the raised error if the creation does not work' do
|
42
41
|
allow(subject).to receive(:new_pr_body).and_return('')
|
43
|
-
allow(
|
42
|
+
allow(github_client).to receive(:create_pull_request).and_raise(StandardError)
|
44
43
|
expect(subject.create({ base_branch: Faker::Lorem.word, new_title: Faker::Lorem.word })).to eq(nil)
|
45
44
|
end
|
46
45
|
end
|
47
46
|
|
48
47
|
describe '#merge' do
|
49
|
-
it 'should call the
|
48
|
+
it 'should call the GitHub client to merge' do
|
50
49
|
allow(subject).to receive(:existing_pr).and_return(double(title: Faker::Lorem.word))
|
51
50
|
allow(subject).to receive(:merge_method).and_return('rebase')
|
52
51
|
allow(subject).to receive(:pr_id).and_return(Faker::Number.number)
|
53
|
-
expect(
|
52
|
+
expect(github_client).to receive(:merge_pull_request).and_return(double(sha: Faker::Internet.password))
|
54
53
|
subject.merge
|
55
54
|
end
|
56
55
|
|
@@ -58,7 +57,7 @@ describe GitHelper::GitHubPullRequest do
|
|
58
57
|
expect(subject).to receive(:existing_pr).and_return(double(title: Faker::Lorem.word)).at_least(:once)
|
59
58
|
expect(subject).to receive(:merge_method).and_return('rebase').at_least(:once)
|
60
59
|
expect(subject).to receive(:pr_id).and_return(Faker::Number.number).at_least(:once)
|
61
|
-
allow(
|
60
|
+
allow(github_client).to receive(:merge_pull_request).and_return(double(sha: Faker::Internet.password))
|
62
61
|
subject.merge
|
63
62
|
end
|
64
63
|
|
@@ -66,7 +65,7 @@ describe GitHelper::GitHubPullRequest do
|
|
66
65
|
allow(subject).to receive(:existing_pr).and_return(double(title: Faker::Lorem.word))
|
67
66
|
allow(subject).to receive(:merge_method).and_return('rebase')
|
68
67
|
allow(subject).to receive(:pr_id).and_return(Faker::Number.number)
|
69
|
-
allow(
|
68
|
+
allow(github_client).to receive(:merge_pull_request).and_raise(StandardError)
|
70
69
|
expect(subject.merge).to eq(nil)
|
71
70
|
end
|
72
71
|
end
|
@@ -233,24 +232,24 @@ describe GitHelper::GitHubPullRequest do
|
|
233
232
|
end
|
234
233
|
|
235
234
|
describe '#existing_project' do
|
236
|
-
it 'should call the
|
237
|
-
expect(
|
235
|
+
it 'should call the GitHub client' do
|
236
|
+
expect(github_client).to receive(:repository).and_return(:repository)
|
238
237
|
subject.send(:existing_project)
|
239
238
|
end
|
240
239
|
end
|
241
240
|
|
242
241
|
describe '#existing_pr' do
|
243
|
-
it 'should call the
|
242
|
+
it 'should call the GitHub client' do
|
244
243
|
allow(highline_wrapper).to receive(:ask).and_return(Faker::Number.number)
|
245
|
-
expect(
|
244
|
+
expect(github_client).to receive(:pull_request).and_return(:pull_request)
|
246
245
|
subject.send(:existing_pr)
|
247
246
|
end
|
248
247
|
end
|
249
248
|
|
250
|
-
describe '#
|
251
|
-
it 'should call the
|
252
|
-
expect(GitHelper::
|
253
|
-
subject.send(:
|
249
|
+
describe '#github_client' do
|
250
|
+
it 'should call the GitHub client' do
|
251
|
+
expect(GitHelper::GitHubClient).to receive(:new).and_return(github_client)
|
252
|
+
subject.send(:github_client)
|
254
253
|
end
|
255
254
|
end
|
256
255
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emma Sax
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: gitlab
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '4.16'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '4.16'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: gli
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,20 +38,6 @@ dependencies:
|
|
52
38
|
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
40
|
version: '1.1'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: octokit
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '4.18'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '4.18'
|
69
41
|
- !ruby/object:Gem::Dependency
|
70
42
|
name: bundler
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -173,11 +145,11 @@ files:
|
|
173
145
|
- lib/git_helper/empty_commit.rb
|
174
146
|
- lib/git_helper/forget_local_commits.rb
|
175
147
|
- lib/git_helper/git_config_reader.rb
|
148
|
+
- lib/git_helper/github_client.rb
|
176
149
|
- lib/git_helper/gitlab_client.rb
|
177
150
|
- lib/git_helper/local_code.rb
|
178
151
|
- lib/git_helper/merge_request.rb
|
179
152
|
- lib/git_helper/new_branch.rb
|
180
|
-
- lib/git_helper/octokit_client.rb
|
181
153
|
- lib/git_helper/pull_request.rb
|
182
154
|
- lib/git_helper/setup.rb
|
183
155
|
- lib/git_helper/version.rb
|
@@ -189,11 +161,11 @@ files:
|
|
189
161
|
- spec/git_helper/empty_commit_spec.rb
|
190
162
|
- spec/git_helper/forget_local_commits_spec.rb
|
191
163
|
- spec/git_helper/git_config_reader_spec.rb
|
164
|
+
- spec/git_helper/github_client_spec.rb
|
192
165
|
- spec/git_helper/gitlab_client_spec.rb
|
193
166
|
- spec/git_helper/local_code_spec.rb
|
194
167
|
- spec/git_helper/merge_request_spec.rb
|
195
168
|
- spec/git_helper/new_branch_spec.rb
|
196
|
-
- spec/git_helper/octokit_client_spec.rb
|
197
169
|
- spec/git_helper/pull_request_spec.rb
|
198
170
|
- spec/git_helper/setup_spec.rb
|
199
171
|
- spec/spec_helper.rb
|
@@ -229,10 +201,10 @@ test_files:
|
|
229
201
|
- spec/git_helper/empty_commit_spec.rb
|
230
202
|
- spec/git_helper/forget_local_commits_spec.rb
|
231
203
|
- spec/git_helper/git_config_reader_spec.rb
|
204
|
+
- spec/git_helper/github_client_spec.rb
|
232
205
|
- spec/git_helper/gitlab_client_spec.rb
|
233
206
|
- spec/git_helper/local_code_spec.rb
|
234
207
|
- spec/git_helper/merge_request_spec.rb
|
235
208
|
- spec/git_helper/new_branch_spec.rb
|
236
|
-
- spec/git_helper/octokit_client_spec.rb
|
237
209
|
- spec/git_helper/pull_request_spec.rb
|
238
210
|
- spec/git_helper/setup_spec.rb
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module GitHelper
|
4
|
-
class OctokitClient
|
5
|
-
def client
|
6
|
-
Octokit::Client.new(access_token: git_config_reader.github_token)
|
7
|
-
end
|
8
|
-
|
9
|
-
private def git_config_reader
|
10
|
-
@git_config_reader ||= GitHelper::GitConfigReader.new
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
require 'git_helper'
|
5
|
-
|
6
|
-
describe GitHelper::OctokitClient do
|
7
|
-
let(:git_config_reader) { double(:git_config_reader, github_token: :token) }
|
8
|
-
|
9
|
-
subject { GitHelper::OctokitClient.new }
|
10
|
-
|
11
|
-
before do
|
12
|
-
allow(GitHelper::GitConfigReader).to receive(:new).and_return(git_config_reader)
|
13
|
-
end
|
14
|
-
|
15
|
-
describe '#client' do
|
16
|
-
it 'should call the GitLab client to make a new client' do
|
17
|
-
expect(Octokit::Client).to receive(:new)
|
18
|
-
subject.client
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe '#git_config_reader' do
|
23
|
-
it 'should make a new git config reader' do
|
24
|
-
expect(GitHelper::GitConfigReader).to receive(:new)
|
25
|
-
subject.send(:git_config_reader)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|