hammer_cli_foreman_puppet 0.0.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.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +5 -0
  3. data/README.md +20 -0
  4. data/config/foreman_puppet.yml +2 -0
  5. data/lib/hammer_cli_foreman_puppet.rb +57 -0
  6. data/lib/hammer_cli_foreman_puppet/associating_commands.rb +1 -0
  7. data/lib/hammer_cli_foreman_puppet/associating_commands/associating_commands.rb +40 -0
  8. data/lib/hammer_cli_foreman_puppet/class.rb +54 -0
  9. data/lib/hammer_cli_foreman_puppet/combination.rb +14 -0
  10. data/lib/hammer_cli_foreman_puppet/command_extensions.rb +2 -0
  11. data/lib/hammer_cli_foreman_puppet/command_extensions/discovery.rb +8 -0
  12. data/lib/hammer_cli_foreman_puppet/command_extensions/environment.rb +24 -0
  13. data/lib/hammer_cli_foreman_puppet/command_extensions/environments.rb +24 -0
  14. data/lib/hammer_cli_foreman_puppet/command_extensions/host.rb +41 -0
  15. data/lib/hammer_cli_foreman_puppet/command_extensions/hostgroup.rb +47 -0
  16. data/lib/hammer_cli_foreman_puppet/command_extensions/location.rb +9 -0
  17. data/lib/hammer_cli_foreman_puppet/command_extensions/organization.rb +9 -0
  18. data/lib/hammer_cli_foreman_puppet/commands.rb +76 -0
  19. data/lib/hammer_cli_foreman_puppet/config_group.rb +45 -0
  20. data/lib/hammer_cli_foreman_puppet/discovery.rb +11 -0
  21. data/lib/hammer_cli_foreman_puppet/environment.rb +59 -0
  22. data/lib/hammer_cli_foreman_puppet/environment_name_mapping.rb +20 -0
  23. data/lib/hammer_cli_foreman_puppet/host.rb +70 -0
  24. data/lib/hammer_cli_foreman_puppet/hostgroup.rb +76 -0
  25. data/lib/hammer_cli_foreman_puppet/id_resolver.rb +73 -0
  26. data/lib/hammer_cli_foreman_puppet/location.rb +35 -0
  27. data/lib/hammer_cli_foreman_puppet/option_sources.rb +1 -0
  28. data/lib/hammer_cli_foreman_puppet/option_sources/puppet_environment_params.rb +60 -0
  29. data/lib/hammer_cli_foreman_puppet/organization.rb +35 -0
  30. data/lib/hammer_cli_foreman_puppet/puppet_references.rb +20 -0
  31. data/lib/hammer_cli_foreman_puppet/references.rb +22 -0
  32. data/lib/hammer_cli_foreman_puppet/smart_class_parameter.rb +182 -0
  33. data/lib/hammer_cli_foreman_puppet/smart_proxy.rb +58 -0
  34. data/lib/hammer_cli_foreman_puppet/version.rb +5 -0
  35. data/test/data/2.1/foreman_api.json +1 -0
  36. data/test/data/3.0/foreman_api.json +1 -0
  37. data/test/data/README.md +27 -0
  38. data/test/functional/config_group_test.rb +28 -0
  39. data/test/functional/host/create_test.rb +164 -0
  40. data/test/functional/host/update_test.rb +97 -0
  41. data/test/functional/hostgroup/create_test.rb +149 -0
  42. data/test/functional/hostgroup/update_test.rb +97 -0
  43. data/test/functional/proxy_test.rb +86 -0
  44. data/test/functional/smart_class_parameter_test.rb +97 -0
  45. data/test/functional/template_test.rb +38 -0
  46. data/test/functional/test_helper.rb +7 -0
  47. data/test/test_helper.rb +29 -0
  48. data/test/unit/apipie_resource_mock.rb +186 -0
  49. data/test/unit/config_group_test.rb +81 -0
  50. data/test/unit/helpers/command.rb +163 -0
  51. data/test/unit/helpers/fake_searchables.rb +19 -0
  52. data/test/unit/helpers/resource_disabled.rb +24 -0
  53. data/test/unit/puppet_class_test.rb +72 -0
  54. data/test/unit/puppet_environment_test.rb +116 -0
  55. data/test/unit/smart_class_parameter_test.rb +114 -0
  56. data/test/unit/test_helper.rb +18 -0
  57. data/test/unit/test_output_adapter.rb +22 -0
  58. metadata +143 -0
