hammer_cli_foreman 2.3.0 → 2.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/doc/release_notes.md +27 -0
  3. data/lib/hammer_cli_foreman.rb +3 -0
  4. data/lib/hammer_cli_foreman/architecture.rb +5 -5
  5. data/lib/hammer_cli_foreman/bookmark.rb +6 -6
  6. data/lib/hammer_cli_foreman/command_extensions.rb +1 -0
  7. data/lib/hammer_cli_foreman/command_extensions/ping.rb +21 -2
  8. data/lib/hammer_cli_foreman/command_extensions/status.rb +1 -1
  9. data/lib/hammer_cli_foreman/command_extensions/update_common.rb +14 -0
  10. data/lib/hammer_cli_foreman/commands.rb +14 -0
  11. data/lib/hammer_cli_foreman/compute_profile.rb +5 -5
  12. data/lib/hammer_cli_foreman/compute_resource.rb +22 -0
  13. data/lib/hammer_cli_foreman/compute_resource/ovirt.rb +2 -1
  14. data/lib/hammer_cli_foreman/config_group.rb +5 -5
  15. data/lib/hammer_cli_foreman/config_report.rb +2 -0
  16. data/lib/hammer_cli_foreman/filter.rb +2 -2
  17. data/lib/hammer_cli_foreman/host.rb +1 -11
  18. data/lib/hammer_cli_foreman/hosts/common_update_options.rb +6 -5
  19. data/lib/hammer_cli_foreman/mail_notification.rb +2 -2
  20. data/lib/hammer_cli_foreman/model.rb +5 -5
  21. data/lib/hammer_cli_foreman/operating_system.rb +10 -9
  22. data/lib/hammer_cli_foreman/option_builders.rb +27 -7
  23. data/lib/hammer_cli_foreman/ping.rb +6 -1
  24. data/lib/hammer_cli_foreman/registration.rb +18 -0
  25. data/lib/hammer_cli_foreman/settings.rb +3 -3
  26. data/lib/hammer_cli_foreman/usergroup.rb +5 -5
  27. data/lib/hammer_cli_foreman/version.rb +1 -1
  28. data/locale/ca/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  29. data/locale/de/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  30. data/locale/en/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  31. data/locale/en_GB/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  32. data/locale/es/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  33. data/locale/fr/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  34. data/locale/it/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  35. data/locale/ja/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  36. data/locale/ko/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  37. data/locale/pt_BR/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  38. data/locale/ru/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  39. data/locale/zh_CN/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  40. data/locale/zh_TW/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  41. data/test/data/2.4/foreman_api.json +1 -0
  42. data/test/data/2.5/foreman_api.json +1 -0
  43. data/test/functional/architecture_test.rb +79 -0
  44. data/test/functional/bookmark_test.rb +22 -1
  45. data/test/functional/compute_profile_test.rb +54 -0
  46. data/test/functional/compute_resource_test.rb +37 -0
  47. data/test/functional/config_group_test.rb +50 -0
  48. data/test/functional/filter_test.rb +115 -47
  49. data/test/functional/host_test.rb +99 -3
  50. data/test/functional/http_proxy_test.rb +12 -0
  51. data/test/functional/location_test.rb +13 -0
  52. data/test/functional/mail_notification_test.rb +20 -0
  53. data/test/functional/media_test.rb +11 -0
  54. data/test/functional/model_test.rb +50 -0
  55. data/test/functional/operating_system_test.rb +51 -0
  56. data/test/functional/ping_test.rb +33 -0
  57. data/test/functional/realm_test.rb +11 -0
  58. data/test/functional/registration_test.rb +8 -0
  59. data/test/functional/report_template_test.rb +11 -0
  60. data/test/functional/settings_test.rb +21 -0
  61. data/test/functional/status_test.rb +79 -13
  62. data/test/functional/template_test.rb +12 -0
  63. data/test/functional/user_test.rb +11 -0
  64. data/test/functional/usergroup_test.rb +51 -0
  65. data/test/test_helper.rb +1 -1
  66. data/test/unit/apipie_resource_mock.rb +21 -0
  67. data/test/unit/architecture_test.rb +10 -1
  68. data/test/unit/bookmark_test.rb +99 -0
  69. data/test/unit/compute_profile_test.rb +87 -0
  70. data/test/unit/config_group_test.rb +10 -0
  71. data/test/unit/config_report_test.rb +1 -0
  72. data/test/unit/host_test.rb +0 -23
  73. data/test/unit/mail_notification_test.rb +53 -0
  74. data/test/unit/model_test.rb +10 -0
  75. data/test/unit/operating_system_test.rb +14 -1
  76. data/test/unit/settings_test.rb +4 -0
  77. data/test/unit/usergroup_test.rb +10 -0
  78. metadata +129 -107
  79. data/test/reports/TEST-Minitest-Result.xml +0 -4344
