git_helper 3.2.0 → 3.3.2

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.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +131 -0
  4. data/Guardfile +3 -1
  5. data/README.md +11 -6
  6. data/Rakefile +2 -0
  7. data/bin/git-helper +25 -13
  8. data/lib/git_helper.rb +5 -1
  9. data/lib/git_helper/change_remote.rb +11 -3
  10. data/lib/git_helper/checkout_default.rb +2 -0
  11. data/lib/git_helper/clean_branches.rb +2 -0
  12. data/lib/git_helper/code_request.rb +29 -15
  13. data/lib/git_helper/empty_commit.rb +2 -0
  14. data/lib/git_helper/forget_local_commits.rb +2 -0
  15. data/lib/git_helper/git_config_reader.rb +12 -6
  16. data/lib/git_helper/gitlab_client.rb +2 -0
  17. data/lib/git_helper/highline_cli.rb +15 -69
  18. data/lib/git_helper/local_code.rb +18 -8
  19. data/lib/git_helper/merge_request.rb +88 -68
  20. data/lib/git_helper/new_branch.rb +3 -1
  21. data/lib/git_helper/octokit_client.rb +2 -0
  22. data/lib/git_helper/pull_request.rb +95 -64
  23. data/lib/git_helper/setup.rb +116 -0
  24. data/lib/git_helper/version.rb +3 -1
  25. data/spec/git_helper/change_remote_spec.rb +19 -19
  26. data/spec/git_helper/checkout_default_spec.rb +2 -0
  27. data/spec/git_helper/clean_branches_spec.rb +2 -0
  28. data/spec/git_helper/code_request_spec.rb +27 -24
  29. data/spec/git_helper/empty_commit_spec.rb +2 -0
  30. data/spec/git_helper/forget_local_commits_spec.rb +2 -0
  31. data/spec/git_helper/git_config_reader_spec.rb +32 -4
  32. data/spec/git_helper/gitlab_client_spec.rb +2 -0
  33. data/spec/git_helper/highline_cli_spec.rb +21 -185
  34. data/spec/git_helper/local_code_spec.rb +2 -0
  35. data/spec/git_helper/merge_request_spec.rb +22 -21
  36. data/spec/git_helper/new_branch_spec.rb +4 -2
  37. data/spec/git_helper/octokit_client_spec.rb +2 -0
  38. data/spec/git_helper/pull_request_spec.rb +17 -15
  39. data/spec/git_helper/setup_spec.rb +180 -0
  40. data/spec/spec_helper.rb +3 -1
  41. metadata +22 -5
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'git_helper'
3
5
 
4
6
  describe GitHelper::NewBranch do
5
7
  let(:new_branch_name) { 'new-branch-name' }
6
8
  let(:local_code) { double(:local_code, new_branch: :commit) }
7
- let(:cli) { double(:highline_cli, new_branch_name: new_branch_name) }
9
+ let(:cli) { double(:highline_cli, ask: new_branch_name) }
8
10
 
9
11
  subject { GitHelper::NewBranch.new }
10
12
 
@@ -31,7 +33,7 @@ describe GitHelper::NewBranch do
31
33
  end
32
34
 
33
35
  it 'should ask the highline cli what the new branch name should be' do
34
- expect(cli).to receive(:new_branch_name)
36
+ expect(cli).to receive(:ask)
35
37
  subject.execute
36
38
  end
37
39
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'git_helper'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'git_helper'
3
5
 
@@ -27,19 +29,19 @@ describe GitHelper::GitHubPullRequest do
27
29
  it 'should call the octokit client to create' do
28
30
  allow(subject).to receive(:new_pr_body).and_return('')
29
31
  expect(octokit_client_client).to receive(:create_pull_request).and_return(double(html_url: Faker::Internet.url))
30
- subject.create({base_branch: Faker::Lorem.word, new_title: Faker::Lorem.word})
32
+ subject.create({ base_branch: Faker::Lorem.word, new_title: Faker::Lorem.word })
31
33
  end
32
34
 
33
35
  it 'should call various other methods' do
34
36
  expect(subject).to receive(:new_pr_body).and_return('').at_least(:once)
