diff --git a/spec/lib/task_helpers/imports/custom_buttons_spec.rb b/spec/lib/task_helpers/imports/custom_buttons_spec.rb new file mode 100644 index 000000000000..c40b3e61ca34 --- /dev/null +++ b/spec/lib/task_helpers/imports/custom_buttons_spec.rb @@ -0,0 +1,38 @@ +describe TaskHelpers::Imports::CustomButtons do + let(:data_dir) { File.join(File.expand_path(__dir__), 'data', 'custom_buttons') } + let(:custom_button_file) { 'CustomButtonSet.yaml' } + let(:custom_button_set_name) { 'group1|Vm|' } + let(:custom_button_set_description) { 'group1' } + + describe "#import" do + let(:options) { {:source => source} } + + describe "when the source is a directory" do + let(:source) { data_dir } + + it 'imports all .yaml files in a specified directory' do + expect do + TaskHelpers::Imports::CustomButtons.new.import(options) + end.to_not output.to_stderr + assert_test_custom_button_set_present + end + end + + describe "when the source is a file" do + let(:source) { "#{data_dir}/#{custom_button_file}" } + + it 'imports a specified file' do + expect do + TaskHelpers::Imports::CustomButtons.new.import(options) + end.to_not output.to_stderr + assert_test_custom_button_set_present + end + end + end + + def assert_test_custom_button_set_present + cb = CustomButtonSet.find_by(:name => custom_button_set_name) + expect(cb.custom_buttons.count).to eq(3) + expect(cb.description).to eq(custom_button_set_description) + end +end diff --git a/spec/lib/task_helpers/imports/data/custom_buttons/CustomButtons.yaml b/spec/lib/task_helpers/imports/data/custom_buttons/CustomButtons.yaml new file mode 100644 index 000000000000..a07525f708da --- /dev/null +++ b/spec/lib/task_helpers/imports/data/custom_buttons/CustomButtons.yaml @@ -0,0 +1,134 @@ +--- +custom_button_set: +- attributes: + name: group1|Vm| + description: group1 + set_type: CustomButtonSet + guid: ba4ff235-75eb-4fa4-a9f9-b854d4186c3a + read_only: + set_data: + :button_order: + - 2 + - 3 + - 10 + :button_icon: ff ff-class + :button_color: "#a341ab" + :display: true + :applies_to_class: Vm + :group_index: 1 + mode: + owner_type: + owner_id: + userid: + group_id: + children: + custom_button: + - attributes: + guid: f059931f-8703-4bcf-b876-e482d38ce8ea + description: button 1 + applies_to_class: Vm + visibility_expression: + options: + :button_icon: pficon pficon-cpu + :button_type: default + :display: true + :open_url: false + :display_for: single + :submit_how: one + userid: admin + wait_for_complete: + name: button 1 + visibility: + :roles: + - _ALL_ + applies_to_id: + enablement_expression: + disabled_text: + associations: + resource_action: + - attributes: + action: + resource_type: CustomButton + ae_namespace: SYSTEM + ae_class: PROCESS + ae_instance: Request + ae_message: + ae_attributes: + request: test1 + configuration_template_id: + configuration_template_type: + - attributes: + guid: 3f50d617-851e-451f-95ae-a17fc548cb11 + description: button 2 + applies_to_class: Vm + visibility_expression: + options: + :button_icon: pficon pficon-home + :button_color: "#c03638" + :button_type: default + :display: true + :open_url: false + :display_for: single + :submit_how: one + userid: admin + wait_for_complete: + name: button 2 + visibility: + :roles: + - _ALL_ + applies_to_id: + enablement_expression: + disabled_text: + associations: + resource_action: + - attributes: + action: + resource_type: CustomButton + ae_namespace: SYSTEM + ae_class: PROCESS + ae_instance: Request + ae_message: + ae_attributes: + request: test2 + configuration_template_id: + configuration_template_type: + - attributes: + guid: d3cd608a-f476-48b7-aa25-a930ec046e00 + description: multiselect + applies_to_class: Vm + visibility_expression: !ruby/object:MiqExpression + exp: + "=": + field: Vm-power_state + value: 'on' + context_type: + options: + :button_icon: fa fa-users + :button_color: "#996633" + :button_type: default + :display: true + :open_url: false + :display_for: both + :submit_how: all + userid: admin + wait_for_complete: + name: multiselect + visibility: + :roles: + - _ALL_ + applies_to_id: + enablement_expression: + disabled_text: + associations: + resource_action: + - attributes: + action: + resource_type: CustomButton + ae_namespace: SYSTEM + ae_class: PROCESS + ae_instance: Request + ae_message: + ae_attributes: + request: multiselect + configuration_template_id: + configuration_template_type: \ No newline at end of file