@@ -27,6 +27,26 @@ describe 'bookmark' do
27
27
  result = run_cmd(@cmd)
28
28
  assert_cmd(expected_result, result)
29
29
  end
30
+
31
+ it 'should run list command with defaults' do
32
+ providers = { 'foreman' => HammerCLIForeman::Defaults.new(api_connection({}, '2.1')) }
33
+ defaults = HammerCLI::Defaults.new(
34
+ {
35
+ organization_id: {
36
+ provider: 'foreman'
37
+ },
38
+ location_id: {
39
+ provider: 'foreman'
40
+ }
41
+ }
42
+ )
43
+ defaults.stubs(:write_to_file).returns(true)
44
+ defaults.stubs(:providers).returns(providers)
45
+ api_expects(:bookmarks, :index, 'List bookmarks').returns(@bookmarks)
46
+
47
+ result = run_cmd(@cmd, { use_defaults: true, defaults: defaults })
48
+ _(result.exit_code).must_equal HammerCLI::EX_OK
49
+ end
30
50
  end
31
51
 
32
52
  describe 'info' do
@@ -138,7 +158,8 @@ describe 'bookmark' do
138
158
  api_expects(:bookmarks, :update) do |par|
139
159
  par['id'] == '1'
140
160
  end
141
- run_cmd(%w[bookmark update --id 1])
161
+ result = run_cmd(%w[bookmark update --id 1])
162
+ assert_cmd(success_result("Nothing to update.\n"), result)
142
163
  end
143
164
 
144
165
  it 'update bookmark' do
@@ -40,6 +40,17 @@ describe "parameters" do
40
40
  result = run_cmd(@cmd + params)
41
41
  assert_cmd(success_result("Compute profile updated.\n"), result)
42
42
  end
43
+
44
+ it 'updates nothing without profile related parameters' do
45
+ params = %w[--id=1]
46
+ api_expects(:compute_profiles, :update, 'Update profile with no params').returns({})
47
+
48
+ expected_result = success_result("Nothing to update.\n")
49
+
50
+ result = run_cmd(@cmd + params)
51
+ assert_cmd(expected_result, result)
52
+ end
53
+
43
54
  end
44
55
 
45
56
  describe "delete compute profile" do
@@ -98,4 +109,47 @@ describe "parameters" do
98
109
  end
99
110
  end
100
111
 
112
+ describe 'list' do
113
+ before do
114
+ @cmd = %w[compute-profile list]
115
+ @compute_profiles = [{
116
+ id: 1,
117
+ name: '1-Small',
118
+ }]
119
+ end
120
+
121
+ it 'should return a list of compute profiles' do
122
+ api_expects(:compute_profiles, :index, 'List compute profiles').returns(@compute_profiles)
123
+
124
+ output = IndexMatcher.new([
125
+ %w[ID NAME],
126
+ %w[1 1-Small]
127
+ ])
128
+ expected_result = success_result(output)
129
+
130
+ result = run_cmd(@cmd)
131
+ assert_cmd(expected_result, result)
132
+ end
133
+
134
+ it 'should run list command with defaults' do
135
+ providers = { 'foreman' => HammerCLIForeman::Defaults.new(api_connection({}, '2.1')) }
136
+ defaults = HammerCLI::Defaults.new(
137
+ {
138
+ organization_id: {
139
+ provider: 'foreman'
140
+ },
141
+ location_id: {
142
+ provider: 'foreman'
143
+ }
144
+ }
145
+ )
146
+ defaults.stubs(:write_to_file).returns(true)
147
+ defaults.stubs(:providers).returns(providers)
148
+ api_expects(:compute_profiles, :index, 'List compute profiles').returns(@compute_profiles)
149
+
150
+ result = run_cmd(@cmd, { use_defaults: true, defaults: defaults })
151
+ _(result.exit_code).must_equal HammerCLI::EX_OK
152
+ end
153
+ end
154
+
101
155
  end
