hammer_cli_foreman 0.10.2 → 0.11.0
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.
- checksums.yaml +4 -4
- data/config/foreman.yml +4 -0
- data/doc/release_notes.md +21 -5
- data/lib/hammer_cli_foreman/api/connection.rb +14 -5
- data/lib/hammer_cli_foreman/api/interactive_basic_auth.rb +17 -5
- data/lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb +27 -8
- data/lib/hammer_cli_foreman/auth.rb +14 -10
- data/lib/hammer_cli_foreman/auth_source_ldap.rb +38 -34
- data/lib/hammer_cli_foreman/compute_resource.rb +24 -0
- data/lib/hammer_cli_foreman/filter.rb +6 -2
- data/lib/hammer_cli_foreman/host.rb +2 -7
- data/lib/hammer_cli_foreman/hostgroup.rb +1 -0
- data/lib/hammer_cli_foreman/id_resolver.rb +27 -7
- data/lib/hammer_cli_foreman/location.rb +1 -0
- data/lib/hammer_cli_foreman/organization.rb +1 -0
- data/lib/hammer_cli_foreman/references.rb +10 -2
- data/lib/hammer_cli_foreman/smart_class_parameter.rb +10 -1
- data/lib/hammer_cli_foreman/smart_variable.rb +24 -16
- data/lib/hammer_cli_foreman/subnet.rb +33 -3
- data/lib/hammer_cli_foreman/template.rb +1 -1
- data/lib/hammer_cli_foreman/testing/api_expectations.rb +3 -1
- data/lib/hammer_cli_foreman/user.rb +37 -3
- data/lib/hammer_cli_foreman/version.rb +1 -1
- data/locale/ca/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/de/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/en/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/en_GB/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/es/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/fr/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/it/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ja/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ko/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/pt_BR/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ru/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/zh_CN/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/zh_TW/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/test/functional/filter_test.rb +146 -0
- data/test/functional/host_test.rb +12 -0
- data/test/functional/smart_variable_test.rb +4 -4
- data/test/functional/template_test.rb +20 -0
- data/test/functional/user_test.rb +13 -13
- data/test/unit/api/interactive_basic_auth_test.rb +18 -0
- data/test/unit/api/session_authenticator_wrapper_test.rb +72 -2
- data/test/unit/apipie_resource_mock.rb +3 -0
- data/test/unit/auth_source_ldap_test.rb +2 -3
- data/test/unit/commands_test.rb +1 -1
- data/test/unit/compute_resource_test.rb +24 -0
- data/test/unit/host_test.rb +1 -1
- data/test/unit/hostgroup_test.rb +1 -1
- data/test/unit/id_resolver_test.rb +59 -21
- data/test/unit/subnet_test.rb +1 -0
- data/test/unit/user_test.rb +7 -1
- metadata +35 -33
@@ -40,13 +40,13 @@ module HammerCLIForeman
|
|
40
40
|
:fact_value => [],
|
41
41
|
:filter => [],
|
42
42
|
:host => [ s_name(_("Host name")) ],
|
43
|
-
:hostgroup => [ s_name(_("Hostgroup name")), s("title", _("Hostgroup title")
|
43
|
+
:hostgroup => [ s_name(_("Hostgroup name")), s("title", _("Hostgroup title"), :editable => false) ],
|
44
44
|
# :image => [],
|
45
45
|
:interface => [],
|
46
|
-
:location => [ s_name(_("Location name")) ],
|
46
|
+
:location => [ s_name(_("Location name")), s("title", _("Location title"), :editable => false) ],
|
47
47
|
:medium => [ s_name(_("Medium name")) ],
|
48
48
|
:model => [ s_name(_("Model name")) ],
|
49
|
-
:organization => [ s_name(_("Organization name")) ],
|
49
|
+
:organization => [ s_name(_("Organization name")), s("title", _("Organization title"), :editable => false) ],
|
50
50
|
:operatingsystem => [ s("title", _("Operating system title"), :editable => false) ],
|
51
51
|
:override_value => [],
|
52
52
|
:ptable => [ s_name(_("Partition table name")) ],
|
@@ -144,7 +144,13 @@ module HammerCLIForeman
|
|
144
144
|
end
|
145
145
|
|
146
146
|
def get_ids(resource_name, options)
|
147
|
-
options[HammerCLI.option_accessor_name("ids")]
|
147
|
+
if (ids = options[HammerCLI.option_accessor_name("ids")])
|
148
|
+
ids
|
149
|
+
elsif !options_empty?(@api.resource(resource_name), options)
|
150
|
+
find_resources(resource_name, options).map{|r| r['id']}
|
151
|
+
else
|
152
|
+
[]
|
153
|
+
end
|
148
154
|
end
|
149
155
|
|
150
156
|
def find_resources(resource_name, options)
|
@@ -157,9 +163,16 @@ module HammerCLIForeman
|
|
157
163
|
def find_puppetclasses(options)
|
158
164
|
resource_name = :puppetclasses
|
159
165
|
resource = @api.resource(resource_name)
|
160
|
-
|
161
|
-
|
162
|
-
|
166
|
+
|
167
|
+
if (ids = options[HammerCLI.option_accessor_name("ids")])
|
168
|
+
ids
|
169
|
+
elsif !options_empty?(resource, options)
|
170
|
+
results = resolved_call(resource_name, :index, options).first.values.flatten
|
171
|
+
raise ResolverError.new(_("one of %s not found") % resource.name, resource) if results.count < expected_record_count(options, resource)
|
172
|
+
results
|
173
|
+
else
|
174
|
+
[]
|
175
|
+
end
|
163
176
|
end
|
164
177
|
|
165
178
|
def find_resource(resource_name, options)
|
@@ -249,6 +262,13 @@ module HammerCLIForeman
|
|
249
262
|
pick_result(results, resource)['id']
|
250
263
|
end
|
251
264
|
|
265
|
+
def options_empty?(resource, options)
|
266
|
+
searchables(resource).any? do |s|
|
267
|
+
values = options[HammerCLI.option_accessor_name(s.plural_name.to_s)]
|
268
|
+
values && values.respond_to?(:empty?) && values.empty?
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
252
272
|
def create_smart_class_parameters_search_options(options)
|
253
273
|
search_options = {}
|
254
274
|
value = options[HammerCLI.option_accessor_name('name')]
|
@@ -13,10 +13,10 @@ module HammerCLIForeman
|
|
13
13
|
def self.taxonomies(dsl)
|
14
14
|
dsl.build do
|
15
15
|
collection :locations, _("Locations"), :numbered => false, :hide_blank => true do
|
16
|
-
custom_field Fields::Reference
|
16
|
+
custom_field Fields::Reference, :name_key => :title
|
17
17
|
end
|
18
18
|
collection :organizations, _("Organizations"), :numbered => false, :hide_blank => true do
|
19
|
-
custom_field Fields::Reference
|
19
|
+
custom_field Fields::Reference, :name_key => :title
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -121,6 +121,14 @@ module HammerCLIForeman
|
|
121
121
|
end
|
122
122
|
end
|
123
123
|
|
124
|
+
def self.all_parameters(dsl)
|
125
|
+
dsl.build do
|
126
|
+
collection :all_parameters, _("All parameters"), :numbered => false do
|
127
|
+
custom_field Fields::KeyValue
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
124
132
|
def self.puppetclasses(dsl)
|
125
133
|
dsl.build do
|
126
134
|
collection :puppetclasses, _("Puppetclasses"), :numbered => false do
|
@@ -107,7 +107,7 @@ module HammerCLIForeman
|
|
107
107
|
|
108
108
|
build_options do |options|
|
109
109
|
options.expand.including(:puppetclasses)
|
110
|
-
options.without(:parameter_type, :validator_type, :override, :required)
|
110
|
+
options.without(:parameter_type, :validator_type, :override, :required, :override_value_order)
|
111
111
|
end
|
112
112
|
|
113
113
|
option "--override", "OVERRIDE", _("Override this parameter."),
|
@@ -119,12 +119,21 @@ module HammerCLIForeman
|
|
119
119
|
['string', 'boolean', 'integer', 'real', 'array', 'hash', 'yaml', 'json'])
|
120
120
|
option "--validator-type", "VALIDATOR_TYPE", _("Type of the validator."),
|
121
121
|
:format => HammerCLI::Options::Normalizers::Enum.new(['regexp', 'list', ''])
|
122
|
+
option "--override-value-order", "OVERRIDE_VALUE_ORDER", _("The order in which values are resolved"),
|
123
|
+
:format => HammerCLI::Options::Normalizers::List.new
|
122
124
|
|
123
125
|
validate_options do
|
124
126
|
if option(:option_name).exist?
|
125
127
|
any(:option_puppetclass_name, :option_puppetclass_id).required
|
126
128
|
end
|
127
129
|
end
|
130
|
+
|
131
|
+
def request_params
|
132
|
+
params = super
|
133
|
+
override_order = params['smart_class_parameter']['override_value_order']
|
134
|
+
params['smart_class_parameter']['override_value_order'] = override_order.join("\n") if override_order.is_a?(Array)
|
135
|
+
params
|
136
|
+
end
|
128
137
|
end
|
129
138
|
|
130
139
|
class AddOverrideValueCommand < HammerCLIForeman::CreateCommand
|
@@ -1,5 +1,27 @@
|
|
1
1
|
module HammerCLIForeman
|
2
2
|
|
3
|
+
module SmartVariableUpdateCreateCommons
|
4
|
+
|
5
|
+
def self.included(base)
|
6
|
+
base.option "--variable-type", "VARIABLE_TYPE", _("Type of the variable."),
|
7
|
+
:format => HammerCLI::Options::Normalizers::Enum.new(
|
8
|
+
['string', 'boolean', 'integer', 'real', 'array', 'hash', 'yaml', 'json'])
|
9
|
+
base.option "--validator-type", "VALIDATOR_TYPE", _("Type of the validator."),
|
10
|
+
:format => HammerCLI::Options::Normalizers::Enum.new(['regexp', 'list', ''])
|
11
|
+
base.option "--override-value-order", "OVERRIDE_VALUE_ORDER", _("The order in which values are resolved"),
|
12
|
+
:format => HammerCLI::Options::Normalizers::List.new
|
13
|
+
|
14
|
+
base.build_options :without => [:variable_type, :validator_type, :override_value_order]
|
15
|
+
end
|
16
|
+
|
17
|
+
def request_params
|
18
|
+
params = super
|
19
|
+
override_order = params['smart_variable']['override_value_order']
|
20
|
+
params['smart_variable']['override_value_order'] = override_order.join("\n") if override_order.is_a?(Array)
|
21
|
+
params
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
3
25
|
class SmartVariablesBriefList < HammerCLIForeman::ListCommand
|
4
26
|
resource :smart_variables, :index
|
5
27
|
command_name 'smart-variables'
|
@@ -80,31 +102,17 @@ module HammerCLIForeman
|
|
80
102
|
end
|
81
103
|
|
82
104
|
class CreateCommand < HammerCLIForeman::CreateCommand
|
105
|
+
include SmartVariableUpdateCreateCommons
|
83
106
|
|
84
107
|
success_message _("Smart variable [%{variable}] created")
|
85
108
|
failure_message _("Could not create the smart variable")
|
86
|
-
|
87
|
-
build_options :without => [:variable_type, :validator_type]
|
88
|
-
|
89
|
-
option "--variable-type", "VARIABLE_TYPE", _("Type of the variable."),
|
90
|
-
:format => HammerCLI::Options::Normalizers::Enum.new(
|
91
|
-
['string', 'boolean', 'integer', 'real', 'array', 'hash', 'yaml', 'json'])
|
92
|
-
option "--validator-type", "VALIDATOR_TYPE", _("Type of the validator."),
|
93
|
-
:format => HammerCLI::Options::Normalizers::Enum.new(['regexp', 'list', ''])
|
94
109
|
end
|
95
110
|
|
96
111
|
class UpdateCommand < HammerCLIForeman::UpdateCommand
|
112
|
+
include SmartVariableUpdateCreateCommons
|
97
113
|
|
98
114
|
success_message _("Smart variable [%{variable}] updated")
|
99
115
|
failure_message _("Could not update the smart variable")
|
100
|
-
|
101
|
-
build_options :without => [:variable_type, :validator_type]
|
102
|
-
|
103
|
-
option "--variable-type", "VARIABLE_TYPE", _("Type of the variable."),
|
104
|
-
:format => HammerCLI::Options::Normalizers::Enum.new(
|
105
|
-
['string', 'boolean', 'integer', 'real', 'array', 'hash', 'yaml', 'json'])
|
106
|
-
option "--validator-type", "VALIDATOR_TYPE", _("Type of the validator."),
|
107
|
-
:format => HammerCLI::Options::Normalizers::Enum.new(['regexp', 'list', ''])
|
108
116
|
end
|
109
117
|
|
110
118
|
|
@@ -11,6 +11,7 @@ module HammerCLIForeman
|
|
11
11
|
field :name, _("Name")
|
12
12
|
field :network, _("Network")
|
13
13
|
field :mask, _("Mask")
|
14
|
+
field :vlanid, _("VLAN ID")
|
14
15
|
end
|
15
16
|
|
16
17
|
build_options
|
@@ -20,6 +21,7 @@ module HammerCLIForeman
|
|
20
21
|
class InfoCommand < HammerCLIForeman::InfoCommand
|
21
22
|
|
22
23
|
output ListCommand.output_definition do
|
24
|
+
field :description, _("Description"), Fields::LongText, :hide_blank => true
|
23
25
|
field :priority, _("Priority")
|
24
26
|
field :dns, _("DNS"), Fields::Reference, :details => :url
|
25
27
|
field :dns_primary, _("Primary DNS")
|
@@ -27,12 +29,12 @@ module HammerCLIForeman
|
|
27
29
|
field :tftp, _("TFTP"), Fields::Reference, :details => :url
|
28
30
|
field :dhcp, _("DHCP"), Fields::Reference, :details => :url
|
29
31
|
field :ipam, _("IPAM")
|
30
|
-
field :vlanid, _("VLAN ID")
|
31
32
|
field :gateway, _("Gateway")
|
32
33
|
field :from, _("From")
|
33
34
|
field :to, _("To")
|
34
35
|
HammerCLIForeman::References.domains(self)
|
35
36
|
HammerCLIForeman::References.taxonomies(self)
|
37
|
+
HammerCLIForeman::References.parameters(self)
|
36
38
|
end
|
37
39
|
|
38
40
|
build_options
|
@@ -44,7 +46,7 @@ module HammerCLIForeman
|
|
44
46
|
success_message _("Subnet created")
|
45
47
|
failure_message _("Could not create the subnet")
|
46
48
|
|
47
|
-
build_options
|
49
|
+
build_options :without => [:subnet_parameters_attributes]
|
48
50
|
end
|
49
51
|
|
50
52
|
|
@@ -53,7 +55,7 @@ module HammerCLIForeman
|
|
53
55
|
success_message _("Subnet updated")
|
54
56
|
failure_message _("Could not update the subnet")
|
55
57
|
|
56
|
-
build_options
|
58
|
+
build_options :without => [:subnet_parameters_attributes]
|
57
59
|
end
|
58
60
|
|
59
61
|
|
@@ -62,6 +64,34 @@ module HammerCLIForeman
|
|
62
64
|
success_message _("Subnet deleted")
|
63
65
|
failure_message _("Could not delete the subnet")
|
64
66
|
|
67
|
+
build_options :without => [:subnet_parameters_attributes]
|
68
|
+
end
|
69
|
+
|
70
|
+
class SetParameterCommand < HammerCLIForeman::Parameter::SetCommand
|
71
|
+
desc _("Create or update parameter for a subnet.")
|
72
|
+
|
73
|
+
success_message_for :update, _("Subnet parameter updated")
|
74
|
+
success_message_for :create, _("New subnet parameter created")
|
75
|
+
failure_message _("Could not set subnet parameter")
|
76
|
+
|
77
|
+
def validate_options
|
78
|
+
super
|
79
|
+
validator.any(:option_subnet_name, :option_subnet_id).required
|
80
|
+
end
|
81
|
+
|
82
|
+
build_options
|
83
|
+
end
|
84
|
+
|
85
|
+
class DeleteParameterCommand < HammerCLIForeman::Parameter::DeleteCommand
|
86
|
+
desc _("Delete parameter for a subnet.")
|
87
|
+
|
88
|
+
success_message _("Subnet parameter deleted")
|
89
|
+
|
90
|
+
def validate_options
|
91
|
+
super
|
92
|
+
validator.any(:option_subnet_name, :option_subnet_id).required
|
93
|
+
end
|
94
|
+
|
65
95
|
build_options
|
66
96
|
end
|
67
97
|
|
@@ -11,6 +11,9 @@ module HammerCLIForeman
|
|
11
11
|
field :login, _("Login")
|
12
12
|
field :full_name, _("Name")
|
13
13
|
field :mail, _("Email")
|
14
|
+
field :admin, _("Admin"), Fields::Boolean
|
15
|
+
field :last_login_on, _("Last login"), Fields::Date
|
16
|
+
field nil, _("Authorized by"), Fields::SingleReference, :key => :auth_source
|
14
17
|
end
|
15
18
|
|
16
19
|
def extend_data(user)
|
@@ -25,12 +28,9 @@ module HammerCLIForeman
|
|
25
28
|
class InfoCommand < HammerCLIForeman::InfoCommand
|
26
29
|
|
27
30
|
output ListCommand.output_definition do
|
28
|
-
field :admin, _("Admin"), Fields::Boolean
|
29
31
|
field :effective_admin, _("Effective admin"), Fields::Boolean
|
30
|
-
field nil, _("Authorized by"), Fields::SingleReference, :key => :auth_source
|
31
32
|
field :locale, _("Locale")
|
32
33
|
field :timezone, _("Timezone")
|
33
|
-
field :last_login_on, _("Last login"), Fields::Date
|
34
34
|
field :description, _("Description")
|
35
35
|
custom_field Fields::Reference, :label => _("Default organization"), :path => [:default_organization]
|
36
36
|
custom_field Fields::Reference, :label => _("Default location"), :path => [:default_location]
|
@@ -55,6 +55,21 @@ module HammerCLIForeman
|
|
55
55
|
def self.included(base)
|
56
56
|
base.option '--default-organization', 'DEFAULT_ORGANIZATION_NAME', _("Default organization name")
|
57
57
|
base.option '--default-location', 'DEFAULT_LOCATION_NAME', _("Default location name")
|
58
|
+
base.option "--ask-password", "ASK_PW", " ",
|
59
|
+
:format => HammerCLI::Options::Normalizers::Bool.new
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.ask_password(type)
|
63
|
+
if type == :current
|
64
|
+
prompt = _("Enter user's current password:") + " "
|
65
|
+
elsif type == :new
|
66
|
+
prompt = _("Enter user's new password:") + " "
|
67
|
+
end
|
68
|
+
ask(prompt) {|q| q.echo = false}
|
69
|
+
end
|
70
|
+
|
71
|
+
def current_logged_user
|
72
|
+
HammerCLIForeman.foreman_api_connection.resource(:users).call(:show, :id => HammerCLIForeman.foreman_api_connection.authenticator.user(true))
|
58
73
|
end
|
59
74
|
|
60
75
|
def request_params
|
@@ -63,6 +78,11 @@ module HammerCLIForeman
|
|
63
78
|
params['user']['default_organization_id'] ||= org_id unless org_id.nil?
|
64
79
|
loc_id = location_id(option_default_location)
|
65
80
|
params['user']['default_location_id'] ||= loc_id unless loc_id.nil?
|
81
|
+
params['user']['password'] = option_password unless option_password.nil?
|
82
|
+
|
83
|
+
if option_ask_password
|
84
|
+
params['user']['password'] = HammerCLIForeman::User::CommonUpdateOptions::ask_password(:new)
|
85
|
+
end
|
66
86
|
params
|
67
87
|
end
|
68
88
|
|
@@ -89,6 +109,20 @@ module HammerCLIForeman
|
|
89
109
|
failure_message _("Could not update the user")
|
90
110
|
|
91
111
|
include CommonUpdateOptions
|
112
|
+
|
113
|
+
def request_params
|
114
|
+
params = super
|
115
|
+
|
116
|
+
if (option_password || option_ask_password)
|
117
|
+
if current_logged_user["id"].to_s == params["id"].to_s
|
118
|
+
if (!option_current_password && (option_password || option_ask_password))
|
119
|
+
params['user']['current_password'] = HammerCLIForeman::User::CommonUpdateOptions::ask_password(:current)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
params
|
124
|
+
end
|
125
|
+
|
92
126
|
build_options
|
93
127
|
end
|
94
128
|
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,146 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'test_helper')
|
2
|
+
|
3
|
+
describe 'filter' do
|
4
|
+
def api_expects_filter_info(options)
|
5
|
+
override = !!options[:override]
|
6
|
+
api_expects(:filters, :show, 'Get filter info').with_params({
|
7
|
+
:id => '1'
|
8
|
+
}).returns(@filter.merge('override?' => override))
|
9
|
+
end
|
10
|
+
|
11
|
+
def taxonomy_usage_error(action, cmd)
|
12
|
+
usage_error_result(
|
13
|
+
cmd,
|
14
|
+
'Organizations and locations can be set only for overriding filters',
|
15
|
+
"Could not #{action} the permission filter")
|
16
|
+
end
|
17
|
+
|
18
|
+
def assert_update_success(result)
|
19
|
+
assert_cmd(success_result("Permission filter for [User] updated\n"), result)
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'create' do
|
23
|
+
before do
|
24
|
+
@cmd = %w(filter create)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'prints error when taxonomies are used for a not-overriding filter' do
|
28
|
+
params = ['--organization-ids=1,2', '--location-ids=3,4', '--override=false']
|
29
|
+
|
30
|
+
api_expects_no_call
|
31
|
+
|
32
|
+
result = run_cmd(@cmd + params)
|
33
|
+
assert_cmd(taxonomy_usage_error('create', @cmd), result)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'update' do
|
38
|
+
before do
|
39
|
+
@cmd = %w(filter update)
|
40
|
+
@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
|
53
|
+
},
|
54
|
+
"permissions" => [{
|
55
|
+
"name" => "view_users",
|
56
|
+
"id" => 164,
|
57
|
+
"resource_type" => "User"
|
58
|
+
}],
|
59
|
+
"locations" => [{
|
60
|
+
"id" => 28,
|
61
|
+
"name" => "location74",
|
62
|
+
"title" => "location74",
|
63
|
+
"description" => nil
|
64
|
+
}],
|
65
|
+
"organizations" => [{
|
66
|
+
"id" => 27,
|
67
|
+
"name" => "organization74",
|
68
|
+
"title" => "organization74",
|
69
|
+
"description" => nil
|
70
|
+
}]
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'resets taxonomies when a filter is not-overriding' do
|
75
|
+
params = ['--id=1']
|
76
|
+
|
77
|
+
api_expects_filter_info(:override => false)
|
78
|
+
api_expects(:filters, :update, 'Update the filter').with_params({
|
79
|
+
'filter' => {
|
80
|
+
'organization_ids' => [],
|
81
|
+
'location_ids' => []
|
82
|
+
}
|
83
|
+
}).returns(@filter)
|
84
|
+
|
85
|
+
assert_update_success(run_cmd(@cmd + params))
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'resets taxonomies when switching a filter to not-overriding' do
|
89
|
+
params = ['--id=1', '--override=false']
|
90
|
+
|
91
|
+
api_expects(:filters, :update, 'Update the filter').with_params({
|
92
|
+
'filter' => {
|
93
|
+
'organization_ids' => [],
|
94
|
+
'location_ids' => []
|
95
|
+
}
|
96
|
+
}).returns(@filter)
|
97
|
+
|
98
|
+
assert_update_success(run_cmd(@cmd + params))
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'can add taxonomies when a filter is overriding' do
|
102
|
+
params = ['--id=1', '--organization-ids=1,2', '--location-ids=3,4']
|
103
|
+
|
104
|
+
api_expects_filter_info(:override => true)
|
105
|
+
api_expects(:filters, :update, 'Update the filter').with_params({
|
106
|
+
'filter' => {
|
107
|
+
'organization_ids' => ['1', '2'],
|
108
|
+
'location_ids' => ['3', '4']
|
109
|
+
}
|
110
|
+
}).returns(@filter)
|
111
|
+
|
112
|
+
assert_update_success(run_cmd(@cmd + params))
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'can add taxonomies when switching a filter to overriding' do
|
116
|
+
params = ['--id=1', '--organization-ids=1,2', '--location-ids=3,4', '--override=true']
|
117
|
+
|
118
|
+
api_expects(:filters, :update, 'Update the filter').with_params({
|
119
|
+
'filter' => {
|
120
|
+
'organization_ids' => ['1', '2'],
|
121
|
+
'location_ids' => ['3', '4']
|
122
|
+
}
|
123
|
+
}).returns(@filter)
|
124
|
+
|
125
|
+
assert_update_success(run_cmd(@cmd + params))
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'prints error when taxonomies are used on not-overriding' do
|
129
|
+
params = ['--id=1', '--organization-ids=1,2', '--location-ids=3,4']
|
130
|
+
|
131
|
+
api_expects_filter_info(:override => false)
|
132
|
+
|
133
|
+
result = run_cmd(@cmd + params)
|
134
|
+
assert_cmd(taxonomy_usage_error('update', @cmd), result)
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'prints error when taxonomies are used when switching a filter to not-overriding' do
|
138
|
+
params = ['--id=1', '--organization-ids=1,2', '--location-ids=3,4', '--override=false']
|
139
|
+
|
140
|
+
api_expects_no_call
|
141
|
+
|
142
|
+
result = run_cmd(@cmd + params)
|
143
|
+
assert_cmd(taxonomy_usage_error('update', @cmd), result)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|