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,108 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_katello/erratum'
|
3
|
+
|
4
|
+
module HammerCLIKatello
|
5
|
+
describe ErratumCommand::ListCommand do
|
6
|
+
it 'allows minimal options' do
|
7
|
+
api_expects(:errata, :index)
|
8
|
+
|
9
|
+
run_cmd(%w(erratum list))
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'product options' do
|
13
|
+
it 'may be specified by ID' do
|
14
|
+
ex = api_expects(:repositories, :index) do |p|
|
15
|
+
p['product_id'] == 1
|
16
|
+
end
|
17
|
+
ex.returns(index_response([{'id' => 2}]))
|
18
|
+
|
19
|
+
api_expects(:errata, :index) do |p|
|
20
|
+
p['repository_id'] = 2
|
21
|
+
end
|
22
|
+
|
23
|
+
run_cmd(%w(erratum list --product-id 1))
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'fail if more than one repository is found' do
|
27
|
+
ex = api_expects(:repositories, :index) do |p|
|
28
|
+
p['product_id'] == 1
|
29
|
+
end
|
30
|
+
ex.returns(index_response([{'id' => 2}, {'id' => 3}]))
|
31
|
+
|
32
|
+
r = run_cmd(%w(erratum list --product-id 1))
|
33
|
+
assert r.err.include?("Found more than one repository."), r.err
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'requires organization options to resolve ID by name' do
|
37
|
+
api_expects_no_call
|
38
|
+
|
39
|
+
r = run_cmd(%w(erratum list --product product1))
|
40
|
+
assert r.err.include? "--organization-id, --organization, --organization-label is required"
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'allows organization ID when resolving ID by name' do
|
44
|
+
ex = api_expects(:products, :index) do |p|
|
45
|
+
p['name'] == 'product1' && p['organization_id'] == 3
|
46
|
+
end
|
47
|
+
ex.returns(index_response([{'id' => 1}]))
|
48
|
+
|
49
|
+
ex = api_expects(:repositories, :index) do |p|
|
50
|
+
p['product_id'] == 1
|
51
|
+
end
|
52
|
+
ex.returns(index_response([{'id' => 2}]))
|
53
|
+
|
54
|
+
api_expects(:errata, :index) do |p|
|
55
|
+
p['repository_id'] = 2
|
56
|
+
end
|
57
|
+
|
58
|
+
run_cmd(%w(erratum list --product product1 --organization-id 3))
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'allows organization name when resolving ID by name' do
|
62
|
+
ex = api_expects(:organizations, :index) do |p|
|
63
|
+
p[:search] == "name = \"org3\""
|
64
|
+
end
|
65
|
+
ex.at_least_once.returns(index_response([{'id' => 3}]))
|
66
|
+
|
67
|
+
ex = api_expects(:products, :index) do |p|
|
68
|
+
p['name'] == 'product1' && p['organization_id'] == 3
|
69
|
+
end
|
70
|
+
ex.returns(index_response([{'id' => 1}]))
|
71
|
+
|
72
|
+
ex = api_expects(:repositories, :index) do |p|
|
73
|
+
p['product_id'] == 1
|
74
|
+
end
|
75
|
+
ex.returns(index_response([{'id' => 2}]))
|
76
|
+
|
77
|
+
api_expects(:errata, :index) do |p|
|
78
|
+
p['repository_id'] = 2
|
79
|
+
end
|
80
|
+
|
81
|
+
run_cmd(%w(erratum list --product product1 --organization org3))
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'allows organization label when resolving ID by name' do
|
85
|
+
ex = api_expects(:organizations, :index) do |p|
|
86
|
+
p[:search] == "label = \"org3\""
|
87
|
+
end
|
88
|
+
ex.at_least_once.returns(index_response([{'id' => 3}]))
|
89
|
+
|
90
|
+
ex = api_expects(:products, :index) do |p|
|
91
|
+
p['name'] == 'product1' && p['organization_id'] == 3
|
92
|
+
end
|
93
|
+
ex.returns(index_response([{'id' => 1}]))
|
94
|
+
|
95
|
+
ex = api_expects(:repositories, :index) do |p|
|
96
|
+
p['product_id'] == 1
|
97
|
+
end
|
98
|
+
ex.returns(index_response([{'id' => 2}]))
|
99
|
+
|
100
|
+
api_expects(:errata, :index) do |p|
|
101
|
+
p['repository_id'] = 2
|
102
|
+
end
|
103
|
+
|
104
|
+
run_cmd(%w(erratum list --product product1 --organization-label org3))
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require_relative '../search_helpers'
|
2
|
+
|
3
|
+
module FileHelpers
|
4
|
+
include SearchHelpers
|
5
|
+
|
6
|
+
def expect_file_search(params, returns)
|
7
|
+
expect_generic_search(:file_units, params: params, returns: returns)
|
8
|
+
end
|
9
|
+
|
10
|
+
def expect_file_show(params)
|
11
|
+
api_expects(:file_units, :show).with_params(params)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
require_relative '../test_helper.rb'
|
2
|
+
require_relative '../organization/organization_helpers'
|
3
|
+
require_relative '../content_view/content_view_helpers'
|
4
|
+
require_relative '../repository/repository_helpers'
|
5
|
+
require_relative '../product/product_helpers'
|
6
|
+
require_relative 'file_helpers'
|
7
|
+
require 'hammer_cli_katello/file'
|
8
|
+
|
9
|
+
# rubocop:disable ModuleLength
|
10
|
+
module HammerCLIKatello
|
11
|
+
describe FileCommand::InfoCommand do
|
12
|
+
include FileHelpers
|
13
|
+
include ContentViewHelpers
|
14
|
+
include RepositoryHelpers
|
15
|
+
include ProductHelpers
|
16
|
+
include OrganizationHelpers
|
17
|
+
|
18
|
+
it 'allows minimal options' do
|
19
|
+
expect_file_show('id' => '1')
|
20
|
+
run_cmd(%w(file info --id 1))
|
21
|
+
end
|
22
|
+
|
23
|
+
describe 'requires' do
|
24
|
+
describe 'organization options' do
|
25
|
+
it 'to resolve product ID' do
|
26
|
+
api_expects_no_call
|
27
|
+
result = run_cmd(%w(file list --product product1))
|
28
|
+
assert_match(/--organization-id/, result.err)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'to resolve content view ID' do
|
32
|
+
api_expects_no_call
|
33
|
+
result = run_cmd(%w(file list --content-view cv1))
|
34
|
+
assert_match(/--organization-id/, result.err)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'product options' do
|
39
|
+
it 'to resolve repository ID' do
|
40
|
+
api_expects_no_call
|
41
|
+
result = run_cmd(%w(file list --repository repo1))
|
42
|
+
assert_match(/--product-id/, result.err)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe 'allows filtering by' do
|
48
|
+
it 'repository ID' do
|
49
|
+
expect_file_search({'repository_id' => 2}, {})
|
50
|
+
run_cmd(%w(file list --repository-id 2))
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'content view version ID' do
|
54
|
+
expect_file_search({'content_view_version_id' => 2}, {})
|
55
|
+
run_cmd(%w(file list --content-view-version-id 2))
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe 'resolves ID from file name' do
|
60
|
+
it 'and repository ID' do
|
61
|
+
expect_file_search({'repository_id' => '2', search: "name = \"foo\""}, 'id' => 1)
|
62
|
+
expect_file_show('id' => 1)
|
63
|
+
run_cmd(%w(file info --name foo --repository-id 2))
|
64
|
+
end
|
65
|
+
|
66
|
+
describe 'repository name' do
|
67
|
+
it 'and product ID' do
|
68
|
+
expect_generic_repositories_search({'name' => 'repo2', 'product_id' => 1}, 'id' => 2)
|
69
|
+
expect_file_search({'repository_id' => '2', search: "name = \"foo\""}, 'id' => 1)
|
70
|
+
expect_file_show('id' => 1)
|
71
|
+
run_cmd(%w(file info --name foo --repository repo2 --product-id 1))
|
72
|
+
end
|
73
|
+
|
74
|
+
describe 'product name, and organization' do
|
75
|
+
it 'ID' do
|
76
|
+
expect_generic_product_search({'name' => 'product1', 'organization_id' => 3}, 'id' => 1)
|
77
|
+
expect_generic_repositories_search({'name' => 'repo2', 'product_id' => 1}, 'id' => 2)
|
78
|
+
expect_file_search({'repository_id' => '2', search: "name = \"foo\""}, 'id' => 1)
|
79
|
+
expect_file_show('id' => 1)
|
80
|
+
run_cmd(%w(file info --name foo --repository repo2 --product product1
|
81
|
+
--organization-id 3))
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'name' do
|
85
|
+
expect_organization_search('org3', 3)
|
86
|
+
expect_generic_product_search({'name' => 'product1', 'organization_id' => 3}, 'id' => 1)
|
87
|
+
expect_generic_repositories_search({'name' => 'repo2', 'product_id' => 1}, 'id' => 2)
|
88
|
+
expect_file_search({'repository_id' => '2', search: "name = \"foo\""}, 'id' => 1)
|
89
|
+
expect_file_show('id' => 1)
|
90
|
+
run_cmd(%w(file info --name foo --repository repo2 --product product1
|
91
|
+
--organization org3))
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'label' do
|
95
|
+
expect_organization_search('org3', 3, field: 'label')
|
96
|
+
expect_generic_product_search({'name' => 'product1', 'organization_id' => 3}, 'id' => 1)
|
97
|
+
expect_generic_repositories_search({'name' => 'repo2', 'product_id' => 1}, 'id' => 2)
|
98
|
+
expect_file_search({'repository_id' => '2', search: "name = \"foo\""}, 'id' => 1)
|
99
|
+
expect_file_show('id' => 1)
|
100
|
+
run_cmd(%w(file info --name foo --repository repo2 --product product1
|
101
|
+
--organization-label org3))
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'and content view version ID' do
|
107
|
+
expect_file_search({'content_view_version_id' => '2', 'name' => 'foo'}, 'id' => 1)
|
108
|
+
expect_file_show('id' => 1)
|
109
|
+
run_cmd(%w(file info --name foo --content-view-version-id 2))
|
110
|
+
end
|
111
|
+
|
112
|
+
describe 'content view version' do
|
113
|
+
it 'and content view ID' do
|
114
|
+
expect_content_view_version_search({'version' => '2.0',
|
115
|
+
'content_view_id' => 3}, 'id' => 2)
|
116
|
+
expect_file_search({'content_view_version_id' => '2',
|
117
|
+
search: "name = \"foo\""}, 'id' => 1)
|
118
|
+
expect_file_show('id' => 1)
|
119
|
+
run_cmd(%w(file info --name foo --content-view-version 2.0 --content-view-id 3))
|
120
|
+
end
|
121
|
+
|
122
|
+
describe 'content view name, and organization' do
|
123
|
+
it 'ID' do
|
124
|
+
expect_content_view_search(4, 'cv3', 3)
|
125
|
+
expect_content_view_version_search({'version' => '2.0',
|
126
|
+
'content_view_id' => 3}, 'id' => 2)
|
127
|
+
expect_file_search({'content_view_version_id' => '2',
|
128
|
+
search: "name = \"foo\""}, 'id' => 1)
|
129
|
+
expect_file_show('id' => 1)
|
130
|
+
run_cmd(%w(file info --name foo --content-view-version 2.0 --content-view cv3
|
131
|
+
--organization-id 4))
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'name' do
|
135
|
+
expect_organization_search('org4', 4)
|
136
|
+
expect_content_view_search(4, 'cv3', 3)
|
137
|
+
expect_content_view_version_search({'version' => '2.0',
|
138
|
+
'content_view_id' => 3}, 'id' => 2)
|
139
|
+
expect_file_search({'content_view_version_id' => '2',
|
140
|
+
search: "name = \"foo\""}, 'id' => 1)
|
141
|
+
expect_file_show('id' => 1)
|
142
|
+
run_cmd(%w(file info --name foo --content-view-version 2.0 --content-view cv3
|
143
|
+
--organization org4))
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'label' do
|
147
|
+
expect_organization_search('org4', 4, field: 'label')
|
148
|
+
expect_content_view_search(4, 'cv3', 3)
|
149
|
+
expect_content_view_version_search({'version' => '2.0',
|
150
|
+
'content_view_id' => 3}, 'id' => 2)
|
151
|
+
expect_file_search({'content_view_version_id' => '2',
|
152
|
+
search: "name = \"foo\""}, 'id' => 1)
|
153
|
+
expect_file_show('id' => 1)
|
154
|
+
run_cmd(%w(file info --name foo --content-view-version 2.0 --content-view cv3
|
155
|
+
--organization-label org4))
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
# rubocop:enable ModuleLength
|
@@ -0,0 +1,112 @@
|
|
1
|
+
require_relative '../test_helper.rb'
|
2
|
+
require_relative '../organization/organization_helpers'
|
3
|
+
require_relative '../content_view/content_view_helpers'
|
4
|
+
require_relative '../repository/repository_helpers'
|
5
|
+
require_relative '../product/product_helpers'
|
6
|
+
require_relative 'file_helpers'
|
7
|
+
require 'hammer_cli_katello/file'
|
8
|
+
|
9
|
+
module HammerCLIKatello
|
10
|
+
describe FileCommand::ListCommand do
|
11
|
+
include FileHelpers
|
12
|
+
include ContentViewHelpers
|
13
|
+
include RepositoryHelpers
|
14
|
+
include ProductHelpers
|
15
|
+
include OrganizationHelpers
|
16
|
+
|
17
|
+
it 'allows minimal options' do
|
18
|
+
expect_file_search({}, {})
|
19
|
+
run_cmd(%w(file list))
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'requires' do
|
23
|
+
describe 'organization options' do
|
24
|
+
it 'to resolve product ID' do
|
25
|
+
api_expects_no_call
|
26
|
+
result = run_cmd(%w(file list --product product1))
|
27
|
+
assert_match(/--organization-id/, result.err)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'to resolve content view ID' do
|
31
|
+
api_expects_no_call
|
32
|
+
result = run_cmd(%w(file list --content-view cv1))
|
33
|
+
assert_match(/--organization-id/, result.err)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe 'product options' do
|
38
|
+
it 'to resolve repository ID' do
|
39
|
+
api_expects_no_call
|
40
|
+
result = run_cmd(%w(file list --repository repo1))
|
41
|
+
assert_match(/--product-id/, result.err)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe 'allows filtering by' do
|
47
|
+
it 'repository ID' do
|
48
|
+
expect_file_search({'repository_id' => 2}, {})
|
49
|
+
run_cmd(%w(file list --repository-id 2))
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'content view version ID' do
|
53
|
+
expect_file_search({'content_view_version_id' => 2}, {})
|
54
|
+
run_cmd(%w(file list --content-view-version-id 2))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe 'resolves' do
|
59
|
+
describe 'repository ID' do
|
60
|
+
it 'from name and product ID' do
|
61
|
+
expect_generic_repositories_search(
|
62
|
+
{'name' => 'repo2', 'product_id' => 1}, 'id' => 2)
|
63
|
+
expect_file_search({'repository_id' => 2}, {})
|
64
|
+
run_cmd(%w(file list --repository repo2 --product-id 1))
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'from name, product, and organization ID' do
|
68
|
+
expect_generic_product_search({'name' => 'product1', 'organization_id' => 3}, 'id' => 1)
|
69
|
+
expect_generic_repositories_search({'name' => 'repo2', 'product_id' => 1}, 'id' => 2)
|
70
|
+
expect_file_search({'repository_id' => 2}, {})
|
71
|
+
run_cmd(%w(file list --repository repo2 --product product1 --organization-id 3))
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'from name, product, and organization name' do
|
75
|
+
expect_organization_search('org3', 3)
|
76
|
+
expect_generic_product_search({'name' => 'product1', 'organization_id' => 3}, 'id' => 1)
|
77
|
+
expect_generic_repositories_search({'name' => 'repo2', 'product_id' => 1}, 'id' => 2)
|
78
|
+
expect_file_search({'repository_id' => 2}, {})
|
79
|
+
run_cmd(%w(file list --repository repo2 --product product1 --organization org3))
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe 'content view version ID' do
|
84
|
+
it 'from version and content view ID' do
|
85
|
+
expect_content_view_version_search(
|
86
|
+
{'version' => '1.0', 'content_view_id' => 1}, 'id' => 2)
|
87
|
+
expect_file_search({'content_view_version_id' => 2}, {})
|
88
|
+
run_cmd(%w(file list --content-view-version 1.0 --content-view-id 1))
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'from version, content view name, and organization ID' do
|
92
|
+
expect_generic_content_view_search(params: {'name' => 'cv1', 'organization_id' => 3},
|
93
|
+
returns: {'id' => 1})
|
94
|
+
expect_content_view_version_search(
|
95
|
+
{'version' => '1.0', 'content_view_id' => 1}, 'id' => 2)
|
96
|
+
expect_file_search({'content_view_version_id' => 2}, {})
|
97
|
+
run_cmd(%w(file list --content-view-version 1.0 --content-view cv1 --organization-id 3))
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'from version, content view name, and organization name' do
|
101
|
+
expect_organization_search('org3', 3)
|
102
|
+
expect_generic_content_view_search(params: {'name' => 'cv1', 'organization_id' => 3},
|
103
|
+
returns: {'id' => 1})
|
104
|
+
expect_content_view_version_search(
|
105
|
+
{'version' => '1.0', 'content_view_id' => 1}, 'id' => 2)
|
106
|
+
expect_file_search({'content_view_version_id' => 2}, {})
|
107
|
+
run_cmd(%w(file list --content-view-version 1.0 --content-view cv1 --organization org3))
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'hammer_cli_katello/filter_rule'
|
3
|
+
|
4
|
+
module HammerCLIKatello
|
5
|
+
describe FilterRule::CreateCommand do
|
6
|
+
it 'allows minimal options' do
|
7
|
+
api_expects(:content_view_filter_rules, :create) do |p|
|
8
|
+
p['content_view_filter_id'] == 1 && p['name'] == %w(rpm1)
|
9
|
+
end
|
10
|
+
run_cmd(%w(content-view filter rule create --content-view-filter-id 1 --name rpm1))
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'allows multiple package names' do
|
14
|
+
api_expects(:content_view_filter_rules, :create) do |p|
|
15
|
+
p['content_view_filter_id'] == 1 && p['name'] == %w(rpm1 rpm2)
|
16
|
+
end
|
17
|
+
run_cmd(%w(content-view filter rule create --content-view-filter-id 1 --names rpm1,rpm2))
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'allows name resolution of filter with content-view-id' do
|
21
|
+
ex = api_expects(:content_view_filters, :index) do |p|
|
22
|
+
p['name'] == 'cvf1' && p['content_view_id'] == 3
|
23
|
+
end
|
24
|
+
ex.returns(index_response([{'id' => 1}]))
|
25
|
+
|
26
|
+
api_expects(:content_view_filter_rules, :create) do |p|
|
27
|
+
p['content_view_filter_id'] == 1 && p['name'] == %w(rule9)
|
28
|
+
end
|
29
|
+
run_cmd(%w(content-view filter rule create --content-view-filter cvf1 --content-view-id 3
|
30
|
+
--name rule9))
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'organization' do
|
34
|
+
it 'ID can be specified to resolve content view name' do
|
35
|
+
ex = api_expects(:content_views, :index) do |p|
|
36
|
+
p['name'] == 'cv3' && p['organization_id'] == '6'
|
37
|
+
end
|
38
|
+
ex.returns(index_response([{'id' => 3}]))
|
39
|
+
|
40
|
+
ex = api_expects(:content_view_filters, :index) do |p|
|
41
|
+
p['name'] == 'cvf1' && p['content_view_id'] == 3
|
42
|
+
end
|
43
|
+
ex.returns(index_response([{'id' => 1}]))
|
44
|
+
|
45
|
+
api_expects(:content_view_filter_rules, :create) do |p|
|
46
|
+
p['content_view_filter_id'] == 1 && p['name'] == %w(rule9)
|
47
|
+
end
|
48
|
+
run_cmd(%w(content-view filter rule create --content-view-filter cvf1 --organization-id 6
|
49
|
+
--content-view cv3 --name rule9))
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'name can be specified to resolve content view name' do
|
53
|
+
ex = api_expects(:organizations, :index) do |p|
|
54
|
+
p[:search] == "name = \"org6\""
|
55
|
+
end
|
56
|
+
ex.returns(index_response([{'id' => 6}]))
|
57
|
+
|
58
|
+
ex = api_expects(:content_views, :index) do |p|
|
59
|
+
p['name'] == 'cv3' && p['organization_id'] == 6
|
60
|
+
end
|
61
|
+
ex.returns(index_response([{'id' => 3}]))
|
62
|
+
|
63
|
+
ex = api_expects(:content_view_filters, :index) do |p|
|
64
|
+
p['name'] == 'cvf1' && p['content_view_id'] == 3
|
65
|
+
end
|
66
|
+
ex.returns(index_response([{'id' => 1}]))
|
67
|
+
|
68
|
+
api_expects(:content_view_filter_rules, :create) do |p|
|
69
|
+
p['content_view_filter_id'] == 1 && p['name'] == %w(rule9)
|
70
|
+
end
|
71
|
+
run_cmd(%w(content-view filter rule create --content-view-filter cvf1 --organization org6
|
72
|
+
--content-view cv3 --name rule9))
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'label can be specified to resolve content view name' do
|
76
|
+
ex = api_expects(:organizations, :index) do |p|
|
77
|
+
p[:search] == "label = \"org6\""
|
78
|
+
end
|
79
|
+
ex.returns(index_response([{'id' => 6}]))
|
80
|
+
|
81
|
+
ex = api_expects(:content_views, :index) do |p|
|
82
|
+
p['name'] == 'cv3' && p['organization_id'] == 6
|
83
|
+
end
|
84
|
+
ex.returns(index_response([{'id' => 3}]))
|
85
|
+
|
86
|
+
ex = api_expects(:content_view_filters, :index) do |p|
|
87
|
+
p['name'] == 'cvf1' && p['content_view_id'] == 3
|
88
|
+
end
|
89
|
+
ex.returns(index_response([{'id' => 1}]))
|
90
|
+
|
91
|
+
api_expects(:content_view_filter_rules, :create) do |p|
|
92
|
+
p['content_view_filter_id'] == 1 && p['name'] == %w(rule9)
|
93
|
+
end
|
94
|
+
run_cmd(%w(content-view filter rule create --content-view-filter cvf1 --organization-label
|
95
|
+
org6 --content-view cv3 --name rule9))
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require_relative 'filter_rule_helpers'
|
3
|
+
require 'hammer_cli_katello/filter_rule'
|
4
|
+
|
5
|
+
module HammerCLIKatello
|
6
|
+
describe FilterRule::DeleteCommand do
|
7
|
+
include FilterRuleHelpers
|
8
|
+
|
9
|
+
it 'allows minimal options' do
|
10
|
+
api_expects(:content_view_filter_rules, :destroy) do |p|
|
11
|
+
p['content_view_filter_id'] == 1 && p['id'] == 9
|
12
|
+
end
|
13
|
+
run_cmd(%w(content-view filter rule delete --content-view-filter-id 1 --id 9))
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'resolves rule ID from rule name and filter ID' do
|
17
|
+
expect_filter_rule_search('rule9', 1, 9)
|
18
|
+
|
19
|
+
api_expects(:content_view_filter_rules, :destroy) do |p|
|
20
|
+
p['content_view_filter_id'] == 1 && p['id'] == 9
|
21
|
+
end
|
22
|
+
run_cmd(%w(content-view filter rule delete --content-view-filter-id 1 --name rule9))
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'allows name resolution of filter with content-view-id' do
|
26
|
+
ex = api_expects(:content_view_filters, :index) do |p|
|
27
|
+
p['name'] == 'cvf1' && p['content_view_id'] == 3
|
28
|
+
end
|
29
|
+
ex.returns(index_response([{'id' => 1}]))
|
30
|
+
|
31
|
+
api_expects(:content_view_filter_rules, :destroy) do |p|
|
32
|
+
p['content_view_filter_id'] == 1 && p['id'] == 9
|
33
|
+
end
|
34
|
+
run_cmd(%w(content-view filter rule delete --content-view-filter cvf1 --content-view-id 3
|
35
|
+
--id 9))
|
36
|
+
end
|
37
|
+
|
38
|
+
describe 'organization' do
|
39
|
+
it 'ID can be specified to resolve content view name' do
|
40
|
+
ex = api_expects(:content_views, :index) do |p|
|
41
|
+
p['name'] == 'cv3' && p['organization_id'] == '6'
|
42
|
+
end
|
43
|
+
ex.returns(index_response([{'id' => 3}]))
|
44
|
+
|
45
|
+
ex = api_expects(:content_view_filters, :index) do |p|
|
46
|
+
p['name'] == 'cvf1' && p['content_view_id'] == 3
|
47
|
+
end
|
48
|
+
ex.returns(index_response([{'id' => 1}]))
|
49
|
+
|
50
|
+
api_expects(:content_view_filter_rules, :destroy) do |p|
|
51
|
+
p['content_view_filter_id'] == 1 && p['id'] == 9
|
52
|
+
end
|
53
|
+
run_cmd(%w(content-view filter rule delete --content-view-filter cvf1 --organization-id 6
|
54
|
+
--content-view cv3 --id 9))
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'name can be specified to resolve content view name' do
|
58
|
+
ex = api_expects(:organizations, :index) do |p|
|
59
|
+
p[:search] == "name = \"org6\""
|
60
|
+
end
|
61
|
+
ex.returns(index_response([{'id' => 6}]))
|
62
|
+
|
63
|
+
ex = api_expects(:content_views, :index) do |p|
|
64
|
+
p['name'] == 'cv3' && p['organization_id'] == 6
|
65
|
+
end
|
66
|
+
ex.returns(index_response([{'id' => 3}]))
|
67
|
+
|
68
|
+
ex = api_expects(:content_view_filters, :index) do |p|
|
69
|
+
p['name'] == 'cvf1' && p['content_view_id'] == 3
|
70
|
+
end
|
71
|
+
ex.returns(index_response([{'id' => 1}]))
|
72
|
+
|
73
|
+
api_expects(:content_view_filter_rules, :destroy) do |p|
|
74
|
+
p['content_view_filter_id'] == 1 && p['id'] == 9
|
75
|
+
end
|
76
|
+
run_cmd(%w(content-view filter rule delete --content-view-filter cvf1 --organization org6
|
77
|
+
--content-view cv3 --id 9))
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'label can be specified to resolve content view name' do
|
81
|
+
ex = api_expects(:organizations, :index) do |p|
|
82
|
+
p[:search] == "label = \"org6\""
|
83
|
+
end
|
84
|
+
ex.returns(index_response([{'id' => 6}]))
|
85
|
+
|
86
|
+
ex = api_expects(:content_views, :index) do |p|
|
87
|
+
p['name'] == 'cv3' && p['organization_id'] == 6
|
88
|
+
end
|
89
|
+
ex.returns(index_response([{'id' => 3}]))
|
90
|
+
|
91
|
+
ex = api_expects(:content_view_filters, :index) do |p|
|
92
|
+
p['name'] == 'cvf1' && p['content_view_id'] == 3
|
93
|
+
end
|
94
|
+
ex.returns(index_response([{'id' => 1}]))
|
95
|
+
|
96
|
+
api_expects(:content_view_filter_rules, :destroy) do |p|
|
97
|
+
p['content_view_filter_id'] == 1 && p['id'] == 9
|
98
|
+
end
|
99
|
+
run_cmd(%w(content-view filter rule delete --content-view-filter cvf1 --organization-label
|
100
|
+
org6 --content-view cv3 --id 9))
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require_relative '../search_helpers'
|
2
|
+
|
3
|
+
module FilterRuleHelpers
|
4
|
+
include SearchHelpers
|
5
|
+
|
6
|
+
def expect_filter_rule_search(name, filter_id, return_id)
|
7
|
+
expect_generic_search(
|
8
|
+
:content_view_filter_rules,
|
9
|
+
params: {search: "name = \"#{name}\"", 'content_view_filter_id' => filter_id},
|
10
|
+
returns: {'id' => return_id})
|
11
|
+
end
|
12
|
+
end
|