git_helper 1.2.0 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +17 -13
  3. data/README.md +27 -33
  4. data/Rakefile +1 -37
  5. data/bin/git-helper +10 -28
  6. data/lib/git_helper.rb +3 -5
  7. data/lib/git_helper/change_remote.rb +53 -40
  8. data/lib/git_helper/checkout_default.rb +1 -1
  9. data/lib/git_helper/clean_branches.rb +1 -4
  10. data/lib/git_helper/code_request.rb +95 -0
  11. data/lib/git_helper/empty_commit.rb +1 -1
  12. data/lib/git_helper/forget_local_commits.rb +7 -0
  13. data/lib/git_helper/gitlab_client.rb +0 -1
  14. data/lib/git_helper/highline_cli.rb +72 -6
  15. data/lib/git_helper/local_code.rb +124 -0
  16. data/lib/git_helper/merge_request.rb +57 -126
  17. data/lib/git_helper/new_branch.rb +2 -11
  18. data/lib/git_helper/octokit_client.rb +0 -1
  19. data/lib/git_helper/pull_request.rb +45 -110
  20. data/lib/git_helper/version.rb +1 -1
  21. data/spec/git_helper/change_remote_spec.rb +173 -0
  22. data/spec/git_helper/checkout_default_spec.rb +19 -0
  23. data/spec/git_helper/clean_branches_spec.rb +19 -0
  24. data/spec/git_helper/code_request_spec.rb +259 -0
  25. data/spec/git_helper/empty_commit_spec.rb +19 -0
  26. data/spec/git_helper/forget_local_commits_spec.rb +19 -0
  27. data/spec/git_helper/git_config_reader_spec.rb +60 -0
  28. data/spec/git_helper/gitlab_client_spec.rb +26 -0
  29. data/spec/git_helper/highline_cli_spec.rb +215 -0
  30. data/spec/git_helper/local_code_spec.rb +231 -0
  31. data/spec/git_helper/merge_request_spec.rb +234 -0
  32. data/spec/git_helper/new_branch_spec.rb +44 -0
  33. data/spec/git_helper/octokit_client_spec.rb +26 -0
  34. data/spec/git_helper/pull_request_spec.rb +246 -0
  35. data/spec/spec_helper.rb +0 -7
  36. metadata +41 -24