35
37
  allow(octokit_client_client).to receive(:create_pull_request).and_return(double(html_url: Faker::Internet.url))
36
- subject.create({base_branch: Faker::Lorem.word, new_title: Faker::Lorem.word})
38
+ subject.create({ base_branch: Faker::Lorem.word, new_title: Faker::Lorem.word })
37
39
  end
38
40
 
39
41
  it 'should catch the raised error if the creation does not work' do
40
42
  allow(subject).to receive(:new_pr_body).and_return('')
41
43
  allow(octokit_client_client).to receive(:create_pull_request).and_raise(StandardError)
42
- expect(subject.create({base_branch: Faker::Lorem.word, new_title: Faker::Lorem.word})).to eq(nil)
44
+ expect(subject.create({ base_branch: Faker::Lorem.word, new_title: Faker::Lorem.word })).to eq(nil)
43
45
  end
44
46
  end
45
47
 
@@ -101,19 +103,19 @@ describe GitHelper::GitHubPullRequest do
101
103
 
102
104
  it 'should call the CLI to ask about a single template' do
103
105
  allow(subject).to receive(:pr_template_options).and_return([template])
104
- expect(highline_cli).to receive(:apply_template?).and_return(true)
106
+ expect(highline_cli).to receive(:ask_yes_no).and_return(true)
105
107
  subject.send(:template_name_to_apply)
106
108
  end
107
109
 
108
110
  it 'should return the single template if the user says yes' do
109
111
  allow(subject).to receive(:pr_template_options).and_return([template])
110
- allow(highline_cli).to receive(:apply_template?).and_return(true)
112
+ allow(highline_cli).to receive(:ask_yes_no).and_return(true)
111
113
  expect(subject.send(:template_name_to_apply)).to eq(template)
112
114
  end
113
115
 
114
116
  it 'should return nil if the user says no' do
115
117
  allow(subject).to receive(:pr_template_options).and_return([template])
116
- allow(highline_cli).to receive(:apply_template?).and_return(false)
118
+ allow(highline_cli).to receive(:ask_yes_no).and_return(false)
117
119
  expect(subject.send(:template_name_to_apply)).to eq(nil)
118
120
  end
119
121
  end
@@ -124,19 +126,19 @@ describe GitHelper::GitHubPullRequest do
124
126
 
125
127
  it 'should call the CLI to ask which of multiple templates to apply' do
126
128
  allow(subject).to receive(:pr_template_options).and_return([template1, template2])
127
- expect(highline_cli).to receive(:template_to_apply).and_return(template1)
129
+ expect(highline_cli).to receive(:ask_options).and_return(template1)
128
130
  subject.send(:template_name_to_apply)
129
131
  end
130
132
 
131
133
  it 'should return the answer template if the user says yes' do
132
134
  allow(subject).to receive(:pr_template_options).and_return([template1, template2])
133
- allow(highline_cli).to receive(:template_to_apply).and_return(template1)
135
+ allow(highline_cli).to receive(:ask_options).and_return(template1)
134
136
  expect(subject.send(:template_name_to_apply)).to eq(template1)
135
137
  end
136
138
 
137
139
  it 'should return nil if the user says no' do
138
140
  allow(subject).to receive(:pr_template_options).and_return([template1, template2])
139
- allow(highline_cli).to receive(:template_to_apply).and_return('None')
141
+ allow(highline_cli).to receive(:ask_options).and_return('None')
140
142
  expect(subject.send(:template_name_to_apply)).to eq(nil)
141
143
  end
142
144
  end
@@ -151,13 +153,13 @@ describe GitHelper::GitHubPullRequest do
151
153
 
152
154
  describe '#pr_id' do
153
155
  it 'should ask the CLI for the code request ID' do
154
- expect(highline_cli).to receive(:code_request_id).and_return(Faker::Number.number)
156
+ expect(highline_cli).to receive(:ask).and_return(Faker::Number.number)
155
157
  subject.send(:pr_id)
156
158
  end
157
159
 
158
160
  it 'should equal an integer' do
159
161
  pr_id = Faker::Number.number
