git_helper 3.1.3 → 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +19 -18
- data/README.md +11 -6
- data/bin/git-helper +8 -1
- data/lib/git_helper/change_remote.rb +1 -1
- data/lib/git_helper/code_request.rb +6 -5
- data/lib/git_helper/git_config_reader.rb +11 -3
- data/lib/git_helper/highline_cli.rb +12 -68
- data/lib/git_helper/merge_request.rb +5 -5
- data/lib/git_helper/new_branch.rb +1 -1
- data/lib/git_helper/pull_request.rb +4 -4
- data/lib/git_helper/setup.rb +96 -0
- data/lib/git_helper/version.rb +1 -1
- data/spec/git_helper/change_remote_spec.rb +2 -2
- data/spec/git_helper/code_request_spec.rb +25 -24
- data/spec/git_helper/git_config_reader_spec.rb +28 -2
- data/spec/git_helper/highline_cli_spec.rb +18 -184
- data/spec/git_helper/merge_request_spec.rb +14 -14
- data/spec/git_helper/new_branch_spec.rb +2 -2
- data/spec/git_helper/pull_request_spec.rb +12 -12
- data/spec/git_helper/setup_spec.rb +175 -0
- metadata +19 -17
@@ -4,7 +4,7 @@ require 'git_helper'
|
|
4
4
|
describe GitHelper::NewBranch do
|
5
5
|
let(:new_branch_name) { 'new-branch-name' }
|
6
6
|
let(:local_code) { double(:local_code, new_branch: :commit) }
|
7
|
-
let(:cli) { double(:highline_cli,
|
7
|
+
let(:cli) { double(:highline_cli, ask: new_branch_name) }
|
8
8
|
|
9
9
|
subject { GitHelper::NewBranch.new }
|
10
10
|
|
@@ -31,7 +31,7 @@ describe GitHelper::NewBranch do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it 'should ask the highline cli what the new branch name should be' do
|
34
|
-
expect(cli).to receive(:
|
34
|
+
expect(cli).to receive(:ask)
|
35
35
|
subject.execute
|
36
36
|
end
|
37
37
|
end
|
@@ -101,19 +101,19 @@ describe GitHelper::GitHubPullRequest do
|
|
101
101
|
|
102
102
|
it 'should call the CLI to ask about a single template' do
|
103
103
|
allow(subject).to receive(:pr_template_options).and_return([template])
|
104
|
-
expect(highline_cli).to receive(:
|
104
|
+
expect(highline_cli).to receive(:ask_yes_no).and_return(true)
|
105
105
|
subject.send(:template_name_to_apply)
|
106
106
|
end
|
107
107
|
|
108
108
|
it 'should return the single template if the user says yes' do
|
109
109
|
allow(subject).to receive(:pr_template_options).and_return([template])
|
110
|
-
allow(highline_cli).to receive(:
|
110
|
+
allow(highline_cli).to receive(:ask_yes_no).and_return(true)
|
111
111
|
expect(subject.send(:template_name_to_apply)).to eq(template)
|
112
112
|
end
|
113
113
|
|
114
114
|
it 'should return nil if the user says no' do
|
115
115
|
allow(subject).to receive(:pr_template_options).and_return([template])
|
116
|
-
allow(highline_cli).to receive(:
|
116
|
+
allow(highline_cli).to receive(:ask_yes_no).and_return(false)
|
117
117
|
expect(subject.send(:template_name_to_apply)).to eq(nil)
|
118
118
|
end
|
119
119
|
end
|
@@ -124,19 +124,19 @@ describe GitHelper::GitHubPullRequest do
|
|
124
124
|
|
125
125
|
it 'should call the CLI to ask which of multiple templates to apply' do
|
126
126
|
allow(subject).to receive(:pr_template_options).and_return([template1, template2])
|
127
|
-
expect(highline_cli).to receive(:
|
127
|
+
expect(highline_cli).to receive(:ask_options).and_return(template1)
|
128
128
|
subject.send(:template_name_to_apply)
|
129
129
|
end
|
130
130
|
|
131
131
|
it 'should return the answer template if the user says yes' do
|
132
132
|
allow(subject).to receive(:pr_template_options).and_return([template1, template2])
|
133
|
-
allow(highline_cli).to receive(:
|
133
|
+
allow(highline_cli).to receive(:ask_options).and_return(template1)
|
134
134
|
expect(subject.send(:template_name_to_apply)).to eq(template1)
|
135
135
|
end
|
136
136
|
|
137
137
|
it 'should return nil if the user says no' do
|
138
138
|
allow(subject).to receive(:pr_template_options).and_return([template1, template2])
|
139
|
-
allow(highline_cli).to receive(:
|
139
|
+
allow(highline_cli).to receive(:ask_options).and_return('None')
|
140
140
|
expect(subject.send(:template_name_to_apply)).to eq(nil)
|
141
141
|
end
|
142
142
|
end
|
@@ -151,13 +151,13 @@ describe GitHelper::GitHubPullRequest do
|
|
151
151
|
|
152
152
|
describe '#pr_id' do
|
153
153
|
it 'should ask the CLI for the code request ID' do
|
154
|
-
expect(highline_cli).to receive(:
|
154
|
+
expect(highline_cli).to receive(:ask).and_return(Faker::Number.number)
|
155
155
|
subject.send(:pr_id)
|
156
156
|
end
|
157
157
|
|
158
158
|
it 'should equal an integer' do
|
159
159
|
pr_id = Faker::Number.number
|
160
|
-
expect(highline_cli).to receive(:
|
160
|
+
expect(highline_cli).to receive(:ask).and_return(pr_id)
|
161
161
|
expect(subject.send(:pr_id)).to eq(pr_id)
|
162
162
|
end
|
163
163
|
end
|
@@ -167,16 +167,16 @@ describe GitHelper::GitHubPullRequest do
|
|
167
167
|
|
168
168
|
before do
|
169
169
|
allow(subject).to receive(:existing_project).and_return(project)
|
170
|
-
allow(highline_cli).to receive(:
|
170
|
+
allow(highline_cli).to receive(:ask_options)
|
171
171
|
end
|
172
172
|
|
173
173
|
it 'should ask the CLI for the merge_method' do
|
174
|
-
expect(highline_cli).to receive(:
|
174
|
+
expect(highline_cli).to receive(:ask_options).and_return('merge')
|
175
175
|
subject.send(:merge_method)
|
176
176
|
end
|
177
177
|
|
178
178
|
it 'should be a string' do
|
179
|
-
allow(highline_cli).to receive(:
|
179
|
+
allow(highline_cli).to receive(:ask_options).and_return('merge')
|
180
180
|
expect(subject.send(:merge_method)).to be_a(String)
|
181
181
|
end
|
182
182
|
|
@@ -239,7 +239,7 @@ describe GitHelper::GitHubPullRequest do
|
|
239
239
|
|
240
240
|
describe '#existing_pr' do
|
241
241
|
it 'should call the octokit client' do
|
242
|
-
allow(highline_cli).to receive(:
|
242
|
+
allow(highline_cli).to receive(:ask).and_return(Faker::Number.number)
|
243
243
|
expect(octokit_client_client).to receive(:pull_request).and_return(:pull_request)
|
244
244
|
subject.send(:existing_pr)
|
245
245
|
end
|
@@ -0,0 +1,175 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'git_helper'
|
3
|
+
|
4
|
+
describe GitHelper::Setup do
|
5
|
+
let(:response) { double(:response, readline: true, to_s: Faker::Lorem.sentence) }
|
6
|
+
let(:highline_cli) { double(:highline_cli, ask: response, ask_yes_no: true) }
|
7
|
+
|
8
|
+
before do
|
9
|
+
allow(GitHelper::HighlineCli).to receive(:new).and_return(highline_cli)
|
10
|
+
allow(subject).to receive(:puts)
|
11
|
+
end
|
12
|
+
|
13
|
+
after do
|
14
|
+
GitHelper::Setup.instance_variable_set("@highline", nil)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#execute' do
|
18
|
+
it 'should ask a question if the config file exists' do
|
19
|
+
allow(File).to receive(:exists?).and_return(true)
|
20
|
+
expect(highline_cli).to receive(:ask_yes_no).and_return(true)
|
21
|
+
allow(subject).to receive(:create_or_update_config_file).and_return(true)
|
22
|
+
allow(subject).to receive(:create_or_update_plugin_files)
|
23
|
+
subject.execute
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should call to create or update the config file' do
|
27
|
+
allow(File).to receive(:exists?).and_return(true)
|
28
|
+
allow(highline_cli).to receive(:ask_yes_no).and_return(true)
|
29
|
+
expect(subject).to receive(:create_or_update_config_file).and_return(true)
|
30
|
+
allow(subject).to receive(:create_or_update_plugin_files)
|
31
|
+
subject.execute
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should skip if the user opts not to continue' do
|
35
|
+
allow(File).to receive(:exists?).and_return(true)
|
36
|
+
allow(highline_cli).to receive(:ask_yes_no).and_return(false)
|
37
|
+
expect(subject).not_to receive(:create_or_update_config_file)
|
38
|
+
expect(subject).not_to receive(:create_or_update_plugin_files)
|
39
|
+
subject.execute
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#create_or_update_config_file' do
|
44
|
+
it 'should generate the file based on the answers to the questions' do
|
45
|
+
expect(subject).to receive(:generate_file_contents)
|
46
|
+
allow(File).to receive(:open).and_return(nil)
|
47
|
+
subject.send(:create_or_update_config_file)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should open the file for writing' do
|
51
|
+
allow(subject).to receive(:generate_file_contents)
|
52
|
+
expect(File).to receive(:open).and_return(nil)
|
53
|
+
subject.send(:create_or_update_config_file)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#config_file_exists?' do
|
58
|
+
it 'should return true if the file exists' do
|
59
|
+
allow(File).to receive(:exists?).and_return(true)
|
60
|
+
expect(subject.send(:config_file_exists?)).to eq(true)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'should return false if the file does not exist' do
|
64
|
+
allow(File).to receive(:exists?).and_return(false)
|
65
|
+
expect(subject.send(:config_file_exists?)).to eq(false)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe '#ask_question' do
|
70
|
+
it 'should use highline to ask a question' do
|
71
|
+
expect(highline_cli).to receive(:ask).and_return(Faker::Lorem.word)
|
72
|
+
subject.send(:ask_question, Faker::Lorem.sentence)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'should recurse if the highline client gets an empty string' do
|
76
|
+
allow(highline_cli).to receive(:ask).and_return('', Faker::Lorem.word)
|
77
|
+
expect(subject).to receive(:ask_question).at_least(:twice).and_call_original
|
78
|
+
subject.send(:ask_question, Faker::Lorem.sentence)
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should return the answer if it is given' do
|
82
|
+
answer = Faker::Lorem.sentence
|
83
|
+
allow(highline_cli).to receive(:ask).and_return(answer)
|
84
|
+
expect(subject.send(:ask_question, Faker::Lorem.sentence)).to be(answer)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#generate_file_contents' do
|
89
|
+
it 'should ask two yes/no questions' do
|
90
|
+
expect(highline_cli).to receive(:ask_yes_no).exactly(2).times.and_return(false)
|
91
|
+
subject.send(:generate_file_contents)
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'should ask two additional questions for each time the user says yes' do
|
95
|
+
allow(highline_cli).to receive(:ask_yes_no).exactly(2).times.and_return(true, false)
|
96
|
+
expect(subject).to receive(:ask_question).exactly(2).times.and_return(Faker::Lorem.word)
|
97
|
+
subject.send(:generate_file_contents)
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'should ask four additional questions for each time the user says yes' do
|
101
|
+
allow(highline_cli).to receive(:ask_yes_no).exactly(2).times.and_return(true)
|
102
|
+
expect(subject).to receive(:ask_question).exactly(4).times.and_return(Faker::Lorem.word)
|
103
|
+
subject.send(:generate_file_contents)
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'should return a string no matter what' do
|
107
|
+
allow(highline_cli).to receive(:ask_yes_no).exactly(2).times.and_return(true)
|
108
|
+
allow(subject).to receive(:ask_question).exactly(4).times.and_return(Faker::Lorem.word)
|
109
|
+
expect(subject.send(:generate_file_contents)).to be_a(String)
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe '#create_or_update_plugin_files' do
|
114
|
+
let(:plugins) do
|
115
|
+
[
|
116
|
+
{
|
117
|
+
'name': 'plugin-file-one'
|
118
|
+
},
|
119
|
+
{
|
120
|
+
'name': 'plugin-file-two'
|
121
|
+
}
|
122
|
+
]
|
123
|
+
end
|
124
|
+
|
125
|
+
let(:plugins_json) do
|
126
|
+
"[
|
127
|
+
{
|
128
|
+
\"name\": \"plugin-file-one\"
|
129
|
+
},
|
130
|
+
{
|
131
|
+
\"name\": \"plugin-file-two\"
|
132
|
+
}
|
133
|
+
]"
|
134
|
+
end
|
135
|
+
|
136
|
+
before do
|
137
|
+
allow_any_instance_of(GitHelper::GitConfigReader).to receive(:github_token).and_return(Faker::Internet.password)
|
138
|
+
allow_any_instance_of(GitHelper::GitConfigReader).to receive(:github_user).and_return(Faker::Internet.username)
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'should create the directory if it does not exist' do
|
142
|
+
allow(File).to receive(:exists?).and_return(false)
|
143
|
+
allow(File).to receive(:open).and_return(nil)
|
144
|
+
expect(Dir).to receive(:mkdir)
|
145
|
+
allow(subject).to receive(:`).and_return(plugins_json)
|
146
|
+
allow(JSON).to receive(:parse).and_return(plugins)
|
147
|
+
subject.send(:create_or_update_plugin_files)
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'should not create the directory if it already exists' do
|
151
|
+
allow(File).to receive(:exists?).and_return(true)
|
152
|
+
allow(File).to receive(:open).and_return(nil)
|
153
|
+
expect(Dir).not_to receive(:mkdir)
|
154
|
+
allow(subject).to receive(:`).and_return(plugins_json)
|
155
|
+
allow(JSON).to receive(:parse).and_return(plugins)
|
156
|
+
subject.send(:create_or_update_plugin_files)
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'should curl the GitHub API' do
|
160
|
+
allow(File).to receive(:exists?).and_return(true)
|
161
|
+
allow(File).to receive(:open).and_return(nil)
|
162
|
+
allow(subject).to receive(:`).and_return(plugins_json)
|
163
|
+
expect(JSON).to receive(:parse).with(plugins_json).and_return(plugins)
|
164
|
+
subject.send(:create_or_update_plugin_files)
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'should go through the loop for each plugin' do
|
168
|
+
allow(File).to receive(:exists?).and_return(true)
|
169
|
+
allow(File).to receive(:open).and_return(nil)
|
170
|
+
expect(subject).to receive(:`).exactly(3).times
|
171
|
+
allow(JSON).to receive(:parse).and_return(plugins)
|
172
|
+
subject.send(:create_or_update_plugin_files)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1
|
4
|
+
version: 3.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emma Sax
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gitlab
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: faker
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '2.15'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '2.15'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: guard-rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -139,7 +139,6 @@ dependencies:
|
|
139
139
|
description: A set of GitHub and GitLab workflow scripts to provide a smoother development
|
140
140
|
process for your git projects.
|
141
141
|
email:
|
142
|
-
- emma.sax4@gmail.com
|
143
142
|
executables:
|
144
143
|
- git-helper
|
145
144
|
extensions: []
|
@@ -167,6 +166,7 @@ files:
|
|
167
166
|
- lib/git_helper/new_branch.rb
|
168
167
|
- lib/git_helper/octokit_client.rb
|
169
168
|
- lib/git_helper/pull_request.rb
|
169
|
+
- lib/git_helper/setup.rb
|
170
170
|
- lib/git_helper/version.rb
|
171
171
|
- plugins.zip
|
172
172
|
- spec/git_helper/change_remote_spec.rb
|
@@ -183,8 +183,9 @@ files:
|
|
183
183
|
- spec/git_helper/new_branch_spec.rb
|
184
184
|
- spec/git_helper/octokit_client_spec.rb
|
185
185
|
- spec/git_helper/pull_request_spec.rb
|
186
|
+
- spec/git_helper/setup_spec.rb
|
186
187
|
- spec/spec_helper.rb
|
187
|
-
homepage: https://github.com/
|
188
|
+
homepage: https://github.com/emmahsax/git_helper
|
188
189
|
licenses:
|
189
190
|
- MIT
|
190
191
|
metadata: {}
|
@@ -203,23 +204,24 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
203
204
|
- !ruby/object:Gem::Version
|
204
205
|
version: '0'
|
205
206
|
requirements: []
|
206
|
-
rubygems_version: 3.
|
207
|
+
rubygems_version: 3.2.3
|
207
208
|
signing_key:
|
208
209
|
specification_version: 4
|
209
210
|
summary: A set of GitHub and GitLab workflow scripts.
|
210
211
|
test_files:
|
211
212
|
- spec/spec_helper.rb
|
212
|
-
- spec/git_helper/octokit_client_spec.rb
|
213
|
-
- spec/git_helper/new_branch_spec.rb
|
214
|
-
- spec/git_helper/forget_local_commits_spec.rb
|
215
|
-
- spec/git_helper/clean_branches_spec.rb
|
216
213
|
- spec/git_helper/change_remote_spec.rb
|
217
214
|
- spec/git_helper/checkout_default_spec.rb
|
218
|
-
- spec/git_helper/
|
219
|
-
- spec/git_helper/gitlab_client_spec.rb
|
215
|
+
- spec/git_helper/clean_branches_spec.rb
|
220
216
|
- spec/git_helper/code_request_spec.rb
|
221
217
|
- spec/git_helper/empty_commit_spec.rb
|
222
|
-
- spec/git_helper/
|
218
|
+
- spec/git_helper/forget_local_commits_spec.rb
|
223
219
|
- spec/git_helper/git_config_reader_spec.rb
|
224
|
-
- spec/git_helper/
|
220
|
+
- spec/git_helper/gitlab_client_spec.rb
|
221
|
+
- spec/git_helper/highline_cli_spec.rb
|
225
222
|
- spec/git_helper/local_code_spec.rb
|
223
|
+
- spec/git_helper/merge_request_spec.rb
|
224
|
+
- spec/git_helper/new_branch_spec.rb
|
225
|
+
- spec/git_helper/octokit_client_spec.rb
|
226
|
+
- spec/git_helper/pull_request_spec.rb
|
227
|
+
- spec/git_helper/setup_spec.rb
|