@@ -0,0 +1,259 @@
1
+ require 'spec_helper'
2
+ require 'git_helper'
3
+
4
+ describe GitHelper::CodeRequest do
5
+ let(:highline_cli) { double(:highline_cli) }
6
+ let(:local_code) { double(:local_code, project_name: 'name', branch: 'branch') }
7
+ let(:process_project) { double(:process_project, create: :created, merge: :merged) }
8
+
9
+ subject { GitHelper::CodeRequest.new }
10
+
11
+ before do
12
+ allow(GitHelper::LocalCode).to receive(:new).and_return(local_code)
13
+ allow(GitHelper::HighlineCli).to receive(:new).and_return(highline_cli)
14
+ end
15
+
16
+ describe '#create' do
17
+ before do
18
+ allow(subject).to receive(:base_branch).and_return('base')
19
+ allow(subject).to receive(:new_code_request_title).and_return('Title')
20
+ end
21
+
22
+ it 'should call to process the project' do
23
+ expect(subject).to receive(:process_project).and_return(process_project)
24
+ subject.create
25
+ end
26
+
27
+ it 'should call create' do
28
+ allow(subject).to receive(:process_project).and_return(process_project)
29
+ expect(process_project).to receive(:create)
30
+ subject.create
31
+ end
32
+
33
+ it 'should call base_branch and new_code_request_title' do
34
+ expect(subject).to receive(:base_branch).and_return('base')
35
+ expect(subject).to receive(:new_code_request_title).and_return('Title')
36
+ allow(subject).to receive(:process_project).and_return(process_project)
37
+ allow(process_project).to receive(:create)
38
+ subject.create
39
+ end
40
+ end
41
+
42
+ describe '#merge' do
43
+ it 'should call to process the project' do
44
+ expect(subject).to receive(:process_project).and_return(process_project)
45
+ subject.merge
46
+ end
47
+
48
+ it 'should call merge' do
49
+ allow(subject).to receive(:process_project).and_return(process_project)
50
+ expect(process_project).to receive(:merge)
51
+ subject.merge
52
+ end
53
+ end
54
+
55
+ describe '#process_project' do
56
+ it 'should call the local code to see if it is a github or gitlab project' do
57
+ expect(local_code).to receive(:gitlab_project?).and_return(false)
58
+ expect(local_code).to receive(:github_repo?).and_return(true)
59
+ subject.send(:process_project)
60
+ end
61
+
62
+ context 'when github and gitlab remotes are found' do
63
+ it 'should ask for clarification' do
64
+ allow(local_code).to receive(:gitlab_project?).and_return(true)
65
+ allow(local_code).to receive(:github_repo?).and_return(true)
66
+ expect(subject).to receive(:ask_for_clarification)
67
+ subject.send(:process_project)
68
+ end
69
+ end
70
+
71
+ context 'when github' do
72
+ it 'should call the github_pull_request' do
73
+ allow(local_code).to receive(:gitlab_project?).and_return(false)
74
+ allow(local_code).to receive(:github_repo?).and_return(true)
75
+ expect(subject).to receive(:github_pull_request)
76
+ subject.send(:process_project)
77
+ end
78
+ end
79
+
80
+ context 'when gitlab' do
81
+ it 'should call the gitlab_merge_request' do
82
+ allow(local_code).to receive(:gitlab_project?).and_return(true)
83
+ allow(local_code).to receive(:github_repo?).and_return(false)
84
+ expect(subject).to receive(:gitlab_merge_request)
85
+ subject.send(:process_project)
86
+ end
87
+ end
88
+
89
+ context 'when no github or gitlab remotes are found' do
90
+ it 'should raise error' do
91
+ allow(local_code).to receive(:gitlab_project?).and_return(false)
92
+ allow(local_code).to receive(:github_repo?).and_return(false)
93
+ expect(subject).to receive(:exit)
94
+ subject.send(:process_project)
95
+ end
96
+ end
97
+ end
98
+
99
+ describe '#ask_for_clarification' do
100
+ it 'should ask the CLI' do
101
+ expect(highline_cli).to receive(:conflicting_remote_clarification).and_return('github')
102
+ subject.send(:ask_for_clarification)
103
+ end
104
+
105
+ context 'when response is github' do
106
+ it 'should return github_pull_request' do
107
+ allow(highline_cli).to receive(:conflicting_remote_clarification).and_return('github')
108
+ expect(subject).to receive(:github_pull_request)
109
+ subject.send(:ask_for_clarification)
110
+ end
111
+
112
+ it 'should return github_pull_request' do
113
+ allow(highline_cli).to receive(:conflicting_remote_clarification).and_return('Github')
114
+ expect(subject).to receive(:github_pull_request)
115
+ subject.send(:ask_for_clarification)
116
+ end
117
+ end
118
+
119
+ context 'when response is gitlab' do
120
+ it 'should return gitlab_merge_request' do
121
+ allow(highline_cli).to receive(:conflicting_remote_clarification).and_return('gitlab')
122
+ expect(subject).to receive(:gitlab_merge_request)
123
+ subject.send(:ask_for_clarification)
124
+ end
125
+
126
+ it 'should return gitlab_merge_request' do
127
+ allow(highline_cli).to receive(:conflicting_remote_clarification).and_return('Gitlab')
128
+ expect(subject).to receive(:gitlab_merge_request)
129
+ subject.send(:ask_for_clarification)
130
+ end
131
+ end
132
+
133
+ context 'when response is neither' do
134
+ it 'should raise an error' do
135
+ allow(highline_cli).to receive(:conflicting_remote_clarification).and_return('huh?')
136
+ expect(subject).to receive(:exit)
137
+ subject.send(:ask_for_clarification)
138
+ end
139
+ end
140
+ end
141
+
142
+ describe '#github_pull_request' do
143
+ it 'should call the GitHelper::GitHubPullRequest' do
144
+ expect(GitHelper::GitHubPullRequest).to receive(:new)
145
+ subject.send(:github_pull_request)
146
+ end
147
+ end
148
+
149
+ describe '#gitlab_merge_request' do
150
+ it 'should call the GitHelper::GitLabMergeRequest' do
151
+ expect(GitHelper::GitLabMergeRequest).to receive(:new)
152
+ subject.send(:gitlab_merge_request)
153
+ end
154
+ end
155
+
156
+ describe '#local_project' do
157
+ it 'should call the name of the local_code' do
158
+ expect(local_code).to receive(:project_name)
159
+ subject.send(:local_project)
160
+ end
161
+ end
162
+
163
+ describe '#default_branch' do
164
+ it 'should call the name of the local_code' do
165
+ expect(local_code).to receive(:default_branch)
166
+ subject.send(:default_branch)
167
+ end
168
+ end
169
+
170
+ describe '#base_branch' do
171
+ it 'should call the default branch' do
172
+ expect(subject).to receive(:default_branch)
173
+ allow(highline_cli).to receive(:base_branch_default?).at_least(:once)
174
+ allow(highline_cli).to receive(:base_branch).at_least(:once).and_return('base')
175
+ subject.send(:base_branch)
176
+ end
177
+
178
+ it 'should ask the CLI to ask the user' do
179
+ allow(subject).to receive(:default_branch)
180
+ expect(highline_cli).to receive(:base_branch_default?).at_least(:once)
181
+ allow(highline_cli).to receive(:base_branch).at_least(:once).and_return('base')
182
+ subject.send(:base_branch)
183
+ end
184
+
185
+ context 'if the user says no' do
186
+ it "definitely asks for the user's base branch" do
187
+ allow(subject).to receive(:default_branch)
188
+ expect(highline_cli).to receive(:base_branch_default?).at_least(:once).and_return(false)
189
+ expect(highline_cli).to receive(:base_branch).at_least(:once).and_return('base')
190
+ subject.send(:base_branch)
191
+ end
192
+ end
193
+
194
+ context 'if the user says yes' do
195
+ it "does not ask for the user's base branch" do
196
+ allow(subject).to receive(:default_branch)
197
+ expect(highline_cli).to receive(:base_branch_default?).at_least(:once).and_return(true)
198
+ expect(highline_cli).not_to receive(:base_branch)
199
+ subject.send(:base_branch)
200
+ end
201
+ end
202
+ end
203
+
204
+ describe '#autogenerated_title' do
205
+ it 'should generate a title based on the branch' do
206
+ expect(subject).to receive(:local_branch).and_return('branch')
207
+ expect(local_code).to receive(:generate_title)
208
+ subject.send(:autogenerated_title)
209
+ end
210
+ end
211
+
212
+ describe '#new_code_request_title' do
213
+ it 'should call autogenerated title method' do
214
+ expect(subject).to receive(:autogenerated_title)
215
+ allow(highline_cli).to receive(:accept_autogenerated_title?).at_least(:once)
216
+ allow(highline_cli).to receive(:title).at_least(:once).and_return('Title')
217
+ subject.send(:new_code_request_title)
218
+ end
219
+
220
+ it 'should ask the CLI to ask the user' do
221
+ allow(subject).to receive(:autogenerated_title)
222
+ expect(highline_cli).to receive(:accept_autogenerated_title?).at_least(:once)
223
+ allow(highline_cli).to receive(:title).at_least(:once).and_return('Title')
224
+ subject.send(:new_code_request_title)
225
+ end
226
+
227
+ context 'if the user says no' do
228
+ it "definitely asks for the user's title" do
229
+ allow(subject).to receive(:autogenerated_title)
230
+ expect(highline_cli).to receive(:accept_autogenerated_title?).at_least(:once).and_return(false)
231
+ expect(highline_cli).to receive(:title).at_least(:once).and_return('Title')
232
+ subject.send(:new_code_request_title)
233
+ end
234
+ end
235
+
236
+ context 'if the user says yes to original title' do
237
+ it "does not ask for the user's chosen title" do
238
+ allow(subject).to receive(:autogenerated_title)
239
+ expect(highline_cli).to receive(:accept_autogenerated_title?).at_least(:once).and_return(true)
240
+ expect(highline_cli).not_to receive(:title)
241
+ subject.send(:new_code_request_title)
242
+ end
243
+ end
244
+ end
245
+
246
+ describe '#local_code' do
247
+ it 'should call the octokit client' do
248
+ expect(GitHelper::LocalCode).to receive(:new).and_return(local_code)
249
+ subject.send(:local_code)
250
+ end
251
+ end
252
+
253
+ describe '#cli' do
254
+ it 'should call the octokit client' do
255
+ expect(GitHelper::HighlineCli).to receive(:new).and_return(highline_cli)
256
+ subject.send(:cli)
257
+ end
258
+ end
259
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ require 'git_helper'
3
+
4
+ describe GitHelper::EmptyCommit do
5
+ let(:local_code) { double(:local_code, empty_commit: :commit) }
6
+
7
+ subject { GitHelper::EmptyCommit.new }
8
+
9
+ it 'should call GitHelper::LocalCode' do
10
+ expect(GitHelper::LocalCode).to receive(:new).and_return(local_code)
11
+ subject.execute
12
+ end
13
+
14
+ it 'should call the empty_commit method from the local code class' do
15
+ allow(GitHelper::LocalCode).to receive(:new).and_return(local_code)
16
+ expect(local_code).to receive(:empty_commit)
17
+ subject.execute
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+ require 'git_helper'
3
+
4
+ describe GitHelper::ForgetLocalCommits do
5
+ let(:local_code) { double(:local_code, forget_local_commits: :commit) }
6
+
7
+ subject { GitHelper::ForgetLocalCommits.new }
8
+
9
+ it 'should call GitHelper::LocalCode' do
10
+ expect(GitHelper::LocalCode).to receive(:new).and_return(local_code)
11
+ subject.execute
12
+ end
13
+
14
+ it 'should call the forget_local_commits method from the local code class' do
15
+ allow(GitHelper::LocalCode).to receive(:new).and_return(local_code)
16
+ expect(local_code).to receive(:forget_local_commits)
17
+ subject.execute
18
+ end
19
+ end
@@ -0,0 +1,60 @@
1
+ require 'spec_helper'
2
+ require 'git_helper'
3
+
4
+ describe GitHelper::GitConfigReader do
5
+ let(:github_token) { '1234ASDF1234ASDF' }
6
+ let(:gitlab_token) { 'ASDF123ASDF1234' }
7
+ let(:config_file) {
8
+ {
9
+ github_user: 'github-user-name',
10
+ github_token: github_token,
11
+ gitlab_user: 'gitlab-user-name',
12
+ gitlab_token: gitlab_token
13
+ }
14
+ }
15
+
16
+ subject { GitHelper::GitConfigReader.new }
17
+
18
+ describe '#gitlab_token' do
19
+ it 'should locate the gitlab_token' do
20
+ expect(subject).to receive(:config_file).and_return(config_file)
21
+ expect(subject.gitlab_token).to eq(gitlab_token)
22
+ end
23
+
24
+ it 'should call the config file' do
25
+ expect(subject).to receive(:config_file).and_return(config_file)
26
+ subject.gitlab_token
27
+ end
28
+ end
29
+
30
+ describe '#github_token' do
31
+ it 'should locate the github_token' do
32
+ expect(subject).to receive(:config_file).and_return(config_file)
33
+ expect(subject.github_token).to eq(github_token)
34
+ end
35
+
36
+ it 'should call the config file' do
37
+ expect(subject).to receive(:config_file).and_return(config_file)
38
+ subject.github_token
39
+ end
40
+ end
41
+
42
+ describe '#config_file' do
43
+ it 'should yaml load the file path' do
44
+ expect(YAML).to receive(:load_file)
45
+ subject.send(:config_file)
46
+ end
47
+ end
48
+
49
+ describe '#git_config_file_path' do
50
+ it 'should look in the current directory' do
51
+ expect(Dir).to receive(:pwd).and_return('/Users/firstnamelastname/path/to/git_helper')
52
+ subject.send(:git_config_file_path)
53
+ end
54
+
55
+ it 'should return the base path with the git config file at the end' do
56
+ allow(Dir).to receive(:pwd).and_return('/Users/firstnamelastname/path/to/git_helper')
57
+ expect(subject.send(:git_config_file_path)).to eq('/Users/firstnamelastname/.git_config.yml')
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+ require 'git_helper'
3
+
4
+ describe GitHelper::GitLabClient do
5
+ let(:git_config_reader) { double(:git_config_reader, gitlab_token: :token) }
6
+
7
+ subject { GitHelper::GitLabClient.new }
8
+
9
+ before do
10
+ allow(GitHelper::GitConfigReader).to receive(:new).and_return(git_config_reader)
11
+ end
12
+
13
+ describe '#client' do
14
+ it 'should call the GitLab client to make a new client' do
15
+ expect(Gitlab).to receive(:client)
16
+ subject.client
17
+ end
18
+ end
19
+
20
+ describe '#git_config_reader' do
21
+ it 'should make a new git config reader' do
22
+ expect(GitHelper::GitConfigReader).to receive(:new)
23
+ subject.send(:git_config_reader)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,215 @@
1
+ require 'spec_helper'
2
+ require 'git_helper'
3
+
4
+ describe GitHelper::HighlineCli do
5
+ let(:response) { double(:response, readline: true, to_i: 5) }
6
+ let(:highline_client) { double(:highline_cli, ask: response) }
7
+
8
+ subject { GitHelper::HighlineCli.new }
9
+
10
+ before do
11
+ allow(HighLine).to receive(:new).and_return(highline_client)
12
+ end
13
+
14
+ describe '#new_branch_name' do
15
+ it "should ask the subject's ask method" do
16
+ expect(subject).to receive(:ask).with('New branch name?')
17
+ subject.new_branch_name
18
+ end
19
+
20
+ it 'should come out a string' do
21
+ expect(subject.new_branch_name).to be_a(String)
22
+ end
23
+ end
24
+
25
+ describe '#process_directory_remotes' do
26
+ it "should ask the subject's ask method" do
27
+ expect(subject).to receive(:ask).and_return('y')
28
+ subject.process_directory_remotes?('directory')
29
+ end
30
+
31
+ it 'should be a boolean at the end' do
32
+ allow(subject).to receive(:ask).and_return('y')
33
+ expect([true, false]).to include(subject.process_directory_remotes?('directory'))
34
+ end
35
+
36
+ it 'should come out as a true boolean if somebody responds y' do
37
+ allow(subject).to receive(:ask).and_return('y')
38
+ expect(subject.process_directory_remotes?('directory')).to eq(true)
39
+ end
40
+
41
+ it 'should come out as a false boolean if somebody responds n' do
42
+ allow(subject).to receive(:ask).and_return('n')
43
+ expect(subject.process_directory_remotes?('directory')).to eq(false)
44
+ end
45
+
46
+ it 'should come out as true if somebody presses enter' do
47
+ allow(subject).to receive(:ask).and_return('')
48
+ expect(subject.accept_autogenerated_title?('directory')).to eq(true)
49
+ end
50
+ end
51
+
52
+ describe '#conflicting_remote_clarification' do
53
+ it "should ask the subject's ask method" do
54
+ expect(subject).to receive(:ask).with('Found git remotes for both GitHub and GitLab. Would you like to proceed with GitLab or GitHub? (github/gitlab)').and_return('gitlab')
55
+ subject.conflicting_remote_clarification
56
+ end
57
+
58
+ it 'should come out a string' do
59
+ expect(subject.conflicting_remote_clarification).to be_a(String)
60
+ end
61
+ end
62
+
63
+ describe '#title' do
64
+ it "should ask the subject's ask method" do
65
+ expect(subject).to receive(:ask).with('Title?')
66
+ subject.title
67
+ end
68
+
69
+ it 'should come out a string' do
70
+ expect(subject.title).to be_a(String)
71
+ end
72
+ end
73
+
74
+ describe '#base_branch' do
75
+ it "should ask the subject's ask method" do
76
+ expect(subject).to receive(:ask).with('Base branch?')
77
+ subject.base_branch
78
+ end
79
+
80
+ it 'should come out a string' do
81
+ expect(subject.base_branch).to be_a(String)
82
+ end
83
+ end
84
+
85
+ describe '#code_request_id' do
86
+ it "should ask the subject's ask method" do
87
+ expect(subject).to receive(:ask).with('Example Request ID?')
88
+ subject.code_request_id('Example')
89
+ end
90
+
91
+ it 'should come out a string' do
92
+ expect(subject.code_request_id('Example')).to be_a(String)
93
+ end
94
+ end
95
+
96
+ describe '#accept_autogenerated_title' do
97
+ it "should ask the subject's ask method" do
98
+ expect(subject).to receive(:ask).and_return('y')
99
+ subject.accept_autogenerated_title?('Title Example')
100
+ end
101
+
102
+ it 'should be a boolean at the end' do
103
+ allow(subject).to receive(:ask).and_return('y')
104
+ expect([true, false]).to include(subject.accept_autogenerated_title?('Title Example'))
105
+ end
106
+
107
+ it 'should come out as a true boolean if somebody responds y' do
108
+ allow(subject).to receive(:ask).and_return('y')
109
+ expect(subject.accept_autogenerated_title?('Title Example')).to eq(true)
110
+ end
111
+
112
+ it 'should come out as a true boolean if somebody responds n' do
113
+ allow(subject).to receive(:ask).and_return('n')
114
+ expect(subject.accept_autogenerated_title?('Title Example')).to eq(false)
115
+ end
116
+
117
+ it 'should come out as a true boolean if somebody responds yes' do
118
+ allow(subject).to receive(:ask).and_return('yes')
119
+ expect(subject.accept_autogenerated_title?('Title Example')).to eq(true)
120
+ end
121
+
122
+ it 'should come out as a false boolean if somebody responds no' do
123
+ allow(subject).to receive(:ask).and_return('no')
124
+ expect(subject.accept_autogenerated_title?('Title Example')).to eq(false)
125
+ end
126
+
127
+ it 'should come out as true if somebody presses enter' do
128
+ allow(subject).to receive(:ask).and_return('')
129
+ expect(subject.accept_autogenerated_title?('Title Example')).to eq(true)
130
+ end
131
+ end
132
+
133
+ describe '#base_branch_default' do
134
+ it "should ask the subject's ask method" do
135
+ expect(subject).to receive(:ask).and_return('y')
136
+ subject.base_branch_default?('default_branch')
137
+ end
138
+
139
+ it 'should be a boolean at the end' do
140
+ allow(subject).to receive(:ask).and_return('y')
141
+ expect([true, false]).to include(subject.base_branch_default?('default_branch'))
142
+ end
143
+
144
+ it 'should come out as a true boolean if somebody responds y' do
145
+ allow(subject).to receive(:ask).and_return('y')
146
+ expect(subject.base_branch_default?('default_branch')).to eq(true)
147
+ end
148
+
149
+ it 'should come out as a true boolean if somebody responds n' do
150
+ allow(subject).to receive(:ask).and_return('n')
151
+ expect(subject.base_branch_default?('default_branch')).to eq(false)
152
+ end
153
+
154
+ it 'should come out as a true boolean if somebody responds yes' do
155
+ allow(subject).to receive(:ask).and_return('yes')
156
+ expect(subject.base_branch_default?('default_branch')).to eq(true)
157
+ end
158
+
159
+ it 'should come out as a false boolean if somebody responds no' do
160
+ allow(subject).to receive(:ask).and_return('no')
161
+ expect(subject.base_branch_default?('default_branch')).to eq(false)
162
+ end
163
+
164
+ it 'should come out as true if somebody presses enter' do
165
+ allow(subject).to receive(:ask).and_return('')
166
+ expect(subject.base_branch_default?('default_branch')).to eq(true)
167
+ end
168
+ end
169
+
170
+ describe '#merge_method' do
171
+ it "should ask the subject's ask_options method" do
172
+ expect(subject).to receive(:ask_options).and_return(3)
173
+ subject.merge_method(['1', '2', '3'])
174
+ end
175
+
176
+ it 'should return a string' do
177
+ allow(subject).to receive(:ask_options).and_return(2)
178
+ expect(subject.merge_method(['1', '2', '3'])).to be_a(String)
179
+ end
180
+ end
181
+
182
+ describe '#template_to_apply' do
183
+ it "should ask the subject's ask_options method" do
184
+ expect(subject).to receive(:ask_options).and_return(3)
185
+ subject.template_to_apply(['option1', 'option2', 'option3'], 'example type')
186
+ end
187
+
188
+ it 'should return a string' do
189
+ allow(subject).to receive(:ask_options).and_return(3)
190
+ expect(subject.template_to_apply(['option1', 'option2', 'option3'], 'example type')).to eq('None')
191
+ end
192
+ end
193
+
194
+ describe '#ask' do
195
+ it 'should ask the highline client ask'do
196
+ expect(highline_client).to receive(:ask)
197
+ subject.send(:ask, 'prompt goes here')
198
+ end
199
+
200
+ it 'should return a string' do
201
+ expect(subject.send(:ask, 'prompt goes here')).to be_a(String)
202
+ end
203
+ end
204
+
205
+ describe '#ask_options' do
206
+ it 'should ask the highline client ask'do
207
+ expect(highline_client).to receive(:ask)
208
+ subject.send(:ask_options, 'prompt goes here', ['1', '2', '3'])
209
+ end
210
+
211
+ it 'should return an integer' do
212
+ expect(subject.send(:ask_options, 'prompt goes here', ['1', '2', '3'])).to be_a(Integer)
213
+ end
214
+ end
215
+ end