knife-vrealize 3.0.0 → 4.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Chef Partner Engineering (<partnereng@chef.io>)
4
- # Copyright:: Copyright (c) 2015 Chef Software, Inc.
5
- # License:: Apache License, Version 2.0
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- require 'spec_helper'
21
- require 'chef/knife/vra_catalog_list'
22
- require 'support/shared_examples_for_command'
23
-
24
- describe Chef::Knife::Cloud::VraCatalogList do
25
- it_behaves_like Chef::Knife::Cloud::Command, Chef::Knife::Cloud::VraCatalogList.new
26
-
27
- subject { described_class.new }
28
-
29
- describe '#format_status_value' do
30
- context 'when the status is "published"' do
31
- it 'displays with green' do
32
- expect(subject.ui).to receive(:color).with('published', :green)
33
- subject.format_status_value('published')
34
- end
35
- end
36
-
37
- context 'when the status it not "published"' do
38
- it 'displays with red' do
39
- expect(subject.ui).to receive(:color).with('unpublished', :red)
40
- subject.format_status_value('unpublished')
41
- end
42
- end
43
- end
44
- end
@@ -1,171 +0,0 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Chef Partner Engineering (<partnereng@chef.io>)
4
- # Copyright:: Copyright (c) 2015 Chef Software, Inc.
5
- # License:: Apache License, Version 2.0
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- require 'spec_helper'
21
- require 'chef/knife/vra_server_create'
22
- require 'support/shared_examples_for_command'
23
- require 'support/shared_examples_for_servercreatecommand'
24
-
25
- describe Chef::Knife::Cloud::VraServerCreate do
26
- before(:each) do
27
- Chef::Config.reset
28
- end
29
-
30
- argv = []
31
- argv += %w(--cpus 1)
32
- argv += %w(--memory 512)
33
- argv += %w(--requested-for myuser@corp.local)
34
- argv += %w(--bootstrap-protocol ssh)
35
- argv += %w(--ssh-password password)
36
- argv += %w(--extra-param key1=string:value1)
37
- argv += %w(--extra-param key2=integer:2)
38
- argv += %w(d5ba201a-449f-47a4-9d02-39196224bf01)
39
-
40
- subject { Chef::Knife::Cloud::VraServerCreate.new(argv) }
41
-
42
- it_behaves_like Chef::Knife::Cloud::Command, Chef::Knife::Cloud::VraServerCreate.new(argv)
43
- it_behaves_like Chef::Knife::Cloud::ServerCreateCommand, Chef::Knife::Cloud::VraServerCreate.new(argv)
44
-
45
- describe '#validate_params!' do
46
- context 'when no catalog ID is supplied' do
47
- it 'raises an error' do
48
- argv = []
49
- argv += %w(--cpus 1)
50
- argv += %w(--memory 512)
51
- argv += %w(--requested-for myuser@corp.local)
52
- argv += %w(--bootstrap-protocol ssh)
53
- argv += %w(--ssh-password password)
54
-
55
- command = Chef::Knife::Cloud::VraServerCreate.new(argv)
56
- expect(command.ui).to receive(:error)
57
- expect { command.validate_params! }.to raise_error(SystemExit)
58
- end
59
- end
60
-
61
- it 'validates extra parameters' do
62
- expect(subject).to receive(:validate_extra_params!)
63
- subject.validate_params!
64
- end
65
- end
66
-
67
- describe '#extra_params' do
68
- context 'when there are no extra params' do
69
- before do
70
- Chef::Config[:knife][:vra_extra_params] = {}
71
- end
72
-
73
- it 'returns nil' do
74
- expect(subject.extra_params).to eq(nil)
75
- end
76
- end
77
-
78
- context 'when extra params are provided' do
79
- before do
80
- Chef::Config[:knife][:vra_extra_params] = {
81
- 'key1' => 'string:value1',
82
- 'key2' => 'integer:2'
83
- }
84
- end
85
-
86
- it 'parses extra parameters properly' do
87
- params = subject.extra_params
88
- expect(params[0][:key]).to eq 'key1'
89
- expect(params[0][:type]).to eq 'string'
90
- expect(params[0][:value]).to eq 'value1'
91
- expect(params[1][:key]).to eq 'key2'
92
- expect(params[1][:type]).to eq 'integer'
93
- expect(params[1][:value]).to eq '2'
94
- end
95
- end
96
- end
97
-
98
- describe '#validate_extra_params!' do
99
- context 'when no extra parameters are supplied' do
100
- it 'does not raise an exception' do
101
- argv = []
102
- argv += %w(--cpus 1)
103
- argv += %w(--memory 512)
104
- argv += %w(--requested-for myuser@corp.local)
105
- argv += %w(--bootstrap-protocol ssh)
106
- argv += %w(--ssh-password password)
107
- command = Chef::Knife::Cloud::VraServerCreate.new(argv)
108
-
109
- expect { command.validate_extra_params! }.not_to raise_error
110
- end
111
- end
112
-
113
- context 'when correct parameters are supplied' do
114
- it 'does not raise an exception' do
115
- expect { subject.validate_extra_params! }.not_to raise_error
116
- end
117
- end
118
-
119
- context 'when a type or value is missing' do
120
- it 'raises an exception' do
121
- argv = []
122
- argv += %w(--cpus 1)
123
- argv += %w(--memory 512)
124
- argv += %w(--requested-for myuser@corp.local)
125
- argv += %w(--bootstrap-protocol ssh)
126
- argv += %w(--ssh-password password)
127
- argv += %w(d5ba201a-449f-47a4-9d02-39196224bf01)
128
- argv += %w(--extra-param key1=value1)
129
- command = Chef::Knife::Cloud::VraServerCreate.new(argv)
130
-
131
- expect { command.validate_extra_params! }.to raise_error(ArgumentError)
132
- end
133
- end
134
-
135
- context 'when an invalid parameter type is provided' do
136
- it 'raises an exception' do
137
- argv = []
138
- argv += %w(--cpus 1)
139
- argv += %w(--memory 512)
140
- argv += %w(--requested-for myuser@corp.local)
141
- argv += %w(--bootstrap-protocol ssh)
142
- argv += %w(--ssh-password password)
143
- argv += %w(d5ba201a-449f-47a4-9d02-39196224bf01)
144
- argv += %w(--extra-param key1=faketype:value1)
145
- command = Chef::Knife::Cloud::VraServerCreate.new(argv)
146
-
147
- expect { command.validate_extra_params! }.to raise_error(ArgumentError)
148
- end
149
- end
150
- end
151
-
152
- describe '#hostname_for_server' do
153
- let(:server) { double('server') }
154
- let(:ip_addresses) { [ '1.2.3.4' ] }
155
-
156
- it 'returns the IP address if it exists' do
157
- allow(subject).to receive(:server).and_return(server)
158
- allow(server).to receive(:ip_addresses).and_return(ip_addresses)
159
-
160
- expect(subject.hostname_for_server).to eq('1.2.3.4')
161
- end
162
-
163
- it 'returns the hostname if the IP address is missing' do
164
- allow(subject).to receive(:server).and_return(server)
165
- allow(server).to receive(:ip_addresses).and_return([])
166
- allow(server).to receive(:name).and_return('test_name')
167
-
168
- expect(subject.hostname_for_server).to eq('test_name')
169
- end
170
- end
171
- end
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Chef Partner Engineering (<partnereng@chef.io>)
4
- # Copyright:: Copyright (c) 2015 Chef Software, Inc.
5
- # License:: Apache License, Version 2.0
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- require 'spec_helper'
21
- require 'chef/knife/vra_server_delete'
22
- require 'support/shared_examples_for_command'
23
- require 'support/shared_examples_for_serverdeletecommand'
24
-
25
- describe Chef::Knife::Cloud::VraServerDelete do
26
- subject { Chef::Knife::Cloud::VraServerDelete.new(%w(12345 54321)) }
27
-
28
- it_behaves_like Chef::Knife::Cloud::Command, Chef::Knife::Cloud::VraServerDelete.new(%w(12345 54321))
29
-
30
- describe '#validate_params!' do
31
- context 'when no resource IDs are supplied' do
32
- let(:command) { Chef::Knife::Cloud::VraServerDelete.new }
33
- it 'prints an error and exits' do
34
- expect(command.ui).to receive(:error)
35
- expect { command.validate_params! }.to raise_error(SystemExit)
36
- end
37
- end
38
- end
39
-
40
- describe '#execute_command' do
41
- before(:each) do
42
- server1 = double('server1', name: 'server1')
43
- server2 = double('server2', name: 'server2')
44
- allow(subject).to receive_message_chain(:service, :get_server).with('12345').and_return(server1)
45
- allow(subject).to receive_message_chain(:service, :get_server).with('54321').and_return(server2)
46
- end
47
-
48
- it 'calls delete_server for each server' do
49
- allow(subject).to receive(:delete_from_chef).with('server1')
50
- allow(subject).to receive(:delete_from_chef).with('server2')
51
- expect(subject).to receive_message_chain(:service, :delete_server).with('12345')
52
- expect(subject).to receive_message_chain(:service, :delete_server).with('54321')
53
- subject.execute_command
54
- end
55
-
56
- it 'calls delete_from_chef using the server names for each server' do
57
- allow(subject).to receive_message_chain(:service, :delete_server).with('12345')
58
- allow(subject).to receive_message_chain(:service, :delete_server).with('54321')
59
- expect(subject).to receive(:delete_from_chef).with('server1')
60
- expect(subject).to receive(:delete_from_chef).with('server2')
61
- subject.execute_command
62
- end
63
- end
64
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Chef Partner Engineering (<partnereng@chef.io>)
4
- # Copyright:: Copyright (c) 2015 Chef Software, Inc.
5
- # License:: Apache License, Version 2.0
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- require 'spec_helper'
21
- require 'chef/knife/vra_server_list'
22
- require 'support/shared_examples_for_command'
23
-
24
- describe Chef::Knife::Cloud::VraServerList do
25
- it_behaves_like Chef::Knife::Cloud::Command, Chef::Knife::Cloud::VraServerList.new
26
-
27
- subject { described_class.new }
28
-
29
- describe '#format_status_value' do
30
- context 'when the status is "active"' do
31
- it 'displays with green' do
32
- expect(subject.ui).to receive(:color).with('active', :green)
33
- subject.format_status_value('active')
34
- end
35
- end
36
-
37
- context 'when the status is "deleted"' do
38
- it 'displays with red' do
39
- expect(subject.ui).to receive(:color).with('deleted', :red)
40
- subject.format_status_value('deleted')
41
- end
42
- end
43
-
44
- context 'when the status is anything else' do
45
- it 'displays with yellow' do
46
- expect(subject.ui).to receive(:color).with('unknown', :yellow)
47
- subject.format_status_value('unknown')
48
- end
49
- end
50
- end
51
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Chef Partner Engineering (<partnereng@chef.io>)
4
- # Copyright:: Copyright (c) 2015 Chef Software, Inc.
5
- # License:: Apache License, Version 2.0
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- require 'spec_helper'
21
- require 'chef/knife/vra_server_show'
22
- require 'support/shared_examples_for_command'
23
-
24
- describe Chef::Knife::Cloud::VraServerShow do
25
- it_behaves_like Chef::Knife::Cloud::Command, Chef::Knife::Cloud::VraServerShow.new
26
-
27
- describe '#validate_params!' do
28
- context 'when no resources are supplied' do
29
- let(:command) { Chef::Knife::Cloud::VraServerShow.new }
30
- it 'prints an error and exits' do
31
- expect(command.ui).to receive(:error)
32
- expect { command.validate_params! }.to raise_error(SystemExit)
33
- end
34
- end
35
-
36
- context 'when more than one resource is supplied' do
37
- let(:command) { Chef::Knife::Cloud::VraServerShow.new(%w(12345 54321)) }
38
- it 'prints an error and exits' do
39
- expect(command.ui).to receive(:error)
40
- expect { command.validate_params! }.to raise_error(SystemExit)
41
- end
42
- end
43
- end
44
- end
@@ -1,366 +0,0 @@
1
- # frozen_string_literal: true
2
- #
3
- # Author:: Chef Partner Engineering (<partnereng@chef.io>)
4
- # Copyright:: Copyright (c) 2015 Chef Software, Inc.
5
- # License:: Apache License, Version 2.0
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- require 'spec_helper'
21
- require 'chef/knife/vro_workflow_execute'
22
-
23
- describe Chef::Knife::VroWorkflowExecute do
24
- let(:workflow_name) { 'test workflow' }
25
- let(:workflow_id) { '1d335f85-5328-42fc-a842-a956d1ccdf08' }
26
- let(:vro_username) { 'myuser' }
27
- let(:vro_password) { 'mypassword' }
28
- let(:vro_base_url) { 'https://vro.corp.local' }
29
- let(:vro_disable_ssl_verify) { true }
30
- let(:key1) { 'value1' }
31
- let(:key2) { '2' }
32
-
33
- let(:argv) do
34
- [ workflow_name,
35
- "key1=#{key1}",
36
- "key2=#{key2}",
37
- '--vro-workflow-id', workflow_id]
38
- end
39
-
40
- subject { described_class.new(argv) }
41
-
42
- before(:each) do
43
- Chef::Config[:knife][:vro_username] = vro_username
44
- Chef::Config[:knife][:vro_password] = vro_password
45
- Chef::Config[:knife][:vro_base_url] = vro_base_url
46
- Chef::Config[:knife][:vro_disable_ssl_verify] = vro_disable_ssl_verify
47
- end
48
-
49
- describe '#verify_ssl?' do
50
- context 'when vro_disable_ssl_verify is set to true' do
51
- let(:vro_disable_ssl_verify) { true }
52
- it 'returns false' do
53
- expect(subject.verify_ssl?).to eq(false)
54
- end
55
- end
56
-
57
- context 'when vro_disable_ssl_verify is set to false' do
58
- let(:vro_disable_ssl_verify) { false }
59
- it 'returns true' do
60
- expect(subject.verify_ssl?).to eq(true)
61
- end
62
- end
63
- end
64
-
65
- describe '#vro_config' do
66
- it 'creates a config object' do
67
- expect(VcoWorkflows::Config).to receive(:new).with(url: vro_base_url,
68
- username: vro_username,
69
- password: vro_password,
70
- verify_ssl: false)
71
- subject.vro_config
72
- end
73
- end
74
-
75
- describe '#vro_client' do
76
- it 'creates a client object' do
77
- config = double('config')
78
- allow(subject).to receive(:vro_config).and_return(config)
79
- expect(VcoWorkflows::Workflow).to receive(:new).with(workflow_name,
80
- id: workflow_id,
81
- config: config)
82
-
83
- subject.set_parameters
84
- subject.vro_client
85
- end
86
- end
87
-
88
- describe '#parse_and_validate_params' do
89
- context 'when proper parameters are supplied' do
90
- let(:args) { %w(key1=value1 key2=value2) }
91
- it 'returns a hash of parameters' do
92
- expect(subject.parse_and_validate_params!(args)).to eq('key1' => 'value1',
93
- 'key2' => 'value2')
94
- end
95
- end
96
-
97
- context 'when a parameter is malformed' do
98
- let(:args) { %w(key1=value1 key2) }
99
- it 'raises an exception' do
100
- expect { subject.parse_and_validate_params!(args) }.to raise_error(RuntimeError)
101
- end
102
- end
103
- end
104
-
105
- describe 'execute_workflow' do
106
- before do
107
- config = double('config')
108
- client = double('client')
109
- allow(subject).to receive(:vro_config).and_return(config)
110
- allow(subject).to receive(:vro_client).and_return(client)
111
- allow(client).to receive(:parameter)
112
- allow(client).to receive(:execute)
113
- subject.set_parameters
114
- end
115
-
116
- it 'sets the workflow parameters' do
117
- expect(subject.vro_client).to receive(:parameter).with('key1', key1)
118
- expect(subject.vro_client).to receive(:parameter).with('key2', key2)
119
-
120
- subject.execute_workflow
121
- end
122
-
123
- it 'executes the workflow' do
124
- expect(subject.vro_client).to receive(:execute)
125
- subject.execute_workflow
126
- end
127
-
128
- context 'when execute fails with a RestClient::BadRequest' do
129
- it 'prints an error with the HTTP response' do
130
- HTTPResponse = Struct.new(:code, :to_s)
131
- response = HTTPResponse.new(400, 'an HTTP error occurred')
132
- exception = RestClient::BadRequest.new
133
- exception.response = response
134
- allow(subject.vro_client).to receive(:execute).and_raise(exception)
135
- expect(subject.ui).to receive(:error).with('The workflow execution request failed: an HTTP error occurred')
136
- expect { subject.execute_workflow }.to raise_error(RestClient::BadRequest)
137
- end
138
- end
139
-
140
- context 'when execute fails with any other exception' do
141
- it 'prints an error with the exception message' do
142
- allow(subject.vro_client).to receive(:execute).and_raise(RuntimeError, 'a non-HTTP error occurred')
143
- expect(subject.ui).to receive(:error).with('The workflow execution request failed: a non-HTTP error occurred')
144
- expect { subject.execute_workflow }.to raise_error(RuntimeError)
145
- end
146
- end
147
- end
148
-
149
- describe '#wait_for_workflow' do
150
- before(:each) do
151
- # don't actually sleep
152
- allow(subject).to receive(:sleep)
153
- end
154
-
155
- context 'when the requests completes normally, 3 loops' do
156
- it 'only fetches the token 3 times' do
157
- client = double('client')
158
- token = double('token')
159
- allow(subject).to receive(:vro_client).and_return(client)
160
- allow(client).to receive(:token).and_return(token)
161
- allow(token).to receive(:alive?).exactly(3).times.and_return(true, true, false)
162
-
163
- expect(subject.vro_client).to receive(:token).exactly(3).times
164
- subject.wait_for_workflow
165
- end
166
- end
167
-
168
- context 'when the request is completed on the first loop' do
169
- it 'only refreshes the request 1 time' do
170
- client = double('client')
171
- token = double('token')
172
- allow(subject).to receive(:vro_client).and_return(client)
173
- allow(client).to receive(:token).and_return(token)
174
- expect(token).to receive(:alive?).once.and_return(false)
175
-
176
- subject.wait_for_workflow
177
- end
178
- end
179
-
180
- context 'when the timeout is exceeded' do
181
- before do
182
- Chef::Config[:knife][:request_timeout] = 600
183
- end
184
- it 'raises a Timeout exception' do
185
- allow(Timeout).to receive(:timeout).and_raise(Timeout::Error)
186
- expect { subject.wait_for_workflow }.to raise_error(
187
- Timeout::Error, 'Workflow did not complete in 600 seconds. ' \
188
- 'Please check the vRO UI for more information.' \
189
- )
190
- end
191
- end
192
-
193
- context 'when a non-timeout exception is raised' do
194
- it 'raises the original exception' do
195
- client = double('client')
196
- allow(subject).to receive(:vro_client).and_return(client)
197
- allow(client).to receive(:token).and_raise(RuntimeError, 'an error occurred')
198
- expect { subject.wait_for_workflow }.to raise_error(RuntimeError, 'an error occurred')
199
- end
200
- end
201
- end
202
-
203
- describe '#missing_config_parameters' do
204
- context 'when all parameters are supplied' do
205
- it 'returns an empty array' do
206
- expect(subject.missing_config_parameters).to eq([])
207
- end
208
- end
209
-
210
- context 'when a parameter is missing' do
211
- before do
212
- Chef::Config[:knife][:vro_username] = nil
213
- end
214
- it 'returns an array with that parameter' do
215
- expect(subject.missing_config_parameters).to eq([ :vro_username ])
216
- end
217
- end
218
- end
219
-
220
- describe '#validate!' do
221
- context 'when a config parameter is missing' do
222
- it 'calls #print_error_and_exit' do
223
- allow(subject).to receive(:missing_config_parameters).and_return([ :parameter ])
224
- expect(subject).to receive(:print_error_and_exit)
225
-
226
- subject.validate!
227
- end
228
- end
229
-
230
- context 'when no workflow name is provided' do
231
- let(:knife) { Chef::Knife::VroWorkflowExecute.new }
232
- it 'calls #print_error_and_exit' do
233
- expect(knife).to receive(:print_error_and_exit)
234
-
235
- knife.validate!
236
- end
237
- end
238
- end
239
-
240
- describe '#print_error_and_exit' do
241
- it 'prints an error and exits' do
242
- expect(subject.ui).to receive(:error).with('an error occurred')
243
- expect { subject.print_error_and_exit('an error occurred') }.to raise_error(SystemExit)
244
- end
245
- end
246
-
247
- describe '#print_results' do
248
- it 'prints a blank line and calls the other print methods' do
249
- expect(subject.ui).to receive(:msg).with('')
250
- expect(subject).to receive(:print_output_parameters)
251
- expect(subject).to receive(:print_execution_log)
252
-
253
- subject.print_results
254
- end
255
- end
256
-
257
- describe '#print_output_parameters' do
258
- context 'when there are no output parameters' do
259
- before do
260
- client = double('client')
261
- token = double('token')
262
- allow(subject).to receive(:vro_client).and_return(client)
263
- allow(client).to receive(:token).and_return(token)
264
- allow(token).to receive(:output_parameters).and_return({})
265
- end
266
-
267
- it 'does not print any output' do
268
- expect(subject.ui).not_to receive(:msg)
269
-
270
- subject.print_output_parameters
271
- end
272
- end
273
-
274
- context 'when output parameters exist' do
275
- before do
276
- client = double('client')
277
- token = double('token')
278
- param1 = double('param1', value: 'value1', type: 'string')
279
- param2 = double('param2', value: 2.0, type: 'number')
280
- allow(subject).to receive(:vro_client).and_return(client)
281
- allow(client).to receive(:token).and_return(token)
282
- allow(token).to receive(:output_parameters).and_return(
283
- 'key1' => param1,
284
- 'key2' => param2
285
- )
286
-
287
- # squelch output during testing
288
- allow(subject.ui).to receive(:msg)
289
- allow(subject).to receive(:msg_pair)
290
- end
291
-
292
- it 'prints a header and a blank line' do
293
- header = subject.ui.color('Output Parameters:', :bold)
294
- expect(subject.ui).to receive(:msg).with(header)
295
- expect(subject.ui).to receive(:msg).with('')
296
-
297
- subject.print_output_parameters
298
- end
299
-
300
- it 'prints out the output parameters' do
301
- expect(subject).to receive(:msg_pair).with('key1', 'value1 (string)')
302
- expect(subject).to receive(:msg_pair).with('key2', '2.0 (number)')
303
-
304
- subject.print_output_parameters
305
- end
306
- end
307
- end
308
-
309
- describe '#print_execution_log' do
310
- context 'when the log is empty' do
311
- before do
312
- client = double('client', log: nil)
313
- allow(subject).to receive(:vro_client).and_return(client)
314
- end
315
-
316
- it 'does not print any information' do
317
- expect(subject.ui).not_to receive(:msg)
318
-
319
- subject.print_execution_log
320
- end
321
- end
322
-
323
- context 'when the log exists' do
324
- before do
325
- client = double('client', log: 'log entries go here')
326
- allow(subject).to receive(:vro_client).and_return(client)
327
- end
328
-
329
- it 'prints a header and the log entry' do
330
- header = subject.ui.color('Workflow Execution Log:', :bold)
331
- expect(subject.ui).to receive(:msg).with(header)
332
- expect(subject.ui).to receive(:msg).with('log entries go here')
333
-
334
- subject.print_execution_log
335
- end
336
- end
337
- end
338
-
339
- describe '#set_parameters' do
340
- it 'sets the instance variables correctly' do
341
- subject.set_parameters
342
-
343
- expect(subject.workflow_name).to eq(workflow_name)
344
- expect(subject.workflow_id).to eq(workflow_id)
345
- expect(subject.parameters).to eq(
346
- 'key1' => 'value1',
347
- 'key2' => '2'
348
- )
349
- end
350
- end
351
-
352
- describe '#run' do
353
- it 'calls the correct methods' do
354
- expect(subject).to receive(:validate!)
355
- expect(subject).to receive(:set_parameters)
356
- expect(subject.ui).to receive(:msg).with('Starting workflow execution...')
357
- expect(subject).to receive(:execute_workflow).and_return('12345')
358
- expect(subject.ui).to receive(:msg).with('Workflow execution 12345 started. Waiting for it to complete...')
359
- expect(subject).to receive(:wait_for_workflow)
360
- expect(subject.ui).to receive(:msg).with('Workflow execution complete.')
361
- expect(subject).to receive(:print_results)
362
-
363
- subject.run
364
- end
365
- end
366
- end