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,120 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_foreman/hostgroup'
|
3
|
+
module HammerCLIForeman
|
4
|
+
describe Hostgroup do
|
5
|
+
# These tests are only for the extensions Katello adds to the hostgroup command
|
6
|
+
# See hammer-cli-foreman for the core hostgroup tests
|
7
|
+
describe UpdateCommand do
|
8
|
+
it 'allows content source id' do
|
9
|
+
api_expects(:hostgroups, :update) do |p|
|
10
|
+
p['id'] == '1' && p['hostgroup']['content_source_id'] == 1
|
11
|
+
end
|
12
|
+
run_cmd(%w(hostgroup update --id 1 --content-source-id 1))
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'allows content source name' do
|
16
|
+
content_source_name = "life_of_cs"
|
17
|
+
content_source_id = 111
|
18
|
+
hg_id = 441
|
19
|
+
|
20
|
+
api_expects(:smart_proxies, :index).
|
21
|
+
with_params(:search => "name = \"#{content_source_name}\"").
|
22
|
+
returns(index_response([{'id' => content_source_id}]))
|
23
|
+
|
24
|
+
api_expects(:hostgroups, :update).
|
25
|
+
with_params('id' => hg_id.to_s,
|
26
|
+
'hostgroup' => {'content_source_id' => content_source_id
|
27
|
+
})
|
28
|
+
|
29
|
+
cmd = "hostgroup update --id #{hg_id} --content-source #{content_source_name}"
|
30
|
+
run_cmd(cmd.split)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'allows content view id' do
|
34
|
+
api_expects(:hostgroups, :update) do |p|
|
35
|
+
p['id'] == '1' && p['hostgroup']['content_view_id'] == 1
|
36
|
+
end
|
37
|
+
run_cmd(%w(hostgroup update --id 1 --content-view-id 1))
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'allows content view name' do
|
41
|
+
ex = api_expects(:content_views, :index) do |p|
|
42
|
+
p[:search] = "name = \"cv1\"" && p['organization_id'] == '1'
|
43
|
+
end
|
44
|
+
ex.returns(index_response([{'id' => 1}]))
|
45
|
+
api_expects(:hostgroups, :update) do |p|
|
46
|
+
p['id'] == '1' && p['hostgroup']['content_view_id'] == 1
|
47
|
+
end
|
48
|
+
run_cmd(%w(hostgroup update --id 1 --content-view cv1 --query-organization-id 1))
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'requires organization options to resolve content view name' do
|
52
|
+
api_expects_no_call
|
53
|
+
result = run_cmd(%w(hostgroup update --id 1 --content-view cv1))
|
54
|
+
assert_match(/--query-organization/, result.err)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'allows lifecycle environment id' do
|
58
|
+
api_expects(:hostgroups, :update) do |p|
|
59
|
+
p['id'] == '1' && p['hostgroup']['lifecycle_environment_id'] == 1 &&
|
60
|
+
p['hostgroup']['organization_ids'] == %w(1 2)
|
61
|
+
end
|
62
|
+
run_cmd(%w(hostgroup update --id 1 --lifecycle-environment-id 1 --organization-ids 1,2))
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'allows lifecycle environment name' do
|
66
|
+
ex = api_expects(:lifecycle_environments, :index) do |p|
|
67
|
+
p[:name] = 'le1' && p['organization_id'] == '1'
|
68
|
+
end
|
69
|
+
ex.returns(index_response([{'id' => 1}]))
|
70
|
+
api_expects(:hostgroups, :update) do |p|
|
71
|
+
p['id'] == '1' && p['hostgroup']['lifecycle_environment_id'] == 1
|
72
|
+
end
|
73
|
+
run_cmd(%w(hostgroup update --id 1 --lifecycle-environment le1
|
74
|
+
--query-organization-id 1 --organization-ids 1,2))
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'requires organization options to resolve lifecycle environment name' do
|
78
|
+
api_expects_no_call
|
79
|
+
result = run_cmd(%w(hostgroup update --name hg1 --lifecycle-environment le1))
|
80
|
+
assert_match(/--query-organization/, result.err)
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'requires organization options to resolve lifecycle environment name' do
|
84
|
+
api_expects_no_call
|
85
|
+
result = run_cmd(%w(hostgroup update --id 1 --lifecycle-environment le1))
|
86
|
+
assert_match(/--query-organization/, result.err)
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'allows kickstart repository name' do
|
90
|
+
env_id = 100
|
91
|
+
cv_id = 200
|
92
|
+
repo_name = "life_of_kickstart"
|
93
|
+
repo_id = 111
|
94
|
+
hg_name = "mercury"
|
95
|
+
hg_id = 108
|
96
|
+
|
97
|
+
api_expects(:hostgroups, :index).
|
98
|
+
with_params(:search => "name = \"#{hg_name}\"").
|
99
|
+
returns(index_response([{'id' => hg_id}]))
|
100
|
+
|
101
|
+
api_expects(:repositories, :index).
|
102
|
+
with_params('name' => repo_name,
|
103
|
+
'environment_id' => env_id,
|
104
|
+
'content_view_id' => cv_id).
|
105
|
+
returns(index_response([{'id' => repo_id}]))
|
106
|
+
|
107
|
+
api_expects(:hostgroups, :update).
|
108
|
+
with_params('id' => hg_id,
|
109
|
+
'hostgroup' => {'lifecycle_environment_id' => env_id,
|
110
|
+
'content_view_id' => cv_id,
|
111
|
+
'kickstart_repository_id' => repo_id
|
112
|
+
})
|
113
|
+
|
114
|
+
cmd = "hostgroup update --name #{hg_name} --lifecycle-environment-id #{env_id}"\
|
115
|
+
" --content-view-id #{cv_id} --kickstart-repository #{repo_name}"
|
116
|
+
run_cmd(cmd.split)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_katello/lifecycle_environment'
|
3
|
+
|
4
|
+
module HammerCLIKatello
|
5
|
+
describe LifecycleEnvironmentCommand::CreateCommand do
|
6
|
+
it 'allows minimal options' do
|
7
|
+
api_expects(:lifecycle_environments, :create) do |p|
|
8
|
+
p['name'] == 'le1' && p['prior_id'] == 3 && p['organization_id'] == 1
|
9
|
+
end
|
10
|
+
|
11
|
+
run_cmd(%w(lifecycle-environment create --name le1 --prior-id 3 --organization-id 1))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative '../search_helpers'
|
2
|
+
|
3
|
+
module LifecycleEnvironmentHelpers
|
4
|
+
include SearchHelpers
|
5
|
+
|
6
|
+
def expect_lifecycle_environment_search(org_id, name, id)
|
7
|
+
expect_lenient_search(:lifecycle_environments,
|
8
|
+
params: {'name' => name, 'organization_id' => org_id},
|
9
|
+
returns: {'id' => id})
|
10
|
+
end
|
11
|
+
|
12
|
+
def expect_lifecycle_environments_request(org_id, results)
|
13
|
+
ex = api_expects(:lifecycle_environments, :index, 'List the lifecycle environments') do |par|
|
14
|
+
par['organization_id'] == org_id
|
15
|
+
end
|
16
|
+
ex.returns(index_response(results))
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_katello/lifecycle_environment'
|
3
|
+
|
4
|
+
module HammerCLIKatello
|
5
|
+
describe LifecycleEnvironmentCommand::ListCommand do
|
6
|
+
it 'allows minimal options' do
|
7
|
+
api_expects(:lifecycle_environments, :index)
|
8
|
+
|
9
|
+
run_cmd(%w(lifecycle-environment list))
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'allows organization' do
|
13
|
+
it 'id' do
|
14
|
+
api_expects(:lifecycle_environments, :index) { |p| p['organization_id'] == 1 }
|
15
|
+
|
16
|
+
run_cmd(%w(lifecycle-environment list --organization-id 1))
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'name' do
|
20
|
+
api_expects(:organizations, :index) { |par| par[:search] == "name = \"org1\"" }
|
21
|
+
.at_least_once.returns(index_response([{'id' => 1}]))
|
22
|
+
|
23
|
+
api_expects(:lifecycle_environments, :index) { |p| p['organization_id'] == 1 }
|
24
|
+
|
25
|
+
run_cmd(%w(lifecycle-environment list --organization org1))
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'label' do
|
29
|
+
api_expects(:organizations, :index) { |par| par[:search] == "label = \"org1\"" }
|
30
|
+
.at_least_once.returns(index_response([{'id' => 1}]))
|
31
|
+
|
32
|
+
api_expects(:lifecycle_environments, :index) { |p| p['organization_id'] == 1 }
|
33
|
+
|
34
|
+
run_cmd(%w(lifecycle-environment list --organization-label org1))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_katello/lifecycle_environment'
|
3
|
+
|
4
|
+
module HammerCLIKatello
|
5
|
+
describe LifecycleEnvironmentCommand::UpdateCommand do
|
6
|
+
it 'allows minimal options' do
|
7
|
+
api_expects(:lifecycle_environments, :update) do |p|
|
8
|
+
p['new_name'] == 'le3' && p['id'] == 3
|
9
|
+
end
|
10
|
+
|
11
|
+
run_cmd(%w(lifecycle-environment update --id 3 --new-name le3))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
|
3
|
+
describe 'local helper' do
|
4
|
+
before do
|
5
|
+
class SuperLocalTestHelper
|
6
|
+
def parse_subcommand
|
7
|
+
true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class LocalTestHelper < SuperLocalTestHelper
|
12
|
+
include HammerCLIKatello::LocalHelper
|
13
|
+
end
|
14
|
+
|
15
|
+
@local_helper = LocalTestHelper.new
|
16
|
+
end
|
17
|
+
|
18
|
+
it "does not fail if /usr/share/foreman exists" do
|
19
|
+
File.expects(:exist?).with('/usr/share/foreman').returns(true)
|
20
|
+
assert @local_helper.parse_subcommand
|
21
|
+
end
|
22
|
+
|
23
|
+
it "fails if /usr/share/foreman does not exist" do
|
24
|
+
File.expects(:exist?).with('/usr/share/foreman').returns(false)
|
25
|
+
|
26
|
+
assert_raises RuntimeError do
|
27
|
+
@local_helper.parse_subcommand
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_katello/module_stream'
|
3
|
+
|
4
|
+
module HammerCLIKatello
|
5
|
+
describe ModuleStreamCommand::InfoCommand do
|
6
|
+
it 'allows ID' do
|
7
|
+
api_expects(:module_streams, :show).with_params('id' => '1')
|
8
|
+
|
9
|
+
run_cmd(%w(module-stream info --id 1))
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'resolves ID from name and repo id' do
|
13
|
+
api_expects(:module_streams, :index)
|
14
|
+
.with_params(search: "name = \"duck\"", name: "duck", repository_id: "1")
|
15
|
+
.returns(index_response([{'id' => 1}]))
|
16
|
+
|
17
|
+
api_expects(:module_streams, :show)
|
18
|
+
.with_params(repository_id: "1", id: 1)
|
19
|
+
|
20
|
+
run_cmd(%w(module-stream info --name duck --repository-id 1))
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'resolves ID from name, repo name, and product id' do
|
24
|
+
api_expects(:module_streams, :index)
|
25
|
+
.with_params(search: "name = \"walrus\"")
|
26
|
+
.returns(index_response([{'id' => 1}]))
|
27
|
+
|
28
|
+
api_expects(:repositories, :index)
|
29
|
+
.with_params(name: 'zoo', product_id: 1)
|
30
|
+
.returns(index_response([{'id' => 1}]))
|
31
|
+
|
32
|
+
api_expects(:module_streams, :show)
|
33
|
+
.with_params(repository_id: 1, id: 1)
|
34
|
+
|
35
|
+
run_cmd(%w(module-stream info --name walrus --repository zoo --product-id 1))
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'resolves ID from name, repo name, product name, and org id' do
|
39
|
+
api_expects(:products, :index)
|
40
|
+
.with_params(name: "habitat", organization_id: 1)
|
41
|
+
.returns(index_response([{'id' => 1}]))
|
42
|
+
|
43
|
+
api_expects(:module_streams, :index)
|
44
|
+
.with_params(search: "name = \"walrus\"")
|
45
|
+
.returns(index_response([{'id' => 1}]))
|
46
|
+
|
47
|
+
api_expects(:repositories, :index)
|
48
|
+
.with_params(name: 'zoo', product_id: 1)
|
49
|
+
.returns(index_response([{'id' => 1}]))
|
50
|
+
|
51
|
+
api_expects(:module_streams, :show)
|
52
|
+
.with_params(repository_id: 1, id: 1)
|
53
|
+
|
54
|
+
run_cmd(%w(module-stream info --name walrus --repository zoo
|
55
|
+
--product habitat --organization-id 1))
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_katello/module_stream'
|
3
|
+
|
4
|
+
module HammerCLIKatello
|
5
|
+
describe ModuleStreamCommand::ListCommand do
|
6
|
+
it 'allows minimal options' do
|
7
|
+
api_expects(:module_streams, :index)
|
8
|
+
|
9
|
+
run_cmd(%w(module-stream list))
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'can be provided by repository ID' do
|
13
|
+
api_expects(:module_streams, :index).with_params(repository_id: 1)
|
14
|
+
|
15
|
+
run_cmd(%w(module-stream list --repository-id 1))
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'product params needed with repository name' do
|
19
|
+
cmd = run_cmd(%w(module-stream list --repository Repo))
|
20
|
+
error_msg = "At least one of options --product, --product-id is required."
|
21
|
+
api_expects_no_call
|
22
|
+
assert_match error_msg, cmd.err
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'can be provided by repository name and product id' do
|
26
|
+
api_expects(:repositories, :index)
|
27
|
+
.with_params(name: "Repo", product_id: 1)
|
28
|
+
.returns(index_response([{'id' => 1}]))
|
29
|
+
|
30
|
+
api_expects(:module_streams, :index).with_params(repository_id: 1)
|
31
|
+
|
32
|
+
run_cmd(%w(module-stream list --repository Repo --product-id 1))
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'can be provided by repository id and organization id' do
|
36
|
+
api_expects(:module_streams, :index)
|
37
|
+
.with_params(repository_id: 1, organization_id: 1)
|
38
|
+
|
39
|
+
run_cmd(%w(module-stream list --repository-id 1 --organization-id 1))
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'can be provided by repository name, product id, and organization id' do
|
43
|
+
api_expects(:repositories, :index)
|
44
|
+
.with_params(name: "Repo", product_id: 1)
|
45
|
+
.returns(index_response([{'id' => 1}]))
|
46
|
+
|
47
|
+
api_expects(:module_streams, :index)
|
48
|
+
.with_params(repository_id: 1, organization_id: 1)
|
49
|
+
|
50
|
+
run_cmd(%w(module-stream list --repository Repo --product-id 1 --organization-id 1))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
module HammerCLIKatello
|
4
|
+
describe 'Organization::DeleteCommand' do
|
5
|
+
it 'it requires the organization ID and must be resolved from name' do
|
6
|
+
api_expects(:organizations, :index).with_params(
|
7
|
+
:search => "name = \"my_org\"", :per_page => 1000, :page => 1
|
8
|
+
)
|
9
|
+
run_cmd(%w(organization delete --name my_org))
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'it requires the organization ID and must be resolved from name' do
|
13
|
+
api_expects(:organizations, :index).with_params(
|
14
|
+
:search => "label = \"my_org\"", :per_page => 1000, :page => 1
|
15
|
+
)
|
16
|
+
run_cmd(%w(organization delete --label my_org))
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'it requires the organization ID and must be resolved from name' do
|
20
|
+
api_expects(:organizations, :index).with_params(
|
21
|
+
:search => "title = \"my_org\"", :per_page => 1000, :page => 1
|
22
|
+
)
|
23
|
+
run_cmd(%w(organization delete --title my_org))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_katello/organization'
|
3
|
+
require 'hammer_cli_katello/associating_commands'
|
4
|
+
|
5
|
+
describe HammerCLIKatello::Organization::InfoCommand do
|
6
|
+
before do
|
7
|
+
@cmd = %w(organization info)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "includes simple content access attributes" do
|
11
|
+
org_id = 2
|
12
|
+
params = ["--id=#{org_id}"]
|
13
|
+
api_expects(:organizations, :index).returns(index_response([{'id' => org_id}]))
|
14
|
+
|
15
|
+
api_expects(:organizations, :show)
|
16
|
+
.with_params('id' => org_id.to_s)
|
17
|
+
.returns("simple_content_access" => true, "id" => org_id)
|
18
|
+
result = run_cmd(@cmd + params)
|
19
|
+
expected = success_result(FieldMatcher.new('Simple Content Access', 'Enabled'))
|
20
|
+
assert_cmd(expected, result)
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require_relative '../search_helpers'
|
2
|
+
|
3
|
+
module OrganizationHelpers
|
4
|
+
include SearchHelpers
|
5
|
+
|
6
|
+
def expect_organization_search(name_or_label, id, field: 'name')
|
7
|
+
expect_generic_search(:organizations, params: {search: "#{field} = \"#{name_or_label}\""},
|
8
|
+
returns: {'id' => id}).at_least_once
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require_relative '../repository/repository_helpers'
|
3
|
+
require_relative '../product/product_helpers'
|
4
|
+
require_relative '../organization/organization_helpers'
|
5
|
+
require_relative '../lifecycle_environment/lifecycle_environment_helpers'
|
6
|
+
require 'hammer_cli_katello/package'
|
7
|
+
|
8
|
+
# rubocop:disable ModuleLength
|
9
|
+
module HammerCLIKatello
|
10
|
+
describe PackageCommand::ListCommand do
|
11
|
+
include OrganizationHelpers
|
12
|
+
include LifecycleEnvironmentHelpers
|
13
|
+
include RepositoryHelpers
|
14
|
+
include ProductHelpers
|
15
|
+
|
16
|
+
it 'allows minimal options' do
|
17
|
+
api_expects(:packages, :index)
|
18
|
+
|
19
|
+
run_cmd(%w(package list))
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'content view options' do
|
23
|
+
it 'may be specified by ID' do
|
24
|
+
api_expects(:content_view_versions, :index)
|
25
|
+
.with_params('content_view_id' => 1, 'version' => '2.1')
|
26
|
+
.returns(index_response([{'id' => 5}]))
|
27
|
+
api_expects(:packages, :index).with_params('content_view_version_id' => 5)
|
28
|
+
|
29
|
+
run_cmd(%w(package list --content-view-id 1 --content-view-version 2.1))
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'requires organization ID when given content view name' do
|
33
|
+
api_expects_no_call
|
34
|
+
|
35
|
+
r = run_cmd(%w(package list --content-view cv1 --content-view-version 2.1))
|
36
|
+
expected_error = "--organization-id, --organization, --organization-label is required"
|
37
|
+
assert(r.err.include?(expected_error), "Invalid error message")
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'requires content view ID when given content view version name' do
|
41
|
+
api_expects_no_call
|
42
|
+
|
43
|
+
r = run_cmd(%w(package list --content-view-version cvv1))
|
44
|
+
assert(r.err.include?("--content-view-id, --content-view is required"),
|
45
|
+
"Invalid error message")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'repository options' do
|
50
|
+
it 'may be specified by ID' do
|
51
|
+
api_expects(:packages, :index).with_params('repository_id' => 1)
|
52
|
+
|
53
|
+
run_cmd(%w(package list --repository-id 1))
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'require product ID when given repository name' do
|
57
|
+
api_expects_no_call
|
58
|
+
|
59
|
+
r = run_cmd(%w(package list --repository repo1))
|
60
|
+
assert(r.err.include?("--product-id, --product is required"), "Invalid error message")
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'may be specified by name and product ID' do
|
64
|
+
expect_repository_search(2, 'repo1', 1)
|
65
|
+
|
66
|
+
api_expects(:packages, :index).with_params('repository_id' => 1)
|
67
|
+
|
68
|
+
run_cmd(%w(package list --repository repo1 --product-id 2))
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'environment options' do
|
73
|
+
it 'may be specified environment name' do
|
74
|
+
org_id = 2
|
75
|
+
env_name = "dev"
|
76
|
+
expected_id = 6
|
77
|
+
expect_lifecycle_environment_search(org_id, env_name, expected_id)
|
78
|
+
|
79
|
+
api_expects(:packages, :index).with_params("organization_id" => org_id,
|
80
|
+
"environment_id" => expected_id,
|
81
|
+
"page" => 1, "per_page" => 1000)
|
82
|
+
|
83
|
+
run_cmd(%W(package list --environment=#{env_name} --organization-id=#{org_id}))
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'may be specified environment name no org fails' do
|
87
|
+
api_expects_no_call
|
88
|
+
r = run_cmd(%w(package list --environment Library))
|
89
|
+
expec_err = "--organization, --organization-title, --organization-label, --organization-id"
|
90
|
+
puts r.err
|
91
|
+
assert(r.err.include?(expec_err), "Invalid error message")
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe 'product options' do
|
96
|
+
it 'may be specified by ID' do
|
97
|
+
api_expects(:repositories, :index)
|
98
|
+
.with_params('product_id' => 1)
|
99
|
+
.returns(index_response([{'id' => 2}]))
|
100
|
+
|
101
|
+
api_expects(:packages, :index).with_params('repository_id' => 2)
|
102
|
+
|
103
|
+
run_cmd(%w(package list --product-id 1))
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'fail if more than one repository is found' do
|
107
|
+
api_expects(:repositories, :index)
|
108
|
+
.with_params('product_id' => 1)
|
109
|
+
.returns(index_response([{'id' => 2}, {'id' => 3}]))
|
110
|
+
|
111
|
+
r = run_cmd(%w(package list --product-id 1))
|
112
|
+
assert(r.err.include?("Found more than one repository"), "Invalid error message: #{r.err}")
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'requires organization options to resolve ID by name' do
|
116
|
+
api_expects_no_call
|
117
|
+
|
118
|
+
r = run_cmd(%w(package list --product product1))
|
119
|
+
expected_error = "--organization-id, --organization, --organization-label is required"
|
120
|
+
assert(r.err.include?(expected_error), "Invalid error message")
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'allows organization ID when resolving ID by name' do
|
124
|
+
expect_product_search(3, 'product1', 1)
|
125
|
+
|
126
|
+
expect_generic_repositories_search({'product_id' => 1}, [{'id' => 2}])
|
127
|
+
|
128
|
+
api_expects(:packages, :index).with_params('repository_id' => 2)
|
129
|
+
|
130
|
+
run_cmd(%w(package list --product product1 --organization-id 3))
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'allows organization name when resolving ID by name' do
|
134
|
+
expect_organization_search('org3', 3)
|
135
|
+
|
136
|
+
expect_product_search(3, 'product1', 1)
|
137
|
+
|
138
|
+
expect_generic_repositories_search({'product_id' => 1}, [{'id' => 2}])
|
139
|
+
|
140
|
+
api_expects(:packages, :index).with_params('repository_id' => 2)
|
141
|
+
|
142
|
+
run_cmd(%w(package list --product product1 --organization org3))
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'allows organization label when resolving ID by name' do
|
146
|
+
expect_organization_search('org3', 3, field: 'label')
|
147
|
+
|
148
|
+
expect_product_search(3, 'product1', 1)
|
149
|
+
|
150
|
+
expect_generic_repositories_search({'product_id' => 1}, [{'id' => 2}])
|
151
|
+
|
152
|
+
api_expects(:packages, :index).with_params('repository_id' => 2)
|
153
|
+
|
154
|
+
run_cmd(%w(package list --product product1 --organization-label org3))
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_katello/package_group'
|
3
|
+
|
4
|
+
module HammerCLIKatello
|
5
|
+
describe PackageGroupCommand::ListCommand do
|
6
|
+
it 'allows minimal options' do
|
7
|
+
api_expects(:package_groups, :index)
|
8
|
+
|
9
|
+
run_cmd(%w(package-group list))
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'can be provided by repository ID' do
|
13
|
+
api_expects(:package_groups, :index) do |params|
|
14
|
+
params['repository_id'] == 1
|
15
|
+
end
|
16
|
+
|
17
|
+
run_cmd(%w(package-group list --repository-id 1))
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'needs product options with repository name' do
|
21
|
+
cmd = run_cmd(%w(package-group list --repository Repo))
|
22
|
+
api_expects_no_call
|
23
|
+
error_msg = "At least one of options --product, --product-id is required."
|
24
|
+
assert_match error_msg, cmd.err
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'can be provided product id and repository name' do
|
28
|
+
api_expects(:repositories, :index)
|
29
|
+
.with_params(name: "Repo", product_id: 1)
|
30
|
+
.returns(index_response([{'id' => 1}]))
|
31
|
+
|
32
|
+
api_expects(:package_groups, :index)
|
33
|
+
.with_params(repository_id: 1)
|
34
|
+
|
35
|
+
run_cmd(%w(package-group list --repository Repo --product-id 1))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
describe 'ping' do
|
4
|
+
let(:standard_response_services) do
|
5
|
+
{
|
6
|
+
'katello_agent' =>
|
7
|
+
{'status' => 'ok', 'message' => '0 Processed, 0 Failed', 'duration_ms' => '34'},
|
8
|
+
'foreman_tasks' =>
|
9
|
+
{'status' => 'ok', 'duration_ms' => '34'},
|
10
|
+
'candlepin' => {'status' => 'ok', 'duration_ms' => '34'},
|
11
|
+
'candlepin_events' =>
|
12
|
+
{'status' => 'ok', 'message' => '0 Processed, 0 Failed', 'duration_ms' => '34'},
|
13
|
+
'candlepin_auth' =>
|
14
|
+
{'status' => 'ok', 'duration_ms' => '34'},
|
15
|
+
'katello_events' =>
|
16
|
+
{'status' => 'ok', 'message' => '0 Processed, 0 Failed', 'duration_ms' => '34'},
|
17
|
+
'pulp3' =>
|
18
|
+
{'status' => 'ok', 'duration_ms' => '34'}
|
19
|
+
}
|
20
|
+
end
|
21
|
+
let(:standard_response) do
|
22
|
+
{
|
23
|
+
'status' => 'ok',
|
24
|
+
'services' => standard_response_services
|
25
|
+
}
|
26
|
+
end
|
27
|
+
let(:standard_response_keys) do
|
28
|
+
%w(katello_agent foreman_tasks candlepin candlepin_events
|
29
|
+
candlepin_auth katello_events pulp3).sort
|
30
|
+
end
|
31
|
+
let(:hammer_ping) { %w(ping katello) }
|
32
|
+
|
33
|
+
it 'does not require authentication' do
|
34
|
+
api_expects(:ping, :index).returns(standard_response)
|
35
|
+
|
36
|
+
run_cmd(hammer_ping)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "includes all keys" do
|
40
|
+
api_expects(:ping, :index).returns(standard_response)
|
41
|
+
|
42
|
+
result = JSON.parse(run_cmd(%w(--output=json ping katello))&.out)&.first&.keys&.sort
|
43
|
+
expected = standard_response_keys
|
44
|
+
|
45
|
+
assert_equal result, expected
|
46
|
+
end
|
47
|
+
|
48
|
+
it "skips katello_agent if not included in API response" do
|
49
|
+
response_without_katello_agent = {
|
50
|
+
'status' => 'ok',
|
51
|
+
'services' => standard_response_services.select { |k, _v| k != 'katello_agent' }
|
52
|
+
}
|
53
|
+
api_expects(:ping, :index).returns(response_without_katello_agent)
|
54
|
+
result = JSON.parse(run_cmd(%w(--output=json ping katello))&.out)&.first&.keys&.sort
|
55
|
+
expected = standard_response_keys.select { |k| k != 'katello_agent' }
|
56
|
+
|
57
|
+
assert_equal result, expected
|
58
|
+
end
|
59
|
+
end
|