hammer_cli_katello 1.1.3 → 1.2.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/lib/hammer_cli_katello/foreman_search_options_creators.rb +0 -12
- data/lib/hammer_cli_katello/host_collection.rb +6 -0
- data/lib/hammer_cli_katello/host_errata.rb +1 -1
- data/lib/hammer_cli_katello/repository.rb +0 -27
- data/lib/hammer_cli_katello/version.rb +1 -1
- data/test/data/2.5/foreman_api.json +1 -0
- data/test/data/3.0/foreman_api.json +1 -0
- data/test/data/3.10/foreman_api.json +1 -0
- data/test/data/3.11/foreman_api.json +1 -0
- data/test/data/3.12/foreman_api.json +1 -0
- data/test/data/3.13/foreman_api.json +1 -0
- data/test/data/3.14/foreman_api.json +1 -0
- data/test/data/3.15/foreman_api.json +1 -0
- data/test/data/3.16/foreman_api.json +1 -0
- data/test/data/3.17/foreman_api.json +1 -0
- data/test/data/3.18/foreman_api.json +1 -0
- data/test/data/3.19/foreman_api.json +1 -0
- data/test/data/3.2/foreman_api.json +1 -0
- data/test/data/3.4/foreman_api.json +1 -0
- data/test/data/3.5/foreman_api.json +1 -0
- data/test/data/3.6/foreman_api.json +1 -0
- data/test/data/3.7/foreman_api.json +1 -0
- data/test/data/3.8/foreman_api.json +1 -0
- data/test/data/3.9/foreman_api.json +1 -0
- data/test/data/4.0/foreman_api.json +1 -0
- data/test/data/4.1/foreman_api.json +1 -0
- data/test/data/Readme.md +5 -0
- data/test/functional/activation_key/add_host_collection_test.rb +62 -0
- data/test/functional/activation_key/content_override_test.rb +92 -0
- data/test/functional/activation_key/create_test.rb +33 -0
- data/test/functional/activation_key/data/activation_key.json +17 -0
- data/test/functional/activation_key/info_test.rb +29 -0
- data/test/functional/activation_key/list_test.rb +68 -0
- data/test/functional/activation_key/product_content_test.rb +23 -0
- data/test/functional/activation_key/remove_host_collection_test.rb +62 -0
- data/test/functional/activation_key/subscriptions_test.rb +74 -0
- data/test/functional/activation_key/update_test.rb +26 -0
- data/test/functional/apipie_helper_test.rb +31 -0
- data/test/functional/capsule/capsule_helpers.rb +13 -0
- data/test/functional/capsule/content/add_lifecycle_environment_test.rb +40 -0
- data/test/functional/capsule/content/cancel_synchronization_test.rb +42 -0
- data/test/functional/capsule/content/capsule_content_helpers.rb +24 -0
- data/test/functional/capsule/content/data/library_env.json +47 -0
- data/test/functional/capsule/content/data/sync_status.json +6 -0
- data/test/functional/capsule/content/data/sync_tasks.json +62 -0
- data/test/functional/capsule/content/info_test.rb +61 -0
- data/test/functional/capsule/content/lifecycle_environments_test.rb +19 -0
- data/test/functional/capsule/content/remove_lifecycle_environment_test.rb +40 -0
- data/test/functional/capsule/content/synchronization_status_test.rb +107 -0
- data/test/functional/capsule/info_test.rb +25 -0
- data/test/functional/capsule/list_test.rb +24 -0
- data/test/functional/content_credentials/create_test.rb +32 -0
- data/test/functional/content_credentials/data/test_cert.json +43 -0
- data/test/functional/content_credentials/info_test.rb +50 -0
- data/test/functional/content_credentials/list_test.rb +66 -0
- data/test/functional/content_export/complete/library_test.rb +155 -0
- data/test/functional/content_export/complete/version_test.rb +252 -0
- data/test/functional/content_export/content_export_helpers.rb +26 -0
- data/test/functional/content_export/generate_metadata_test.rb +64 -0
- data/test/functional/content_export/incremental/library_test.rb +172 -0
- data/test/functional/content_export/incremental/version_test.rb +268 -0
- data/test/functional/content_export/list_test.rb +64 -0
- data/test/functional/content_import/library_test.rb +85 -0
- data/test/functional/content_import/list_test.rb +65 -0
- data/test/functional/content_import/metadata.json +1 -0
- data/test/functional/content_import/version_test.rb +85 -0
- data/test/functional/content_view/add_content_view_version_test.rb +88 -0
- data/test/functional/content_view/add_repository_test.rb +21 -0
- data/test/functional/content_view/component/add_test.rb +177 -0
- data/test/functional/content_view/component/list_test.rb +55 -0
- data/test/functional/content_view/component/remove_test.rb +107 -0
- data/test/functional/content_view/component/update_test.rb +134 -0
- data/test/functional/content_view/content_view_helpers.rb +20 -0
- data/test/functional/content_view/copy_test.rb +53 -0
- data/test/functional/content_view/create_test.rb +34 -0
- data/test/functional/content_view/delete_test.rb +62 -0
- data/test/functional/content_view/filter/create_test.rb +57 -0
- data/test/functional/content_view/filter/delete_test.rb +90 -0
- data/test/functional/content_view/filter/info_test.rb +89 -0
- data/test/functional/content_view/filter/list_test.rb +98 -0
- data/test/functional/content_view/filter/update_test.rb +91 -0
- data/test/functional/content_view/list_test.rb +68 -0
- data/test/functional/content_view/publish_test.rb +24 -0
- data/test/functional/content_view/purge_test.rb +97 -0
- data/test/functional/content_view/remove_content_view_version_test.rb +88 -0
- data/test/functional/content_view/remove_test.rb +79 -0
- data/test/functional/content_view/update_test.rb +53 -0
- data/test/functional/content_view/version/incremental_update_test.rb +108 -0
- data/test/functional/content_view/version/list_test.rb +44 -0
- data/test/functional/content_view/version/promote_test.rb +34 -0
- data/test/functional/content_view/version/republish_repositories_test.rb +34 -0
- data/test/functional/content_view/version/update_test.rb +48 -0
- data/test/functional/erratum/erratum_helpers.rb +91 -0
- data/test/functional/erratum/info_test.rb +29 -0
- data/test/functional/erratum/list_test.rb +108 -0
- data/test/functional/file/file_helpers.rb +13 -0
- data/test/functional/file/info_test.rb +162 -0
- data/test/functional/file/list_test.rb +112 -0
- data/test/functional/filter_rule/create_test.rb +99 -0
- data/test/functional/filter_rule/delete_test.rb +104 -0
- data/test/functional/filter_rule/filter_rule_helpers.rb +12 -0
- data/test/functional/filter_rule/info_test.rb +104 -0
- data/test/functional/filter_rule/list_test.rb +91 -0
- data/test/functional/filter_rule/update_test.rb +104 -0
- data/test/functional/host/errata/apply_test.rb +45 -0
- data/test/functional/host/errata/info_test.rb +27 -0
- data/test/functional/host/errata/list_test.rb +49 -0
- data/test/functional/host/errata/recalculate_test.rb +40 -0
- data/test/functional/host/extensions/create_test.rb +95 -0
- data/test/functional/host/extensions/data/host.json +320 -0
- data/test/functional/host/extensions/data/host_list.json +117 -0
- data/test/functional/host/extensions/info_test.rb +35 -0
- data/test/functional/host/extensions/list_test.rb +21 -0
- data/test/functional/host/extensions/update_test.rb +70 -0
- data/test/functional/host/host_helpers.rb +8 -0
- data/test/functional/host/subscription/attach_test.rb +54 -0
- data/test/functional/host/subscription/auto_attach_test.rb +35 -0
- data/test/functional/host/subscription/content_override_test.rb +96 -0
- data/test/functional/host/subscription/product_content_test.rb +27 -0
- data/test/functional/host/subscription/register_test.rb +53 -0
- data/test/functional/host/subscription/remove_test.rb +52 -0
- data/test/functional/host/subscription/unregister_test.rb +37 -0
- data/test/functional/host/traces/list_test.rb +37 -0
- data/test/functional/host/traces/resolve_test.rb +31 -0
- data/test/functional/host_collection/add_host_test.rb +90 -0
- data/test/functional/host_collection/content_api_expectations.rb +35 -0
- data/test/functional/host_collection/content_install_test.rb +62 -0
- data/test/functional/host_collection/content_remove_test.rb +37 -0
- data/test/functional/host_collection/content_update_test.rb +37 -0
- data/test/functional/host_collection/copy_test.rb +64 -0
- data/test/functional/host_collection/create_test.rb +54 -0
- data/test/functional/host_collection/delete_test.rb +57 -0
- data/test/functional/host_collection/hosts_test.rb +39 -0
- data/test/functional/host_collection/info_test.rb +57 -0
- data/test/functional/host_collection/list_test.rb +63 -0
- data/test/functional/host_collection/remove_host_test.rb +90 -0
- data/test/functional/host_collection/update_test.rb +57 -0
- data/test/functional/hostgroup/create_test.rb +112 -0
- data/test/functional/hostgroup/data/hostgroup.json +50 -0
- data/test/functional/hostgroup/info_test.rb +33 -0
- data/test/functional/hostgroup/update_test.rb +120 -0
- data/test/functional/lifecycle_environment/create_test.rb +14 -0
- data/test/functional/lifecycle_environment/lifecycle_environment_helpers.rb +18 -0
- data/test/functional/lifecycle_environment/list_test.rb +38 -0
- data/test/functional/lifecycle_environment/update_test.rb +14 -0
- data/test/functional/local_helper_test.rb +30 -0
- data/test/functional/module_stream/info_test.rb +58 -0
- data/test/functional/module_stream/list_test.rb +53 -0
- data/test/functional/organization/delete_test.rb +26 -0
- data/test/functional/organization/info_test.rb +22 -0
- data/test/functional/organization/organization_helpers.rb +10 -0
- data/test/functional/package/list_test.rb +158 -0
- data/test/functional/package_group/list_test.rb +38 -0
- data/test/functional/ping_test.rb +59 -0
- data/test/functional/product/create_test.rb +54 -0
- data/test/functional/product/delete_test.rb +41 -0
- data/test/functional/product/info_test.rb +33 -0
- data/test/functional/product/list_test.rb +58 -0
- data/test/functional/product/product_helpers.rb +24 -0
- data/test/functional/product/remove_sync_plan_test.rb +35 -0
- data/test/functional/product/set_sync_plan_test.rb +49 -0
- data/test/functional/product/update_proxy.rb +48 -0
- data/test/functional/product/update_test.rb +46 -0
- data/test/functional/repository/create_test.rb +21 -0
- data/test/functional/repository/delete_test.rb +95 -0
- data/test/functional/repository/info_test.rb +156 -0
- data/test/functional/repository/list_test.rb +68 -0
- data/test/functional/repository/remove_content_test.rb +108 -0
- data/test/functional/repository/repository_helpers.rb +18 -0
- data/test/functional/repository/synchronize_test.rb +57 -0
- data/test/functional/repository/update_test.rb +149 -0
- data/test/functional/repository/upload_test.rb +345 -0
- data/test/functional/repository_set/available_repositories_test.rb +18 -0
- data/test/functional/repository_set/disable_test.rb +42 -0
- data/test/functional/repository_set/enable_test.rb +42 -0
- data/test/functional/repository_set/info_test.rb +17 -0
- data/test/functional/repository_set/list_test.rb +18 -0
- data/test/functional/repository_set/repository_set_helpers.rb +20 -0
- data/test/functional/search_helpers.rb +17 -0
- data/test/functional/simple_content_access/disable_test.rb +48 -0
- data/test/functional/simple_content_access/enable_test.rb +46 -0
- data/test/functional/srpm/list_test.rb +92 -0
- data/test/functional/subscription/list_test.rb +86 -0
- data/test/functional/sync_plan/create_test.rb +60 -0
- data/test/functional/sync_plan/delete_test.rb +46 -0
- data/test/functional/sync_plan/info_test.rb +37 -0
- data/test/functional/sync_plan/list_test.rb +31 -0
- data/test/functional/sync_plan/sync_plan_helpers.rb +8 -0
- data/test/functional/sync_plan/update_test.rb +44 -0
- data/test/functional/test_helper.rb +24 -0
- data/test/task_helper.rb +7 -0
- data/test/test_helper.rb +38 -0
- data/test/unit/id_name_options_validator_test.rb +96 -0
- data/test/unit/id_resolver_test.rb +58 -0
- data/test/unit/messages_test.rb +7 -0
- data/test/unit/search_options_creators_test.rb +145 -0
- metadata +388 -6
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), '../organization/organization_helpers')
|
3
|
+
require File.join(File.dirname(__FILE__), '../sync_plan/sync_plan_helpers')
|
4
|
+
require File.join(File.dirname(__FILE__), '../product/product_helpers')
|
5
|
+
|
6
|
+
describe "create a product" do
|
7
|
+
include OrganizationHelpers
|
8
|
+
include SyncPlanHelpers
|
9
|
+
include ProductHelpers
|
10
|
+
|
11
|
+
it 'by organization ID and product name' do
|
12
|
+
api_expects(:products, :create, 'create a product') do |par|
|
13
|
+
par['organization_id'] == 1 && par['name'] = 'product1'
|
14
|
+
end
|
15
|
+
|
16
|
+
assert_equal(
|
17
|
+
0,
|
18
|
+
run_cmd(%w(product create --organization-id 1 --name product1)).exit_code
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'by organization name and product name' do
|
23
|
+
expect_organization_search('org1', 1)
|
24
|
+
api_expects(:products, :create, 'create a product') do |par|
|
25
|
+
par['organization_id'] == 1 && par['name'] = 'product1'
|
26
|
+
end
|
27
|
+
assert_equal(
|
28
|
+
0,
|
29
|
+
run_cmd(%w(product create --organization org1 --name product1)).exit_code
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'by organization name, product name, and sync plan' do
|
34
|
+
expect_organization_search('org1', 1)
|
35
|
+
expect_sync_plan_search(1, 'sync_plan1', 1)
|
36
|
+
api_expects(:products, :create, 'create a product with a sync plan') do |par|
|
37
|
+
par['organization_id'] == 1 &&
|
38
|
+
par['name'] == 'product1' &&
|
39
|
+
par['sync_plan_id'] == 1
|
40
|
+
end
|
41
|
+
command = %w(product create --organization org1 --name product1 --sync-plan sync_plan1)
|
42
|
+
assert_equal(
|
43
|
+
0,
|
44
|
+
run_cmd(command).exit_code
|
45
|
+
)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'fails if no organization is given' do
|
49
|
+
refute_equal(
|
50
|
+
0,
|
51
|
+
run_cmd(%w(product create --name product1)).exit_code
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), '../organization/organization_helpers')
|
3
|
+
require File.join(File.dirname(__FILE__), '../product/product_helpers')
|
4
|
+
|
5
|
+
describe 'delete a product' do
|
6
|
+
include OrganizationHelpers
|
7
|
+
include ProductHelpers
|
8
|
+
|
9
|
+
it 'by ID' do
|
10
|
+
api_expects(:products, :destroy, 'delete a product') do |par|
|
11
|
+
par['id'] == 1
|
12
|
+
end
|
13
|
+
assert_equal(
|
14
|
+
0,
|
15
|
+
run_cmd(%w(product delete --id 1)).exit_code
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'by organization ID and product name' do
|
20
|
+
expect_product_search(1, 'product1', 1)
|
21
|
+
api_expects(:products, :destroy, 'delete a product') do |par|
|
22
|
+
par['id'] == 1
|
23
|
+
end
|
24
|
+
assert_equal(
|
25
|
+
0,
|
26
|
+
run_cmd(%w(product delete --organization-id 1 --name product1)).exit_code
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'by organization name and product name' do
|
31
|
+
expect_organization_search('org1', 1)
|
32
|
+
expect_product_search(1, 'product1', 1)
|
33
|
+
api_expects(:products, :destroy, 'delete a product') do |par|
|
34
|
+
par['id'] == 1
|
35
|
+
end
|
36
|
+
assert_equal(
|
37
|
+
0,
|
38
|
+
run_cmd(%w(product delete --organization org1 --name product1)).exit_code
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), '../organization/organization_helpers')
|
3
|
+
require File.join(File.dirname(__FILE__), '../product/product_helpers')
|
4
|
+
|
5
|
+
describe "get product info" do
|
6
|
+
include OrganizationHelpers
|
7
|
+
include ProductHelpers
|
8
|
+
|
9
|
+
it 'by ID' do
|
10
|
+
expect_product_show(:id => 1)
|
11
|
+
assert_equal(
|
12
|
+
0,
|
13
|
+
run_cmd(%w(product info --id 1)).exit_code
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'by organization id and product name' do
|
18
|
+
expect_product_show(:name => 'product1', :org_id => 1, :id => 1)
|
19
|
+
assert_equal(
|
20
|
+
0,
|
21
|
+
run_cmd(%w(product info --organization-id 1 --name product1)).exit_code
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'by organization name and product name' do
|
26
|
+
expect_organization_search('org1', 1)
|
27
|
+
expect_product_show(:name => 'product1', :org_id => 1, :id => 1)
|
28
|
+
assert_equal(
|
29
|
+
0,
|
30
|
+
run_cmd(%w(product info --organization org1 --name product1)).exit_code
|
31
|
+
)
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), 'product_helpers')
|
3
|
+
|
4
|
+
describe "listing products" do
|
5
|
+
include ProductHelpers
|
6
|
+
|
7
|
+
let(:empty_response_table) do
|
8
|
+
<<eostring
|
9
|
+
---|------|-------------|--------------|--------------|-----------
|
10
|
+
ID | NAME | DESCRIPTION | ORGANIZATION | REPOSITORIES | SYNC STATE
|
11
|
+
---|------|-------------|--------------|--------------|-----------
|
12
|
+
eostring
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'displays the table properly' do
|
16
|
+
api_expects(:products, :index, 'index products').returns(index_response([]))
|
17
|
+
assert_cmd(
|
18
|
+
success_result(empty_response_table),
|
19
|
+
run_cmd(%w(product list --organization-id 1))
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'by organization ID' do
|
24
|
+
ex = api_expects(:products, :index, 'index products') do |par|
|
25
|
+
par['organization_id'] == 1
|
26
|
+
end
|
27
|
+
ex.returns(index_response([]))
|
28
|
+
|
29
|
+
assert_equal(
|
30
|
+
0,
|
31
|
+
run_cmd(%w(product list --organization-id 1)).exit_code
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'by organization ID and subscription ID' do
|
36
|
+
ex = api_expects(:products, :index, 'organization product list') do |par|
|
37
|
+
par['organization_id'] == 1 && par['subscription_id'] == 1
|
38
|
+
end
|
39
|
+
ex.returns(index_response([]))
|
40
|
+
|
41
|
+
assert_equal(
|
42
|
+
0,
|
43
|
+
run_cmd(%w(product list --organization-id 1 --subscription-id 1)).exit_code
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'by organization ID and sync plan ID' do
|
48
|
+
ex = api_expects(:products, :index, 'organization product list') do |par|
|
49
|
+
par['organization_id'] == 1 && par['sync_plan_id'] == 1
|
50
|
+
end
|
51
|
+
ex.returns(index_response([]))
|
52
|
+
|
53
|
+
assert_equal(
|
54
|
+
0,
|
55
|
+
run_cmd(%w(product list --organization-id 1 --sync-plan-id 1)).exit_code
|
56
|
+
)
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module ProductHelpers
|
2
|
+
def expect_generic_product_search(params = {}, returns = {})
|
3
|
+
api_expects(:products, :index, 'Find the Product')
|
4
|
+
.with_params(params).returns(index_response([returns]))
|
5
|
+
end
|
6
|
+
|
7
|
+
def expect_product_search(org_id, name, id)
|
8
|
+
expect_generic_product_search({'name' => name, 'organization_id' => org_id}, 'id' => id)
|
9
|
+
end
|
10
|
+
|
11
|
+
def expect_product_show(options = {})
|
12
|
+
raise "#{__method__} must be called with :id" unless (options.keys & [:id]).size == 1
|
13
|
+
|
14
|
+
if options[:name]
|
15
|
+
raise "#{__method__} used with :name also requires :org_id" unless options[:org_id]
|
16
|
+
expect_product_search(options[:org_id], options[:name], options[:id])
|
17
|
+
end
|
18
|
+
|
19
|
+
ex = api_expects(:products, :show, 'Show a Product') do |par|
|
20
|
+
par['id'] == options[:id]
|
21
|
+
end
|
22
|
+
ex.returns(index_response([{'id' => options[:id]}]))
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), '../organization/organization_helpers')
|
3
|
+
require File.join(File.dirname(__FILE__), '../sync_plan/sync_plan_helpers')
|
4
|
+
require File.join(File.dirname(__FILE__), '../product/product_helpers')
|
5
|
+
|
6
|
+
describe "remove a product's sync plan" do
|
7
|
+
include OrganizationHelpers
|
8
|
+
include SyncPlanHelpers
|
9
|
+
include ProductHelpers
|
10
|
+
|
11
|
+
it "by product ID" do
|
12
|
+
api_expects(:products, :update, "set sync plan") do |params|
|
13
|
+
params['id'] == 1 && params['sync_plan_id'].nil?
|
14
|
+
end
|
15
|
+
|
16
|
+
assert_equal(
|
17
|
+
0,
|
18
|
+
run_cmd(%w(product remove-sync-plan --id 1)).exit_code
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "by product name" do
|
23
|
+
expect_product_search(1, 'product1', 1)
|
24
|
+
api_expects(:products, :update, "set sync plan") do |params|
|
25
|
+
params['id'] == 1 && params['sync_plan_id'].nil?
|
26
|
+
end
|
27
|
+
|
28
|
+
assert_equal(
|
29
|
+
0,
|
30
|
+
run_cmd(%w(product remove-sync-plan
|
31
|
+
--organization-id 1
|
32
|
+
--name product1)).exit_code
|
33
|
+
)
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), '../organization/organization_helpers')
|
3
|
+
require File.join(File.dirname(__FILE__), '../sync_plan/sync_plan_helpers')
|
4
|
+
require File.join(File.dirname(__FILE__), '../product/product_helpers')
|
5
|
+
|
6
|
+
describe "set a product's sync plan" do
|
7
|
+
include OrganizationHelpers
|
8
|
+
include SyncPlanHelpers
|
9
|
+
include ProductHelpers
|
10
|
+
|
11
|
+
it "by product ID and sync-plan ID" do
|
12
|
+
api_expects(:products, :update, "set sync plan") do |params|
|
13
|
+
params['id'] == 1 && params['sync_plan_id'] == 1
|
14
|
+
end
|
15
|
+
|
16
|
+
assert_equal(
|
17
|
+
0,
|
18
|
+
run_cmd(%w(product set-sync-plan --id 1 --sync-plan-id 1)).exit_code
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "by product ID and sync-plan name (requires org ID)" do
|
23
|
+
expect_sync_plan_search(1, 'syncplan1', 1)
|
24
|
+
api_expects(:products, :update, "set sync plan") do |params|
|
25
|
+
params['id'] == 1 && params['sync_plan_id'] == 1
|
26
|
+
end
|
27
|
+
|
28
|
+
assert_equal(
|
29
|
+
0,
|
30
|
+
run_cmd(%w(product set-sync-plan --organization-id 1 --id 1 --sync-plan syncplan1)).exit_code
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "by product name and sync-plan name (both requiring org ID)" do
|
35
|
+
expect_product_search(1, 'product1', 1)
|
36
|
+
expect_sync_plan_search(1, 'syncplan1', 1)
|
37
|
+
api_expects(:products, :update, "set sync plan") do |params|
|
38
|
+
params['id'] == 1 && params['sync_plan_id'] == 1
|
39
|
+
end
|
40
|
+
|
41
|
+
assert_equal(
|
42
|
+
0,
|
43
|
+
run_cmd(%w(product set-sync-plan
|
44
|
+
--organization-id 1
|
45
|
+
--name product1
|
46
|
+
--sync-plan syncplan1)).exit_code
|
47
|
+
)
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
|
3
|
+
describe 'update an http proxy on a product' do
|
4
|
+
include ForemanTaskHelpers
|
5
|
+
|
6
|
+
before do
|
7
|
+
@cmd = %w(product update-proxy)
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:sync_response) do
|
11
|
+
{
|
12
|
+
'id' => 1,
|
13
|
+
'state' => 'planned',
|
14
|
+
'action' => 'Update http proxy'
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'updates product proxy policy' do
|
19
|
+
params = [
|
20
|
+
'--ids=1',
|
21
|
+
'--http-proxy-policy=use_selected_http_proxy',
|
22
|
+
'--http-proxy-id=1'
|
23
|
+
]
|
24
|
+
|
25
|
+
ex = api_expects(:products_bulk_actions, :update_http_proxy, 'update an http-proxy')
|
26
|
+
.with_params('ids' => '1', 'http_proxy_policy' => 'use_selected_http_proxy',
|
27
|
+
'http_proxy_id' => '1')
|
28
|
+
ex.returns(sync_response)
|
29
|
+
|
30
|
+
expect_foreman_task('3')
|
31
|
+
|
32
|
+
result = run_cmd(@cmd + params)
|
33
|
+
assert_equal(HammerCLI::EX_OK, result.exit_code)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'fails with missing required params' do
|
37
|
+
params = ['--proxy-id=1']
|
38
|
+
|
39
|
+
ex = api_expects(:products_bulk_actions, :update_http_proxy, 'update an http-proxy')
|
40
|
+
.with_params('proxy_id' => '1')
|
41
|
+
ex.returns(
|
42
|
+
'proxy_id' => '1'
|
43
|
+
)
|
44
|
+
|
45
|
+
result = run_cmd(@cmd + params)
|
46
|
+
assert_equal(result.exit_code, 70)
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), '../organization/organization_helpers')
|
3
|
+
require File.join(File.dirname(__FILE__), '../product/product_helpers')
|
4
|
+
|
5
|
+
describe 'update a product' do
|
6
|
+
include OrganizationHelpers
|
7
|
+
include ProductHelpers
|
8
|
+
|
9
|
+
it 'by product ID' do
|
10
|
+
api_expects(:products, :update, 'update a product') do |par|
|
11
|
+
par['id'] == 1 &&
|
12
|
+
par['description'] == 'new_description'
|
13
|
+
end
|
14
|
+
assert_equal(
|
15
|
+
0,
|
16
|
+
run_cmd(%w(product update --organization-id 1 --id 1 --description new_description)).exit_code
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'by organization ID and product name' do
|
21
|
+
expect_product_search(1, 'product1', 1)
|
22
|
+
api_expects(:products, :update, 'update a product') do |par|
|
23
|
+
par['id'] == 1 &&
|
24
|
+
par['description'] == 'new_description'
|
25
|
+
end
|
26
|
+
command = %w(product update --organization-id 1 --name product1 --description new_description)
|
27
|
+
assert_equal(
|
28
|
+
0,
|
29
|
+
run_cmd(command).exit_code
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'by organization name and product name' do
|
34
|
+
expect_organization_search('org1', 1)
|
35
|
+
expect_product_search(1, 'product1', 1)
|
36
|
+
api_expects(:products, :update, 'update a product') do |par|
|
37
|
+
par['id'] == 1 &&
|
38
|
+
par['description'] == 'new_description'
|
39
|
+
end
|
40
|
+
command = %w(product update --organization org1 --name product1 --description new_description)
|
41
|
+
assert_equal(
|
42
|
+
0,
|
43
|
+
run_cmd(command).exit_code
|
44
|
+
)
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
describe "create repository" do
|
4
|
+
let(:org_id) { 1 }
|
5
|
+
let(:product_id) { 2 }
|
6
|
+
let(:name) { "repo1" }
|
7
|
+
let(:content_type) { "yum" }
|
8
|
+
|
9
|
+
it 'with basic options' do
|
10
|
+
api_expects(:repositories, :create)
|
11
|
+
.with_params(
|
12
|
+
name: name,
|
13
|
+
product_id: product_id,
|
14
|
+
content_type: content_type)
|
15
|
+
|
16
|
+
command = %W(repository create --organization-id #{org_id} --product-id #{product_id}
|
17
|
+
--content-type #{content_type} --name #{name})
|
18
|
+
|
19
|
+
assert_equal(0, run_cmd(command).exit_code)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_katello/repository'
|
3
|
+
|
4
|
+
module HammerCLIKatello
|
5
|
+
describe Repository::DeleteCommand do
|
6
|
+
it 'allows minimal parameters' do
|
7
|
+
api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
|
8
|
+
run_cmd(%w(repository delete --id 1))
|
9
|
+
end
|
10
|
+
|
11
|
+
describe 'product options' do
|
12
|
+
it 'are required to resolve repository name' do
|
13
|
+
api_expects_no_call
|
14
|
+
result = run_cmd(%w(repository delete --name repo1))
|
15
|
+
assert_includes(result.err, 'At least one of options --product, --product-id is required')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'can be specified via product id' do
|
19
|
+
api_expects(:repositories, :index)
|
20
|
+
.with_params('product_id' => 3, 'name' => 'repo1')
|
21
|
+
.returns(index_response([{'id' => 1}]))
|
22
|
+
|
23
|
+
api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
|
24
|
+
|
25
|
+
run_cmd(%w(repository delete --name repo1 --product-id 3))
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'can be specified via product name' do
|
29
|
+
api_expects(:products, :index)
|
30
|
+
.with_params('organization_id' => '6', 'name' => 'product3')
|
31
|
+
.returns(index_response([{'id' => 3}]))
|
32
|
+
|
33
|
+
api_expects(:repositories, :index)
|
34
|
+
.with_params('product_id' => 3, 'name' => 'repo1')
|
35
|
+
.returns(index_response([{'id' => 1}]))
|
36
|
+
|
37
|
+
api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
|
38
|
+
|
39
|
+
run_cmd(%w(repository delete --name repo1 --product product3 --organization-id 6))
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'organization options' do
|
43
|
+
it 'can be specified by organization id' do
|
44
|
+
api_expects(:products, :index)
|
45
|
+
.with_params('organization_id' => '6', 'name' => 'product3')
|
46
|
+
.returns(index_response([{'id' => 3}]))
|
47
|
+
|
48
|
+
api_expects(:repositories, :index)
|
49
|
+
.with_params('product_id' => 3, 'name' => 'repo1')
|
50
|
+
.returns(index_response([{'id' => 1}]))
|
51
|
+
|
52
|
+
api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
|
53
|
+
|
54
|
+
run_cmd(%w(repository delete --name repo1 --product product3 --organization-id 6))
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'can be specified by organization name' do
|
58
|
+
api_expects(:organizations, :index)
|
59
|
+
.with_params(:search => "name = \"org6\"")
|
60
|
+
.returns(index_response([{'id' => 6}]))
|
61
|
+
|
62
|
+
api_expects(:products, :index)
|
63
|
+
.with_params('organization_id' => 6, 'name' => 'product3')
|
64
|
+
.returns(index_response([{'id' => 3}]))
|
65
|
+
|
66
|
+
api_expects(:repositories, :index)
|
67
|
+
.with_params('product_id' => 3, 'name' => 'repo1')
|
68
|
+
.returns(index_response([{'id' => 1}]))
|
69
|
+
|
70
|
+
api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
|
71
|
+
|
72
|
+
run_cmd(%w(repository delete --name repo1 --product product3 --organization org6))
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'can be specified by organization label' do
|
76
|
+
api_expects(:organizations, :index)
|
77
|
+
.with_params(:search => "label = \"org6\"")
|
78
|
+
.returns(index_response([{'id' => 6}]))
|
79
|
+
|
80
|
+
api_expects(:products, :index)
|
81
|
+
.with_params('organization_id' => 6, 'name' => 'product3')
|
82
|
+
.returns(index_response([{'id' => 3}]))
|
83
|
+
|
84
|
+
api_expects(:repositories, :index)
|
85
|
+
.with_params('product_id' => 3, 'name' => 'repo1')
|
86
|
+
.returns(index_response([{'id' => 1}]))
|
87
|
+
|
88
|
+
api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
|
89
|
+
|
90
|
+
run_cmd(%w(repository delete --name repo1 --product product3 --organization-label org6))
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,156 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), '../product/product_helpers')
|
3
|
+
require File.join(File.dirname(__FILE__), './repository_helpers')
|
4
|
+
require 'hammer_cli_katello/associating_commands'
|
5
|
+
|
6
|
+
describe "get repository info" do
|
7
|
+
include ProductHelpers
|
8
|
+
include RepositoryHelpers
|
9
|
+
|
10
|
+
before do
|
11
|
+
@cmd = %w(repository info)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "shows repository info by id" do
|
15
|
+
params = ['--id=1']
|
16
|
+
ex = api_expects(:repositories, :show, "Get info")
|
17
|
+
ex.returns(
|
18
|
+
'id' => 1,
|
19
|
+
'name' => 'Test Repo',
|
20
|
+
'label' => 'Test_Repo',
|
21
|
+
'description' => 'hammertime',
|
22
|
+
'organization' => {
|
23
|
+
'name' => 'Default Organization',
|
24
|
+
'label' => 'Default_Organization',
|
25
|
+
'id' => 1
|
26
|
+
},
|
27
|
+
'created_at' => '2020-08-05 15:35:36 UTC',
|
28
|
+
'updated_at' => '2020-08-05 15:35:36 UTC',
|
29
|
+
'content_type' => 'yum',
|
30
|
+
'product' => {
|
31
|
+
'id' => 79,
|
32
|
+
'name' => 'test'
|
33
|
+
},
|
34
|
+
'download_policy' => 'immediate',
|
35
|
+
'unprotected' => true,
|
36
|
+
'last_sync_words' => '3 minutes',
|
37
|
+
'mirror_on_sync' => true,
|
38
|
+
'relative_path' => 'Default_Organization/Library/Test_Repo',
|
39
|
+
'content_counts' => {
|
40
|
+
'rpm' => 1,
|
41
|
+
'srpm' => 0,
|
42
|
+
'package_group' => 0,
|
43
|
+
'erratum' => 1,
|
44
|
+
'module_stream' => 0
|
45
|
+
}
|
46
|
+
)
|
47
|
+
result = run_cmd(@cmd + params)
|
48
|
+
# rubocop:disable Style/WordArray
|
49
|
+
expected_fields = [['Id', '1'],
|
50
|
+
['Name', 'Test Repo'],
|
51
|
+
['Label', 'Test_Repo'],
|
52
|
+
['Description', 'hammertime'],
|
53
|
+
['Organization', 'Default Organization'],
|
54
|
+
['Red Hat Repository', 'no'],
|
55
|
+
['Content Type', 'yum'],
|
56
|
+
['Mirror on Sync', 'yes'],
|
57
|
+
['Publish Via HTTP', 'yes'],
|
58
|
+
['Relative Path', 'Default_Organization/Library/Test_Repo'],
|
59
|
+
['Download Policy', 'immediate'],
|
60
|
+
['HTTP Proxy', ''],
|
61
|
+
['Product', ''],
|
62
|
+
['Id', '79'],
|
63
|
+
['Name', 'test'],
|
64
|
+
['GPG Key', ''],
|
65
|
+
['Sync', ''],
|
66
|
+
['Status', 'Not Synced'],
|
67
|
+
['Last Sync Date', '3 minutes'],
|
68
|
+
['Created', '2020/08/05 15:35:36'],
|
69
|
+
['Updated', '2020/08/05 15:35:36'],
|
70
|
+
['Content Counts', ''],
|
71
|
+
['Packages', '1'],
|
72
|
+
['Source RPMS', '0'],
|
73
|
+
['Package Groups', '0'],
|
74
|
+
['Errata', '1'],
|
75
|
+
['Module Streams', '0']]
|
76
|
+
# rubocop:enable Style/WordArray
|
77
|
+
expected_results = expected_fields.map { |field| success_result(FieldMatcher.new(*field)) }
|
78
|
+
expected_results.each { |expected| assert_cmd(expected, result) }
|
79
|
+
end
|
80
|
+
|
81
|
+
it "Shows information about a repository with organization-id and product name" do
|
82
|
+
org_id = 1
|
83
|
+
product_id = 2
|
84
|
+
repo_id = 3
|
85
|
+
params = ["--name=Test_Repo", "--product=Test_Product", "--organization-id=1"]
|
86
|
+
|
87
|
+
expect_product_search(org_id, 'Test_Product', product_id)
|
88
|
+
|
89
|
+
expect_repository_search(product_id, 'Test_Repo', repo_id)
|
90
|
+
|
91
|
+
ex = api_expects(:repositories, :show, "Get info")
|
92
|
+
|
93
|
+
ex.returns(
|
94
|
+
'id' => 1,
|
95
|
+
'name' => 'Test Repo',
|
96
|
+
'label' => 'Test_Repo',
|
97
|
+
'description' => 'hammertime',
|
98
|
+
'organization' => {
|
99
|
+
'name' => 'Default Organization',
|
100
|
+
'label' => 'Default_Organization',
|
101
|
+
'id' => 1
|
102
|
+
},
|
103
|
+
'created_at' => '2020-08-05 15:35:36 UTC',
|
104
|
+
'updated_at' => '2020-08-05 15:35:36 UTC',
|
105
|
+
'content_type' => 'yum',
|
106
|
+
'product' => {
|
107
|
+
'id' => 79,
|
108
|
+
'name' => 'Test_Product'
|
109
|
+
},
|
110
|
+
'download_policy' => 'immediate',
|
111
|
+
'unprotected' => true,
|
112
|
+
'last_sync_words' => '3 minutes',
|
113
|
+
'mirror_on_sync' => true,
|
114
|
+
'relative_path' => 'Default_Organization/Library/Test_Repo',
|
115
|
+
'content_counts' => {
|
116
|
+
'rpm' => 1,
|
117
|
+
'srpm' => 0,
|
118
|
+
'package_group' => 0,
|
119
|
+
'erratum' => 1,
|
120
|
+
'module_stream' => 0
|
121
|
+
}
|
122
|
+
)
|
123
|
+
result = run_cmd(@cmd + params)
|
124
|
+
# rubocop:disable Style/WordArray
|
125
|
+
expected_fields = [['Id', '1'],
|
126
|
+
['Name', 'Test Repo'],
|
127
|
+
['Label', 'Test_Repo'],
|
128
|
+
['Description', 'hammertime'],
|
129
|
+
['Organization', 'Default Organization'],
|
130
|
+
['Red Hat Repository', 'no'],
|
131
|
+
['Content Type', 'yum'],
|
132
|
+
['Mirror on Sync', 'yes'],
|
133
|
+
['Publish Via HTTP', 'yes'],
|
134
|
+
['Relative Path', 'Default_Organization/Library/Test_Repo'],
|
135
|
+
['Download Policy', 'immediate'],
|
136
|
+
['HTTP Proxy', ''],
|
137
|
+
['Product', ''],
|
138
|
+
['Id', '79'],
|
139
|
+
['Name', 'Test_Product'],
|
140
|
+
['GPG Key', ''],
|
141
|
+
['Sync', ''],
|
142
|
+
['Status', 'Not Synced'],
|
143
|
+
['Last Sync Date', '3 minutes'],
|
144
|
+
['Created', '2020/08/05 15:35:36'],
|
145
|
+
['Updated', '2020/08/05 15:35:36'],
|
146
|
+
['Content Counts', ''],
|
147
|
+
['Packages', '1'],
|
148
|
+
['Source RPMS', '0'],
|
149
|
+
['Package Groups', '0'],
|
150
|
+
['Errata', '1'],
|
151
|
+
['Module Streams', '0']]
|
152
|
+
# rubocop:enable Style/WordArray
|
153
|
+
expected_results = expected_fields.map { |field| success_result(FieldMatcher.new(*field)) }
|
154
|
+
expected_results.each { |expected| assert_cmd(expected, result) }
|
155
|
+
end
|
156
|
+
end
|