160
- expect(highline_cli).to receive(:code_request_id).and_return(pr_id)
162
+ expect(highline_cli).to receive(:ask).and_return(pr_id)
161
163
  expect(subject.send(:pr_id)).to eq(pr_id)
162
164
  end
163
165
  end
@@ -167,16 +169,16 @@ describe GitHelper::GitHubPullRequest do
167
169
 
168
170
  before do
169
171
  allow(subject).to receive(:existing_project).and_return(project)
170
- allow(highline_cli).to receive(:merge_method)
172
+ allow(highline_cli).to receive(:ask_options)
171
173
  end
172
174
 
173
175
  it 'should ask the CLI for the merge_method' do
174
- expect(highline_cli).to receive(:merge_method).and_return('merge')
176
+ expect(highline_cli).to receive(:ask_options).and_return('merge')
175
177
  subject.send(:merge_method)
176
178
  end
177
179
 
178
180
  it 'should be a string' do
179
- allow(highline_cli).to receive(:merge_method).and_return('merge')
181
+ allow(highline_cli).to receive(:ask_options).and_return('merge')
180
182
  expect(subject.send(:merge_method)).to be_a(String)
181
183
  end
182
184
 
@@ -239,7 +241,7 @@ describe GitHelper::GitHubPullRequest do
239
241
 
240
242
  describe '#existing_pr' do
241
243
  it 'should call the octokit client' do
242
- allow(highline_cli).to receive(:code_request_id).and_return(Faker::Number.number)
244
+ allow(highline_cli).to receive(:ask).and_return(Faker::Number.number)
243
245
  expect(octokit_client_client).to receive(:pull_request).and_return(:pull_request)
244
246
  subject.send(:existing_pr)
245
247
  end