@@ -51,6 +51,18 @@ describe 'compute-resource' do
51
51
  assert_cmd(expected_result, result)
52
52
  end
53
53
 
54
+ describe 'associate VMs to hosts' do
55
+ it 'successful associate vms to hosts' do
56
+ expected_result = success_result("Virtual machines have been associated.\n")
57
+ api_expects(:compute_resources, :associate, 'Associate VMs') do |p|
58
+ p['id'] == '1'
59
+ end
60
+ result = run_cmd(%w(compute-resource associate-vms --id 1))
61
+ assert_cmd(expected_result, result)
62
+ end
63
+ end
64
+
65
+
54
66
  it 'should print error for blank --provider option' do
55
67
  params = %w(--provider= --name=new'')
56
68
  expected_result = CommandExpectation.new
@@ -198,6 +210,31 @@ end
198
210
  end
199
211
  end
200
212
 
213
+ describe 'vnic profiles' do
214
+ let(:cmd) { base_cmd << 'vnic-profiles' }
215
+ let(:vnic_profile_1) { { id: 1, name: 'network1', network: 2 } }
216
+ let(:vnic_profile_2) { { id: 2, name: 'network2', network: 2 } }
217
+ let(:vnic_profiles) { [vnic_profile_1, vnic_profile_2] }
218
+
219
+ it 'lists available vnic profiles for a compute resource' do
220
+ api_expects(:compute_resources, :available_vnic_profiles, 'vnic-profiles').with_params(
221
+ 'id' => '1'
222
+ ).returns(index_response(vnic_profiles))
223
+
224
+ output = IndexMatcher.new(
225
+ [
226
+ ['VNIC PROFILE ID', 'NAME', 'NETWORK ID'],
227
+ ['1', 'network1','2'],
228
+ ['2', 'network2','2']
229
+ ]
230
+ )
231
+ expected_result = success_result(output)
232
+
233
+ result = run_cmd(cmd + base_params)
234
+ assert_cmd(expected_result, result)
235
+ end
236
+ end
237
+
201
238
  describe 'images' do
202
239
  let(:cmd) { base_cmd << 'images' }
203
240
  let(:image1) { { uuid: 1, name: 'image1' } }
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.join(File.dirname(__FILE__), 'test_helper')
4
+
5
+ describe 'config_group' do
6
+ describe 'list' do
7
+ before do
8
+ @cmd = %w[config-group list]
9
+ @config_groups = [{
10
+ id: 1,
11
+ name: 'config-group-test',
12
+ }]
13
+ end
14
+
15
+ it 'should return a list of config groups' do
16
+ api_expects(:config_groups, :index, 'List config groups').returns(@config_groups)
17
+
18
+ output = IndexMatcher.new([
19
+ %w[ID NAME],
20
+ %w[1 config-group-test]
21
+ ])
22
+ expected_result = success_result(output)
23
+
24
+ result = run_cmd(@cmd)
25
+ assert_cmd(expected_result, result)
26
+ end
27
+
28
+ it 'should run list command with defaults' do
29
+ providers = { 'foreman' => HammerCLIForeman::Defaults.new(api_connection({}, '2.1')) }
30
+ defaults = HammerCLI::Defaults.new(
31
+ {
32
+ organization_id: {
33
+ provider: 'foreman'
34
+ },
35
+ location_id: {
36
+ provider: 'foreman'
37
+ }
38
+ }
39
+ )
40
+ defaults.stubs(:write_to_file).returns(true)
41
+ defaults.stubs(:providers).returns(providers)
42
+ api_expects(:config_groups, :index, 'List config groups').returns(@config_groups)
43
+
44
+ result = run_cmd(@cmd, { use_defaults: true, defaults: defaults })
45
+ _(result.exit_code).must_equal HammerCLI::EX_OK
46
+ end
47
+ end
48
+ end
49
+
50
+
@@ -1,18 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.join(File.dirname(__FILE__), 'test_helper')
2
4
 