@@ -0,0 +1,97 @@
1
+ require_relative '../test_helper'
2
+
3
+ module HammerCLIForemanPuppet
4
+ describe Host do
5
+ describe UpdateCommand do
6
+ it 'allows environment id' do
7
+ api_expects(:hosts, :update) do |p|
8
+ p['host']['environment_id'] == 1 &&
9
+ p['id'] == '1'
10
+ end
11
+ run_cmd(%w(host update --id 1 --puppet-environment-id 1))
12
+ end
13
+
14
+ it 'allows environment name' do
15
+ api_expects(:environments, :index) do |p|
16
+ p[:search] = "name = \"env1\""
17
+ end.returns(index_response([{'id' => 1}]))
18
+ # FIXME: Called twice because of environment_id being mentioned twice in the docs
19
+ api_expects(:environments, :index) do |p|
20
+ p[:search] = "name = \"env1\""
21
+ end.returns(index_response([{'id' => 1}]))
22
+ api_expects(:hosts, :update) do |p|
23
+ p['host']['environment_id'] == 1 &&
24
+ p['id'] == '1'
25
+ end
26
+ run_cmd(%w(host update --id 1 --puppet-environment env1))
27
+ end
28
+
29
+ it 'allows puppet ca proxy id' do
30
+ api_expects(:hosts, :update).with_params({
31
+ :id => '1',
32
+ :host => { :puppet_ca_proxy_id => 1 }
33
+ })
34
+ run_cmd(%w(host update --id 1 --puppet-ca-proxy-id 1))
35
+ end
36
+
37
+ it 'allows puppet ca proxy name' do
38
+ api_expects(:smart_proxies, :index) do |p|
39
+ p[:search] = "name = \"sp1\""
40
+ end.returns(index_response([{'id' => 1}]))
41
+ api_expects(:hosts, :update) do |p|
42
+ p['host']['puppet_ca_proxy_id'] == 1 &&
43
+ p['id'] == '1'
44
+ end
45
+ run_cmd(%w(host update --id 1 --puppet-ca-proxy sp1))
46
+ end
47
+
48
+ it 'allows puppet class ids' do
49
+ api_expects(:hosts, :update) do |p|
50
+ p['host']['puppetclass_ids'] == ['1','2'] &&
51
+ p['id'] == '1'
52
+ end
53
+ run_cmd(%w(host update --id 1 --puppet-class-ids 1,2))
54
+ end
55
+
56
+ it 'allows puppet class names' do
57
+ api_expects(:puppetclasses, :index) do |p|
58
+ p[:search] = "name = \"pc1\" or name = \"pc2\""
59
+ end.returns(index_response('puppetclasses' => [
60
+ {'id' => 1, 'name' => 'pc1'},
61
+ {'id' => 2, 'name' => 'pc2'}
62
+ ]))
63
+ # FIXME: Called twice because of puppetclass_ids being mentioned twice in the docs
64
+ api_expects(:puppetclasses, :index) do |p|
65
+ p[:search] = "name = \"pc1\" or name = \"pc2\""
66
+ end.returns(index_response('puppetclasses' => [
67
+ {'id' => 1, 'name' => 'pc1'},
68
+ {'id' => 2, 'name' => 'pc2'}
69
+ ]))
70
+ api_expects(:hosts, :update) do |p|
71
+ p['host']['puppetclass_ids'] == [1,2] &&
72
+ p['id'] == '1'
73
+ end
74
+ run_cmd(%w(host update --id 1 --puppet-classes pc1,pc2))
75
+ end
76
+
77
+ it 'allows puppet proxy id' do
78
+ api_expects(:hosts, :update).with_params({
79
+ :id => '1',
80
+ :host => { :puppet_proxy_id => 1 }
81
+ })
82
+ run_cmd(%w(host update --id 1 --puppet-proxy-id 1))
83
+ end
84
+
85
+ it 'allows puppet proxy name' do
86
+ api_expects(:smart_proxies, :index) do |p|
87
+ p[:search] = "name = \"sp1\""
88
+ end.returns(index_response([{'id' => 1}]))
89
+ api_expects(:hosts, :update) do |p|
90
+ p['host']['puppet_proxy_id'] == 1 &&
91
+ p['id'] == '1'
92
+ end
93
+ run_cmd(%w(host update --id 1 --puppet-proxy sp1))
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,149 @@
1
+ require_relative '../test_helper'
2
+
3
+ module HammerCLIForemanPuppet
4
+ describe Hostgroup do
5
+ describe CreateCommand do
6
+ it 'allows puppet environment id' do
7
+ api_expects(:hostgroups, :create) do |p|
8
+ p['hostgroup']['environment_id'] == 1 &&
9
+ p['hostgroup']['name'] == 'hg1'
10
+ end
11
+ run_cmd(%w[hostgroup create --name hg1 --puppet-environment-id 1])
12
+ end
13
+
14
+ it 'allows puppet environment name' do
15
+ api_expects(:environments, :index) do |p|
16
+ p[:search] == 'name = "env1"'
17
+ end.returns(index_response([{ 'id' => 1 }]))
18
+ # FIXME: Called twice because of environment_id being mentioned twice in the docs
19
+ api_expects(:environments, :index) do |p|
20
+ p[:search] == 'name = "env1"'
21
+ end.returns(index_response([{ 'id' => 1 }]))
22
+ api_expects(:hostgroups, :create) do |p|
23
+ p['hostgroup']['environment_id'] == 1 &&
24
+ p['hostgroup']['name'] == 'hg1'
25
+ end
26
+ run_cmd(%w[hostgroup create --name hg1 --puppet-environment env1])
27
+ end
28
+
29
+ it 'allows puppet ca proxy id' do
30
+ api_expects(:hostgroups, :create).with_params({
31
+ :hostgroup => {
32
+ :name => 'hg1',
33
+ :puppet_ca_proxy_id => 1
34
+ }
35
+ })
36
+ run_cmd(%w(hostgroup create --name hg1 --puppet-ca-proxy-id 1))
37
+ end
38
+
39
+ it 'allows puppet ca proxy name' do
40
+ api_expects(:smart_proxies, :index) do |p|
41
+ p[:search] = "name = \"sp1\""
42
+ end.returns(index_response([{'id' => 1}]))
43
+ api_expects(:hostgroups, :create) do |p|
44
+ p['hostgroup']['puppet_ca_proxy_id'] == 1 &&
45
+ p['hostgroup']['name'] == 'hg1'
46
+ end
47
+ run_cmd(%w(hostgroup create --name hg1 --puppet-ca-proxy sp1))
48
+ end
49
+
50
+ it 'allows puppet class ids' do
51
+ api_expects(:hostgroups, :create) do |p|
52
+ p['hostgroup']['puppetclass_ids'] == ['1','2'] &&
53
+ p['hostgroup']['name'] == 'hg1'
54
+ end
55
+ run_cmd(%w(hostgroup create --name hg1 --puppet-class-ids 1,2))
56
+ end
57
+
58
+ it 'allows puppet class names' do
59
+ api_expects(:puppetclasses, :index) do |p|
60
+ p[:search] = "name = \"pc1\" or name = \"pc2\""
61
+ end.returns(index_response('puppetclasses' => [
62
+ {'id' => 1, 'name' => 'pc1'},
63
+ {'id' => 2, 'name' => 'pc2'}
64
+ ]))
65
+ # FIXME: Called twice because of puppetclass_ids being mentioned twice in the docs
66
+ api_expects(:puppetclasses, :index) do |p|
67
+ p[:search] = "name = \"pc1\" or name = \"pc2\""
68
+ end.returns(index_response('puppetclasses' => [
69
+ {'id' => 1, 'name' => 'pc1'},
70
+ {'id' => 2, 'name' => 'pc2'}
71
+ ]))
72
+ api_expects(:hostgroups, :create) do |p|
73
+ p['hostgroup']['puppetclass_ids'] == [1,2] &&
74
+ p['hostgroup']['name'] == 'hg1'
75
+ end
76
+ run_cmd(%w(hostgroup create --name hg1 --puppet-classes pc1,pc2))
77
+ end
78
+
79
+ it 'allows puppet class names that exceeds entries_per_page' do
80
+ search_objects = []
81
+ response_objects = []
82
+ ids = []
83
+ names = []
84
+ 1100.times.with_object('pc').each do |id, name|
85
+ next_name = "\"#{name}#{id}\""
86
+ search_objects << "name = #{next_name}"
87
+ response_objects << { 'id' => id, 'name' => next_name }
88
+ ids << id
89
+ names << next_name
90
+ end
91
+
92
+ api_expects(:puppetclasses, :index) do |p|
93
+ p[:search] == search_objects.join(' or ') &&
94
+ p[:page].to_i == 1 &&
95
+ p[:per_page].to_i == HammerCLIForeman::IdResolver::ALL_PER_PAGE
96
+ end.returns(
97
+ index_response('puppetclasses' => response_objects[0...1000]))
98
+
99
+ api_expects(:puppetclasses, :index) do |p|
100
+ p[:search] == search_objects.join(' or ') &&
101
+ p[:page].to_i == 2 &&
102
+ p[:per_page].to_i == HammerCLIForeman::IdResolver::ALL_PER_PAGE
103
+ end.returns(index_response('puppetclasses' => response_objects[1000...1100]))
104
+
105
+ # FIXME: Called twice because of puppetclass_ids being mentioned twice in the docs
106
+ api_expects(:puppetclasses, :index) do |p|
107
+ p[:search] == search_objects.join(' or ') &&
108
+ p[:page].to_i == 1 &&
109
+ p[:per_page].to_i == HammerCLIForeman::IdResolver::ALL_PER_PAGE
110
+ end.returns(
111
+ index_response('puppetclasses' => response_objects[0...1000]))
112
+
113
+ api_expects(:puppetclasses, :index) do |p|
114
+ p[:search] == search_objects.join(' or ') &&
115
+ p[:page].to_i == 2 &&
116
+ p[:per_page].to_i == HammerCLIForeman::IdResolver::ALL_PER_PAGE
117
+ end.returns(index_response('puppetclasses' => response_objects[1000...1100]))
118
+
119
+ api_expects(:hostgroups, :create) do |p|
120
+ p['hostgroup']['name'] == 'hg1' &&
121
+ p['hostgroup']['puppetclass_ids'] == ids
122
+ end
123
+
124
+ run_cmd(%w[hostgroup create --name hg1 --puppet-classes] << names.join(',').tr('"', ''))
125
+ end
126
+
127
+ it 'allows puppet proxy id' do
128
+ api_expects(:hostgroups, :create).with_params({
129
+ :hostgroup => {
130
+ :name => 'hg1',
131
+ :puppet_proxy_id => 1
132
+ }
133
+ })
134
+ run_cmd(%w(hostgroup create --name hg1 --puppet-proxy-id 1))
135
+ end
136
+
137
+ it 'allows puppet proxy name' do
138
+ api_expects(:smart_proxies, :index) do |p|
139
+ p[:search] = "name = \"sp1\""
140
+ end.returns(index_response([{'id' => 1}]))
141
+ api_expects(:hostgroups, :create) do |p|
142
+ p['hostgroup']['puppet_proxy_id'] == 1 &&
143
+ p['hostgroup']['name'] == 'hg1'
144
+ end
145
+ run_cmd(%w(hostgroup create --name hg1 --puppet-proxy sp1))
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,97 @@
1
+ require_relative '../test_helper'
2
+
3
+ module HammerCLIForemanPuppet
4
+ describe Hostgroup do
5
+ describe UpdateCommand do
6
+ it 'allows environment id' do
7
+ api_expects(:hostgroups, :update) do |p|
8
+ p['hostgroup']['environment_id'] == 1 &&
9
+ p['id'] == '1'
10
+ end
11
+ run_cmd(%w(hostgroup update --id 1 --puppet-environment-id 1))
12
+ end
13
+
14
+ it 'allows environment name' do
15
+ api_expects(:environments, :index) do |p|
16
+ p[:search] = "name = \"env1\""
17
+ end.returns(index_response([{'id' => 1}]))
18
+ # FIXME: Called twice because of environment_id being mentioned twice in the docs
19
+ api_expects(:environments, :index) do |p|
20
+ p[:search] = "name = \"env1\""
21
+ end.returns(index_response([{'id' => 1}]))
22
+ api_expects(:hostgroups, :update) do |p|
23
+ p['hostgroup']['environment_id'] == 1 &&
24
+ p['id'] == '1'
25
+ end
26
+ run_cmd(%w(hostgroup update --id 1 --puppet-environment env1))
27
+ end
28
+
29
+ it 'allows puppet ca proxy id' do
30
+ api_expects(:hostgroups, :update).with_params({
31
+ :id => '1',
32
+ :hostgroup => { :puppet_ca_proxy_id => 1 }
33
+ })
34
+ run_cmd(%w(hostgroup update --id 1 --puppet-ca-proxy-id 1))
35
+ end
36
+
37
+ it 'allows puppet ca proxy name' do
38
+ api_expects(:smart_proxies, :index) do |p|
39
+ p[:search] = "name = \"sp1\""
40
+ end.returns(index_response([{'id' => 1}]))
41
+ api_expects(:hostgroups, :update) do |p|
42
+ p['hostgroup']['puppet_ca_proxy_id'] == 1 &&
43
+ p['id'] == '1'
44
+ end
45
+ run_cmd(%w(hostgroup update --id 1 --puppet-ca-proxy sp1))
46
+ end
47
+
48
+ it 'allows puppet class ids' do
49
+ api_expects(:hostgroups, :update) do |p|
50
+ p['hostgroup']['puppetclass_ids'] == ['1','2'] &&
51
+ p['id'] == '1'
52
+ end
53
+ run_cmd(%w(hostgroup update --id 1 --puppet-class-ids 1,2))
54
+ end
55
+
56
+ it 'allows puppet class names' do
57
+ api_expects(:puppetclasses, :index) do |p|
58
+ p[:search] = "name = \"pc1\" or name = \"pc2\""
59
+ end.returns(index_response('puppetclasses' => [
60
+ {'id' => 1, 'name' => 'pc1'},
61
+ {'id' => 2, 'name' => 'pc2'}
62
+ ]))
63
+ # FIXME: Called twice because of puppetclass_ids being mentioned twice in the docs
64
+ api_expects(:puppetclasses, :index) do |p|
65
+ p[:search] = "name = \"pc1\" or name = \"pc2\""
66
+ end.returns(index_response('puppetclasses' => [
67
+ {'id' => 1, 'name' => 'pc1'},
68
+ {'id' => 2, 'name' => 'pc2'}
69
+ ]))
70
+ api_expects(:hostgroups, :update) do |p|
71
+ p['hostgroup']['puppetclass_ids'] == [1,2] &&
72
+ p['id'] == '1'
73
+ end
74
+ run_cmd(%w(hostgroup update --id 1 --puppet-classes pc1,pc2))
75
+ end
76
+
77
+ it 'allows puppet proxy id' do
78
+ api_expects(:hostgroups, :update).with_params({
79
+ :id => '1',
80
+ :hostgroup => { :puppet_proxy_id => 1 }
81
+ })
82
+ run_cmd(%w(hostgroup update --id 1 --puppet-proxy-id 1))
83
+ end
84
+
85
+ it 'allows puppet proxy name' do
86
+ api_expects(:smart_proxies, :index) do |p|
87
+ p[:search] = "name = \"sp1\""
88
+ end.returns(index_response([{'id' => 1}]))
89
+ api_expects(:hostgroups, :update) do |p|
90
+ p['hostgroup']['puppet_proxy_id'] == 1 &&
91
+ p['id'] == '1'
92
+ end
93
+ run_cmd(%w(hostgroup update --id 1 --puppet-proxy sp1))
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,86 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ describe 'proxy' do
4
+ describe 'import-classes' do
5
+ let(:cmd) { ['proxy', 'import-classes'] }
6
+ let(:params) { ['--id=83'] }
7
+ let(:report) do
8
+ {
9
+ 'message' => 'Successfully updated environment and puppetclasses from the on-disk puppet installation',
10
+ 'environments_with_new_puppetclasses' => 2,
11
+ 'environments_updated_puppetclasses' => 0,
12
+ 'environments_obsolete' => 0,
13
+ 'environments_ignored' => 0,
14
+ 'results' => [{
15
+ 'name' => 'development',
16
+ 'actions' => [ 'new', 'update' ],
17
+ 'new_puppetclasses' => [
18
+ 'motd',
19
+ 'hammer'
20
+ ],
21
+ 'updated_puppetclasses' => [
22
+ 'stdlib',
23
+ 'vim'
24
+ ]
25
+ },{
26
+ 'name' => 'production',
27
+ 'actions' => [ 'obsolete', 'ignore' ],
28
+ 'obsolete_puppetclasses' => [
29
+ 'apache'
30
+ ],
31
+ 'ignored_puppetclasses' => [
32
+ 'hammer'
33
+ ]
34
+ }]
35
+ }
36
+ end
37
+ let(:no_change_report) do
38
+ {
39
+ 'message' => 'No changes to your environments detected'
40
+ }
41
+ end
42
+
43
+ it 'prints detailed report' do
44
+ api_expects(:smart_proxies, :import_puppetclasses, 'Import classes')
45
+ .with_params('id' => '83')
46
+ .returns(report)
47
+
48
+ output = OutputMatcher.new([
49
+ 'Result:',
50
+ ' Successfully updated environment and puppetclasses from the on-disk puppet installation',
51
+ 'Changed environments:',
52
+ ' 1) development',
53
+ ' New classes:',
54
+ ' motd',
55
+ ' hammer',
56
+ ' Updated classes:',
57
+ ' stdlib',
58
+ ' vim',
59
+ ' 2) production',
60
+ ' Removed classes:',
61
+ ' apache',
62
+ ' Ignored classes:',
63
+ ' hammer'
64
+ ])
65
+ expected_result = success_result(output)
66
+
67
+ result = run_cmd(cmd + params)
68
+ assert_cmd(expected_result, result)
69
+ end
70
+
71
+ it 'prints a message when nothig has changed' do
72
+ api_expects(:smart_proxies, :import_puppetclasses, 'Import classes')
73
+ .with_params('id' => '83')
74
+ .returns(no_change_report)
75
+
76
+ output = OutputMatcher.new([
77
+ 'Result:',
78
+ ' No changes to your environments detected'
79
+ ])
80
+ expected_result = success_result(output)
81
+
82
+ result = run_cmd(cmd + params)
83
+ assert_cmd(expected_result, result)
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,97 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ describe 'sc-params update' do
4
+ let(:cmd) { %w[sc-param update] }
5
+
6
+ it 'does not allow to update parameter name' do
7
+ params = ['--id=1', '--new-name=name2']
8
+
9
+ expected_result = usage_error_result(
10
+ cmd,
11
+ "Unrecognised option '--new-name'.",
12
+ 'Could not update the parameter'
13
+ )
14
+
15
+ api_expects_no_call
16
+ result = run_cmd(cmd + params)
17
+ assert_cmd(expected_result, result)
18
+ end
19
+ end
20
+
21
+ describe 'sc-params add-matcher' do
22
+ let(:cmd) { %w[sc-param add-matcher] }
23
+ let(:override_value) { 'something' }
24
+ let(:match) { 'domain = example.com' }
25
+ let(:puppet_class) { { 'name' => 'motd', 'id' => '1' } }
26
+ let(:parameter) { { 'name' => 'content', 'id' => '2' } }
27
+ let(:base) do
28
+ [
29
+ '--puppet-class', puppet_class['name'],
30
+ '--smart-class-parameter', parameter['name'],
31
+ '--match', match
32
+ ]
33
+ end
34
+
35
+ def api_expects_parameter_search(puppet_class, parameter)
36
+ api_expects(:puppetclasses, :index, 'Find puppet class') do |par|
37
+ par[:search] == %Q(name = "#{puppet_class['name']}")
38
+ end.returns(index_response('motd' => [puppet_class]))
39
+
40
+ api_expects(:smart_class_parameters, :index, 'Find smart parameter') do |par|
41
+ par[:search] == %Q(key = "#{parameter['name']}") &&
42
+ par[:puppetclass_id] == puppet_class['id']
43
+ end.returns(index_response([parameter]))
44
+ end
45
+
46
+ it 'allows to set value' do
47
+ params = ['--value', override_value]
48
+ expected_result = success_result("Override value created.\n")
49
+
50
+ api_expects_parameter_search(puppet_class, parameter)
51
+
52
+ api_expects(:override_values, :create, 'Create override value').with_params(
53
+ smart_class_parameter_id: parameter['id'],
54
+ override_value: {
55
+ match: match,
56
+ value: override_value
57
+ }
58
+ )
59
+
60
+ result = run_cmd(cmd + base + params)
61
+ assert_cmd(expected_result, result)
62
+ end
63
+
64
+ it 'allows to set value with disabled puppet default' do
65
+ params = ['--value', override_value, '--omit', false]
66
+ expected_result = success_result("Override value created.\n")
67
+
68
+ api_expects_parameter_search(puppet_class, parameter)
69
+
70
+ api_expects(:override_values, :create, 'Create override value').with_params(
71
+ smart_class_parameter_id: parameter['id'],
72
+ override_value: {
73
+ match: match,
74
+ value: override_value,
75
+ omit: false
76
+ }
77
+ )
78
+
79
+ result = run_cmd(cmd + base + params)
80
+ assert_cmd(expected_result, result)
81
+ end
82
+
83
+ it 'does not allow to use puppet default and value at the same time' do
84
+ params = ['--value', 'something', '--omit', true]
85
+
86
+ expected_result = usage_error_result(
87
+ cmd,
88
+ 'Cannot use --value when --omit is true.',
89
+ 'Could not create the override value'
90
+ )
91
+
92
+ api_expects_parameter_search(puppet_class, parameter)
93
+
94
+ result = run_cmd(cmd + base + params)
95
+ assert_cmd(expected_result, result)
96
+ end
97
+ end