@@ -0,0 +1,180 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'git_helper'
5
+
6
+ describe GitHelper::Setup do
7
+ let(:response) { double(:response, readline: true, to_s: Faker::Lorem.sentence) }
8
+ let(:highline_cli) { double(:highline_cli, ask: response, ask_yes_no: true) }
9
+
10
+ before do
11
+ allow(GitHelper::HighlineCli).to receive(:new).and_return(highline_cli)
12
+ allow(subject).to receive(:puts)
13
+ end
14
+
15
+ after do
16
+ GitHelper::Setup.instance_variable_set('@highline', nil)
17
+ end
18
+
19
+ describe '#execute' do
20
+ it 'should ask a question if the config file exists' do
21
+ allow(File).to receive(:exists?).and_return(true)
22
+ expect(highline_cli).to receive(:ask_yes_no).and_return(true)
23
+ allow(subject).to receive(:create_or_update_config_file).and_return(true)
24
+ allow(subject).to receive(:create_or_update_plugin_files)
25
+ subject.execute
26
+ end
27
+
28
+ it 'should call to create or update the config file' do
29
+ allow(File).to receive(:exists?).and_return(true)
30
+ allow(highline_cli).to receive(:ask_yes_no).and_return(true)
31
+ expect(subject).to receive(:create_or_update_config_file).and_return(true)
32
+ allow(subject).to receive(:create_or_update_plugin_files)
33
+ subject.execute
34
+ end
35
+
36
+ it 'should skip if the user opts not to continue' do
37
+ allow(File).to receive(:exists?).and_return(true)
38
+ allow(subject).to receive(:config_file_exists?).and_return(true)
39
+ allow(highline_cli).to receive(:ask_yes_no).and_return(false)
40
+ expect(subject).not_to receive(:create_or_update_config_file)
41
+ expect(subject).not_to receive(:create_or_update_plugin_files)
42
+ subject.execute
43
+ end
44
+ end
45
+
46
+ describe '#create_or_update_config_file' do
47
+ it 'should generate the file based on the answers to the questions' do
48
+ expect(subject).to receive(:generate_file_contents)
49
+ allow(File).to receive(:open).and_return(nil)
50
+ subject.send(:create_or_update_config_file)
51
+ end
52
+
53
+ it 'should open the file for writing' do
54
+ allow(subject).to receive(:generate_file_contents)
55
+ expect(File).to receive(:open).and_return(nil)
56
+ subject.send(:create_or_update_config_file)
57
+ end
58
+ end
59
+
60
+ describe '#config_file_exists?' do
61
+ it 'should return true if the file exists' do
62
+ allow(File).to receive(:exist?).and_return(true)
63
+ expect(subject.send(:config_file_exists?)).to eq(true)
64
+ end
65
+
66
+ it 'should return false if the file does not exist' do
67
+ allow(File).to receive(:exist?).and_return(false)
68
+ expect(subject.send(:config_file_exists?)).to eq(false)
69
+ end
70
+ end
71
+
72
+ describe '#ask_question' do
73
+ it 'should use highline to ask a question' do
74
+ expect(highline_cli).to receive(:ask).and_return(Faker::Lorem.word)
75
+ subject.send(:ask_question, Faker::Lorem.sentence)
76
+ end
77
+
78
+ it 'should recurse if the highline client gets an empty string' do
79
+ allow(highline_cli).to receive(:ask).and_return('', Faker::Lorem.word)
80
+ expect(subject).to receive(:ask_question).at_least(:twice).and_call_original
81
+ subject.send(:ask_question, Faker::Lorem.sentence)
82
+ end
83
+
84
+ it 'should return the answer if it is given' do
85
+ answer = Faker::Lorem.sentence
86
+ allow(highline_cli).to receive(:ask).and_return(answer)
87
+ expect(subject.send(:ask_question, Faker::Lorem.sentence)).to be(answer)
88
+ end
89
+ end
90
+
91
+ describe '#generate_file_contents' do
92
+ it 'should ask two yes/no questions' do
93
+ expect(highline_cli).to receive(:ask_yes_no).exactly(2).times.and_return(false)
94
+ subject.send(:generate_file_contents)
95
+ end
96
+
97
+ it 'should ask two additional questions for each time the user says yes' do
98
+ allow(highline_cli).to receive(:ask_yes_no).exactly(2).times.and_return(true, false)
99
+ expect(subject).to receive(:ask_question).exactly(2).times.and_return(Faker::Lorem.word)
100
+ subject.send(:generate_file_contents)
101
+ end
102
+
103
+ it 'should ask four additional questions for each time the user says yes' do
104
+ allow(highline_cli).to receive(:ask_yes_no).exactly(2).times.and_return(true)
105
+ expect(subject).to receive(:ask_question).exactly(4).times.and_return(Faker::Lorem.word)
106
+ subject.send(:generate_file_contents)
107
+ end
108
+
109
+ it 'should return a string no matter what' do
110
+ allow(highline_cli).to receive(:ask_yes_no).exactly(2).times.and_return(true)
111
+ allow(subject).to receive(:ask_question).exactly(4).times.and_return(Faker::Lorem.word)
112
+ expect(subject.send(:generate_file_contents)).to be_a(String)
113
+ end
114
+ end
115
+
116
+ describe '#create_or_update_plugin_files' do
117
+ let(:plugins) do
118
+ [
119
+ {
120
+ name: 'plugin-file-one'
121
+ },
122
+ {
123
+ name: 'plugin-file-two'
124
+ }
125
+ ]
126
+ end
127
+
128
+ let(:plugins_json) do
129
+ "[
130
+ {
131
+ \"name\": \"plugin-file-one\"
132
+ },
133
+ {
134
+ \"name\": \"plugin-file-two\"
135
+ }
136
+ ]"
137
+ end
138
+
139
+ before do
140
+ allow_any_instance_of(GitHelper::GitConfigReader).to receive(:github_token).and_return(Faker::Internet.password)
141
+ allow_any_instance_of(GitHelper::GitConfigReader).to receive(:github_user).and_return(Faker::Internet.username)
142
+ end
143
+
144
+ it 'should create the directory if it does not exist' do
145
+ allow(File).to receive(:exist?).and_return(false)
146
+ allow(File).to receive(:open).and_return(nil)
147
+ expect(Dir).to receive(:mkdir)
148
+ allow(subject).to receive(:`).and_return(plugins_json)
149
+ allow(JSON).to receive(:parse).and_return(plugins)
150
+ subject.send(:create_or_update_plugin_files)
151
+ end
152
+
153
+ it 'should not create the directory if it already exists' do
154
+ allow(File).to receive(:exist?).and_return(true)
155
+ allow(File).to receive(:open).and_return(nil)
156
+ expect(Dir).not_to receive(:mkdir)
157
+ allow(subject).to receive(:`).and_return(plugins_json)
158
+ allow(JSON).to receive(:parse).and_return(plugins)
159
+ subject.send(:create_or_update_plugin_files)
160
+ end
161
+
162
+ it 'should curl the GitHub API' do
163
+ allow(Dir).to receive(:mkdir).and_return(true)
164
+ allow(File).to receive(:exists?).and_return(true)
165
+ allow(File).to receive(:open).and_return(nil)
166
+ allow(subject).to receive(:`).and_return(plugins_json)
167
+ expect(JSON).to receive(:parse).with(plugins_json).and_return(plugins)
168
+ subject.send(:create_or_update_plugin_files)
169
+ end
170
+
171
+ it 'should go through the loop for each plugin' do
172
+ allow(Dir).to receive(:mkdir).and_return(true)
173
+ allow(File).to receive(:exists?).and_return(true)
174
+ allow(File).to receive(:open).and_return(nil)
175
+ expect(subject).to receive(:`).exactly(3).times
176
+ allow(JSON).to receive(:parse).and_return(plugins)
177
+ subject.send(:create_or_update_plugin_files)
178
+ end
179
+ end
180
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'faker'
2
4
 