3
5
  describe 'filter' do
4
6
  def api_expects_filter_info(options)
5
7
  override = !!options[:override]
6
- api_expects(:filters, :show, 'Get filter info').with_params({
7
- :id => '1'
8
- }).returns(@filter.merge('override?' => override))
8
+ api_expects(:filters, :show, 'Get filter info').with_params(
9
+ id: '1'
10
+ ).returns(@filter.merge('override?' => override))
9
11
  end
10
12
 
11
13
  def taxonomy_usage_error(action, cmd)
12
14
  usage_error_result(
13
15
  cmd,
14
16
  'Organizations and locations can be set only for overriding filters.',
15
- "Could not #{action} the permission filter")
17
+ "Could not #{action} the permission filter"
18
+ )
16
19
  end
17
20
 
18
21
  def assert_update_success(result)
@@ -21,7 +24,7 @@ describe 'filter' do
21
24
 
22
25
  describe 'create' do
23
26
  before do
24
- @cmd = %w(filter create)
27
+ @cmd = %w[filter create]
25
28
  end
26
29
 
27
30
  it 'prints error when taxonomies are used for a not-overriding filter' do
@@ -32,41 +35,106 @@ describe 'filter' do
32
35
  result = run_cmd(@cmd + params)
33
36
  assert_cmd(taxonomy_usage_error('create', @cmd), result)
34
37
  end
38
+
39
+ it 'should create a filter' do
40
+ params = ['--role-id=1', '--permission-ids=[1]']
41
+
42
+ api_expects(:filters, :create) do |params|
43
+ (params['filter']['role_id'] == 1)
44
+ (params['filter']['permission_ids'] == [1])
45
+ end
46
+
47
+ result = run_cmd(@cmd + params)
48
+ assert_cmd(success_result("Permission filter for [%<resource_type_label>s] created.\n"), result)
49
+ end
50
+ end
51
+
52
+ describe 'list' do
53
+ before do
54
+ @cmd = %w[filter list]
55
+ @filters = [{
56
+ id: 1,
57
+ resource_type: 'Architecture',
58
+ search: 'none',
59
+ unlimited?: true,
60
+ override?: false,
61
+ role: { name: 'Manager', id: 2, description: 'Role granting all available permissions.', origin: 'foreman' },
62
+ permissions: 'view_architectures'
63
+ }]
64
+ end
65
+
66
+ it 'should return a list of filters' do
67
+ api_expects(:filters, :index, 'List filters').returns(@filters)
68
+
69
+ output = IndexMatcher.new([
70
+ ['ID', 'RESOURCE TYPE', 'SEARCH', 'UNLIMITED?', 'OVERRIDE?', 'ROLE', 'PERMISSIONS'],
71
+ ['1', 'Architecture', 'none', 'yes', 'no', 'Manager', 'view_architectures']
72
+ ])
73
+ expected_result = success_result(output)
74
+
75
+ result = run_cmd(@cmd)
76
+ assert_cmd(expected_result, result)
77
+ end
78
+ end
79
+
80
+ describe 'delete' do
81
+ before do
82
+ @cmd = %w(filter delete)
83
+ end
84
+
85
+ it 'should print error missing argument id' do
86
+ expected_result = "Could not delete the permission filter:\n Missing arguments for '--id'.\n"
87
+
88
+ api_expects_no_call
89
+
90
+ result = run_cmd(@cmd)
91
+ assert_match(expected_result, result.err)
92
+ end
93
+
94
+ it 'should delete a filter' do
95
+ params = ['--id=1']
96
+
97
+ api_expects(:filters, :destroy, 'Delete a filter').with_params(id: '1')
98
+
99
+ result = run_cmd(@cmd + params)
100
+ assert_cmd(success_result("Permission filter deleted.\n"), result)
101
+ end
35
102
  end
