require File.join(File.dirname(__FILE__), 'test_helper') require 'hammer_cli_foreman/operating_system' describe HammerCLIForeman::OperatingSystem do context 'AddProvisioningTemplateCommand' do before do @cmd = ['os', 'add-provisioning-template'] @os_before_update = { 'id' => 1, 'provisioning_templates' => [] } @os_after_update1 = { 'id' => 1, 'provisioning_templates' => [{ id: 1, name: 'test template' }] } @os_after_update2 = { 'id' => 1, 'provisioning_templates' => [{ id: 1, name: 'test template 1' }, { id: 2, name: 'test template 2' }] } @search_result = [{ 'id' => 1, 'name' => 'test template 1' }, { 'id' => 2, 'name' => 'test template 2' }] @provisioning_templates = [{ 'id' => 1, 'name' => 'test template 1' }, { 'id' => 2, 'name' => 'test template 2' }] end it 'should print error on missing --id' do expected_result = "Could not associate the provisioning templates:\n Missing arguments for '--id'.\n" api_expects_no_call result = run_cmd(@cmd) assert_match(expected_result, result.err) end it 'should associate the given provisioning template-by id' do params = ['--id=1', '--provisioning-template-id=1'] api_expects(:operatingsystems, :show).with_params("id": '1').returns(@os_before_update) api_expects(:operatingsystems, :update) do |par| par['id'] == '1' && par['operatingsystem'] == { 'provisioning_template_ids' => ['1'] } end.returns(@os_after_update1) result = run_cmd(@cmd + params) assert_cmd( success_result("The provisioning templates were associated.\n"), result ) end it 'should associate all given provisioning templates - by ids' do params = ['--id=1', '--provisioning-template-ids=1,2'] api_expects(:operatingsystems, :show).with_params("id": '1').returns(@os_before_update) api_expects(:operatingsystems, :update) do |par| par['id'] == '1' && par['operatingsystem'] == { 'provisioning_template_ids' => ['1', '2'] } end.returns(@os_after_update2) result = run_cmd(@cmd + params) assert_cmd( success_result("The provisioning templates were associated.\n"), result ) end it 'should associate all given provisioning templates - by names' do params = ['--id=1', '--provisioning-templates=test template 1,test template 2'] api_expects(:operatingsystems, :show).with_params("id": '1').returns(@os_before_update) api_expects(:provisioning_templates, :index).with_params( search: 'name = "test template 1" or name = "test template 2"', per_page: 1000, page: 1).returns(@search_result) api_expects(:operatingsystems, :update) do |par| par['id'] == '1' && par['operatingsystem'] == { 'provisioning_template_ids' => ['1', '2'] } end.returns(@os_after_update2) result = run_cmd(@cmd + params) assert_cmd( success_result("The provisioning templates were associated.\n"), result ) end it 'should associate all provisioning templates that match the given search' do params = ['--id=1', '--provisioning-template-search=test'] api_expects(:operatingsystems, :show).with_params("id": '1').returns(@os_before_update) api_expects(:provisioning_templates, :index).returns(@provisioning_templates) api_expects(:operatingsystems, :update) do |par| par['id'] == '1' && par['operatingsystem'] == { 'provisioning_template_ids' => ['1', '2'] } end.returns(@os_after_update2) result = run_cmd(@cmd + params) assert_cmd( success_result("The provisioning templates were associated.\n"), result ) end end context 'RemoveProvisioningTemplateCommand' do before do @cmd = ['os', 'remove-provisioning-template'] @os_before_update = { 'id' => 1, 'provisioning_templates' => [{ 'id' => 1, 'name' => 'test template 1' }, { 'id' => 2, 'name' => 'test template 2' }] } @os_after_update1 = { 'id' => 1, 'provisioning_templates' => [{ id: 1, name: 'test template 1' }] } @os_after_update2 = { 'id' => 1, 'provisioning_templates' => [] } @search_result = [{ 'id' => 1, 'name' => 'test template 1' }, { 'id' => 2, 'name' => 'test template 2' }] @provisioning_templates = [{ 'id' => 1, 'name' => 'test template 1' }, { 'id' => 2, 'name' => 'test template 2' }] end it 'should print error on missing --id' do expected_result = "Could not disassociate the provisioning templates:\n Missing arguments for '--id'.\n" api_expects_no_call result = run_cmd(@cmd) assert_match(expected_result, result.err) end it 'should disassociate the given provisioning template-by id' do params = ['--id=1', '--provisioning-template-id=2'] api_expects(:operatingsystems, :show).with_params(id: '1').returns(@os_before_update) api_expects(:operatingsystems, :update) do |par| par['id'] == '1' && par['operatingsystem'] == { 'provisioning_template_ids' => ['1'] } end.returns(@os_after_update1) result = run_cmd(@cmd + params) assert_cmd( success_result("The provisioning templates were disassociated.\n"), result ) end it 'should disassociate all given provisioning templates - by ids' do params = ['--id=1', '--provisioning-template-ids=1,2'] api_expects(:operatingsystems, :show).with_params("id": '1').returns(@os_before_update) api_expects(:operatingsystems, :update) do |par| par['id'] == '1' && par['operatingsystem'] == { 'provisioning_template_ids' => [] } end.returns(@os_after_update2) result = run_cmd(@cmd + params) assert_cmd( success_result("The provisioning templates were disassociated.\n"), result ) end it 'should disassociate all given provisioning templates - by names' do params = ['--id=1', '--provisioning-templates=test template 1,test template 2'] api_expects(:operatingsystems, :show).with_params("id": '1').returns(@os_before_update) api_expects(:provisioning_templates, :index).with_params( search: 'name = "test template 1" or name = "test template 2"', per_page: 1000, page: 1).returns(@search_result) api_expects(:operatingsystems, :update) do |par| par['id'] == '1' && par['operatingsystem'] == { 'provisioning_template_ids' => [] } end.returns(@os_after_update2) result = run_cmd(@cmd + params) assert_cmd( success_result("The provisioning templates were disassociated.\n"), result ) end it 'should disassociate all provisioning templates that match the given search' do params = ['--id=1', '--provisioning-template-search=test*'] api_expects(:operatingsystems, :show).with_params("id": '1').returns(@os_before_update) api_expects(:provisioning_templates, :index).returns(@provisioning_templates) api_expects(:operatingsystems, :update) do |par| par['id'] == '1' && par['operatingsystem'] == { 'provisioning_template_ids' => [] } end.returns(@os_after_update2) result = run_cmd(@cmd + params) assert_cmd( success_result("The provisioning templates were disassociated.\n"), result ) end end end