3
5
  # This file was generated by the `rspec --init` command. Conventionally, all
@@ -33,7 +35,7 @@ RSpec.configure do |config|
33
35
  expectations.include_chain_clauses_in_custom_matcher_descriptions = true
34
36
  end
35
37
 
36
- config.filter_run :focus => true
38
+ config.filter_run focus: true
37
39
  config.run_all_when_everything_filtered = true
38
40
 
39
41
  # rspec-mocks config goes here. You can use an alternate test double
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.2.0
4
+ version: 3.3.2
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-01-06 00:00:00.000000000 Z
11
+ date: 2021-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gitlab
@@ -136,16 +136,30 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '3.9'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  description: A set of GitHub and GitLab workflow scripts to provide a smoother development
140
154
  process for your git projects.
141
155
  email:
142
- - emma.sax4@gmail.com
143
156
  executables:
144
157
  - git-helper
145
158
  extensions: []
146
159
  extra_rdoc_files: []
147
160
  files:
148
161
  - Gemfile
162
+ - Gemfile.lock
149
163
  - Guardfile
150
164
  - LICENSE
151
165
  - README.md
@@ -166,6 +180,7 @@ files:
166
180
  - lib/git_helper/new_branch.rb
167
181
  - lib/git_helper/octokit_client.rb
168
182
  - lib/git_helper/pull_request.rb
183
+ - lib/git_helper/setup.rb
169
184
  - lib/git_helper/version.rb
170
185
  - plugins.zip
171
186
  - spec/git_helper/change_remote_spec.rb
@@ -182,8 +197,9 @@ files:
182
197
  - spec/git_helper/new_branch_spec.rb
183
198
  - spec/git_helper/octokit_client_spec.rb
184
199
  - spec/git_helper/pull_request_spec.rb
200
+ - spec/git_helper/setup_spec.rb
185
201
  - spec/spec_helper.rb
186
- homepage: https://github.com/emmasax4/git_helper
202
+ homepage: https://github.com/emmahsax/git_helper
187
203
  licenses:
188
204
  - MIT
189
205
  metadata: {}
@@ -195,7 +211,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
211
  requirements:
196
212
  - - ">="
197
213
  - !ruby/object:Gem::Version
198
- version: '0'
214
+ version: '2.5'
199
215
  required_rubygems_version: !ruby/object:Gem::Requirement
200
216
  requirements:
201
217
  - - ">="
@@ -222,3 +238,4 @@ test_files:
222
238
  - spec/git_helper/new_branch_spec.rb
223
239
  - spec/git_helper/octokit_client_spec.rb
224
240
  - spec/git_helper/pull_request_spec.rb
241
+ - spec/git_helper/setup_spec.rb