36
103
 
37
104
  describe 'update' do
38
105
  before do
39
- @cmd = %w(filter update)
106
+ @cmd = %w[filter update]
40
107
  @filter = {
41
- "search" => nil,
42
- "resource_type" => "User",
43
- "unlimited?" => false,
44
- "created_at" => "2017-07-18 14:34:09 UTC",
45
- "updated_at" => "2017-07-18 14:34:09 UTC",
46
- "override?" => true,
47
- "id" => 404,
48
- "role" => {
49
- "name" => "Some Role",
50
- "id" => 28,
51
- "description" => "Description\nof the new\nrole",
52
- "origin" => nil
108
+ 'search' => nil,
109
+ 'resource_type_label' => 'User',
110
+ 'resource_type' => 'User',
111
+ 'unlimited?' => false,
112
+ 'created_at' => '2017-07-18 14:34:09 UTC',
113
+ 'updated_at' => '2017-07-18 14:34:09 UTC',
114
+ 'override?' => true,
115
+ 'id' => 404,
116
+ 'role' => {
117
+ 'name' => 'Some Role',
118
+ 'id' => 28,
119
+ 'description' => "Description\nof the new\nrole",
120
+ 'origin' => nil
53
121
  },
54
- "permissions" => [{
55
- "name" => "view_users",
56
- "id" => 164,
57
- "resource_type" => "User"
122
+ 'permissions' => [{
123
+ 'name' => 'view_users',
124
+ 'id' => 164,
125
+ 'resource_type' => 'User'
58
126
  }],
59
- "locations" => [{
60
- "id" => 28,
61
- "name" => "location74",
62
- "title" => "location74",
63
- "description" => nil
127
+ 'locations' => [{
128
+ 'id' => 28,
129
+ 'name' => 'location74',
130
+ 'title' => 'location74',
131
+ 'description' => nil
64
132
  }],
65
- "organizations" => [{
66
- "id" => 27,
67
- "name" => "organization74",
68
- "title" => "organization74",
69
- "description" => nil
133
+ 'organizations' => [{
134
+ 'id' => 27,
135
+ 'name' => 'organization74',
136
+ 'title' => 'organization74',
137
+ 'description' => nil
70
138
  }]
71
139
  }
72
140
  end
@@ -74,13 +142,13 @@ describe 'filter' do
74
142
  it 'resets taxonomies when a filter is not-overriding' do
75
143
  params = ['--id=1']
76
144
 
77
- api_expects_filter_info(:override => false)
78
- api_expects(:filters, :update, 'Update the filter').with_params({
145
+ api_expects_filter_info(override: false)
146
+ api_expects(:filters, :update, 'Update the filter').with_params(
79
147
  'filter' => {
80
148
  'organization_ids' => [],
81
149
  'location_ids' => []
82
150
  }
83
- }).returns(@filter)
151
+ ).returns(@filter)
84
152
 
85
153
  assert_update_success(run_cmd(@cmd + params))
86
154
  end
@@ -88,12 +156,12 @@ describe 'filter' do
88
156
  it 'resets taxonomies when switching a filter to not-overriding' do
89
157
  params = ['--id=1', '--override=false']
90
158
 
91
- api_expects(:filters, :update, 'Update the filter').with_params({
159
+ api_expects(:filters, :update, 'Update the filter').with_params(
92
160
  'filter' => {
93
161
  'organization_ids' => [],
94
162
  'location_ids' => []
95
163
  }
96
- }).returns(@filter)
164
+ ).returns(@filter)
97
165
 
98
166
  assert_update_success(run_cmd(@cmd + params))
99
167
  end
@@ -101,13 +169,13 @@ describe 'filter' do
101
169
  it 'can add taxonomies when a filter is overriding' do
102
170
  params = ['--id=1', '--organization-ids=1,2', '--location-ids=3,4']
103
171
 
104
- api_expects_filter_info(:override => true)
105
- api_expects(:filters, :update, 'Update the filter').with_params({
172
+ api_expects_filter_info(override: true)
173
+ api_expects(:filters, :update, 'Update the filter').with_params(
106
174
  'filter' => {
107
- 'organization_ids' => ['1', '2'],
108
- 'location_ids' => ['3', '4']
175
+ 'organization_ids' => %w[1 2],
176
+ 'location_ids' => %w[3 4]
109
177
  }
110
- }).returns(@filter)
178
+ ).returns(@filter)
111
179
 
112
180
  assert_update_success(run_cmd(@cmd + params))
113
181
  end
@@ -115,12 +183,12 @@ describe 'filter' do
115
183
  it 'can add taxonomies when switching a filter to overriding' do
116
184
  params = ['--id=1', '--organization-ids=1,2', '--location-ids=3,4', '--override=true']
117
185
 
118
- api_expects(:filters, :update, 'Update the filter').with_params({
186
+ api_expects(:filters, :update, 'Update the filter').with_params(
119
187
  'filter' => {
120
- 'organization_ids' => ['1', '2'],
121
- 'location_ids' => ['3', '4']
188
+ 'organization_ids' => %w[1 2],
189
+ 'location_ids' => %w[3 4]
122
190
  }
123
- }).returns(@filter)
191
+ ).returns(@filter)
124
192
 
125
193
  assert_update_success(run_cmd(@cmd + params))
126
194
  end
@@ -128,7 +196,7 @@ describe 'filter' do
128
196
  it 'prints error when taxonomies are used on not-overriding' do
129
197
  params = ['--id=1', '--organization-ids=1,2', '--location-ids=3,4']
130
198
 
131
- api_expects_filter_info(:override => false)
199
+ api_expects_filter_info(override: false)
132
200
 
133
201
  result = run_cmd(@cmd + params)
134
202
  assert_cmd(taxonomy_usage_error('update', @cmd), result)
@@ -297,6 +297,54 @@ describe "host create" do
297
297
  assert_cmd(expected_result, result)
298
298
  end
299
299
 
300
+ it 'should create a host with an owner' do
301
+ params = ['--owner-id=1']
302
+
303
+ api_expects(:hosts, :create, 'Create a host with an owner').with_params(
304
+ 'location_id' => 1, 'organization_id' => 1, 'host' => {
305
+ 'owner_id' => '1', 'name' => 'test'
306
+ }
307
+ ).returns(results: { 'owner_id' => '1', 'name' => 'test' })
308
+
309
+ expected_result = success_result("Host created.\n")
310
+
311
+ result = run_cmd(cmd + minimal_params_without_hostgroup + params)
312
+
313
+ assert_cmd(expected_result, result)
314
+ end
315
+
316
+ it 'should create a host and set owner-type' do
317
+ params = ['--owner=admin']
318
+
319
+ api_expects_search(:users, {login: 'admin'}).returns(index_response([{ 'id' => 1 }]))
320
+
321
+ api_expects(:hosts, :create, 'Create a host with an owner').with_params(
322
+ 'location_id' => 1, 'organization_id' => 1, 'host' => {
323
+ 'owner_id' => 1, 'name' => 'test'
324
+ }
325
+ ).returns(results: { 'owner' => 'admin', 'name' => 'test' })
326
+
327
+ expected_result = success_result("Host created.\n")
328
+
329
+ result = run_cmd(cmd + minimal_params_without_hostgroup + params)
330
+
331
+ assert_cmd(expected_result, result)
332
+ end
333
+
334
+ it 'should create a host with default owner-type User' do
335
+
336
+ api_expects(:hosts, :create, 'Create a host with an owner').with_params(
337
+ 'location_id' => 1, 'organization_id' => 1, 'host' => {
338
+ 'name' => 'test'
339
+ }
340
+ ).returns(results: { 'owner_type' => 'User', 'name' => 'test' })
341
+
342
+ expected_result = success_result("Host created.\n")
343
+
344
+ result = run_cmd(cmd + minimal_params_without_hostgroup)
345
+
346
+ assert_cmd(expected_result, result)
347
+ end
300
348
  end
301
349
 
302
350
  describe 'host update' do
@@ -356,7 +404,7 @@ describe 'host update' do
356
404
  it 'updates nothing without host related parameters' do
357
405
  api_expects(:hosts, :update, 'Update host with no host params').returns({})
358
406
 
359
- expected_result = success_result("Host updated.\n")
407
+ expected_result = success_result("Nothing to update.\n")
360
408
 
361
409
  result = run_cmd(cmd + minimal_params)
362
410
  assert_cmd(expected_result, result)
@@ -410,7 +458,25 @@ describe 'host update' do
410
458
  )
411
459
  api_expects(:hosts, :update, 'Update host with new owner').with_params(
412
460
  'id' => '1', 'location_id' => 1, 'organization_id' => 1, 'host' => {
413
- 'owner_id' => '1' }
461
+ 'owner_id' => '1' }
462
+ ) do |par|
463
+ par['id'] == '1' && par['host']['owner_id'] == '1'
464
+ end.returns(updated_host)
465
+
466
+ expected_result = success_result("Host updated.\n")
467
+
468
+ result = run_cmd(cmd + minimal_params + params)
469
+
470
+ assert_cmd(expected_result, result)
471
+ end
472
+
473
+ it 'should update the host owner with id' do
474
+ params = ['--owner-id=1']
475
+
476
+ api_expects(:hosts, :update, 'Update host with new owner').with_params(
477
+ 'id' => '1', 'location_id' => 1, 'organization_id' => 1, 'host' => {
478
+ 'owner_id' => '1'
479
+ }
414
480
  ) do |par|
415
481
  par['id'] == '1' && par['host']['owner_id'] == '1'
416
482
  end.returns(updated_host)
@@ -426,7 +492,7 @@ end
426
492
  describe 'host config reports' do
427
493
  let(:report15) do
428
494
  {
429
- "id" => 15,
495
+ "id" => 15,
430
496
  "host_id" => 1,
431
497
  "host_name" => "host.example.com",
432
498
  "reported_at" => "2017-11-13 03:04:53 UTC",
@@ -502,3 +568,33 @@ describe 'disassociate host from vm' do
502
568
  assert_cmd(expected_result, result)
503
569
  end
504
570
  end
571
+
572
+
573
+
574
+ describe 'list' do
575
+ before do
576
+ @cmd = %w[host list]
577
+ end
578
+
579
+ it 'should run list command with defaults' do
580
+ providers = { 'foreman' => HammerCLIForeman::Defaults.new(api_connection({}, '2.1')) }
581
+ defaults = HammerCLI::Defaults.new(
582
+ {
583
+ organization_id: {
584
+ provider: 'foreman'
585
+ },
586
+ location_id: {
587
+ provider: 'foreman'
588
+ }
589
+ }
590
+ )
591
+ defaults.stubs(:write_to_file).returns(true)
592
+ defaults.stubs(:providers).returns(providers)
593
+ api_expects(:users, :index, 'Find user').with_params(search: 'login=admin').returns(index_response([{ 'default_organization' => { 'id' => 2 } }]))
594
+ api_expects(:users, :index, 'Find user').with_params(search: 'login=admin').returns(index_response([{ 'default_location' => { 'id' => 1 } }]))
595
+ api_expects(:hosts, :index, 'List hosts').returns(index_response([{ 'id' => '42' }]))
596
+
597
+ result = run_cmd(@cmd, { use_defaults: true, defaults: defaults })
598
+ _(result.exit_code).must_equal HammerCLI::EX_OK
599
+ end
600
+ end