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.
Files changed (198) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hammer_cli_katello/foreman_search_options_creators.rb +0 -12
  3. data/lib/hammer_cli_katello/host_collection.rb +6 -0
  4. data/lib/hammer_cli_katello/host_errata.rb +1 -1
  5. data/lib/hammer_cli_katello/repository.rb +0 -27
  6. data/lib/hammer_cli_katello/version.rb +1 -1
  7. data/test/data/2.5/foreman_api.json +1 -0
  8. data/test/data/3.0/foreman_api.json +1 -0
  9. data/test/data/3.10/foreman_api.json +1 -0
  10. data/test/data/3.11/foreman_api.json +1 -0
  11. data/test/data/3.12/foreman_api.json +1 -0
  12. data/test/data/3.13/foreman_api.json +1 -0
  13. data/test/data/3.14/foreman_api.json +1 -0
  14. data/test/data/3.15/foreman_api.json +1 -0
  15. data/test/data/3.16/foreman_api.json +1 -0
  16. data/test/data/3.17/foreman_api.json +1 -0
  17. data/test/data/3.18/foreman_api.json +1 -0
  18. data/test/data/3.19/foreman_api.json +1 -0
  19. data/test/data/3.2/foreman_api.json +1 -0
  20. data/test/data/3.4/foreman_api.json +1 -0
  21. data/test/data/3.5/foreman_api.json +1 -0
  22. data/test/data/3.6/foreman_api.json +1 -0
  23. data/test/data/3.7/foreman_api.json +1 -0
  24. data/test/data/3.8/foreman_api.json +1 -0
  25. data/test/data/3.9/foreman_api.json +1 -0
  26. data/test/data/4.0/foreman_api.json +1 -0
  27. data/test/data/4.1/foreman_api.json +1 -0
  28. data/test/data/Readme.md +5 -0
  29. data/test/functional/activation_key/add_host_collection_test.rb +62 -0
  30. data/test/functional/activation_key/content_override_test.rb +92 -0
  31. data/test/functional/activation_key/create_test.rb +33 -0
  32. data/test/functional/activation_key/data/activation_key.json +17 -0
  33. data/test/functional/activation_key/info_test.rb +29 -0
  34. data/test/functional/activation_key/list_test.rb +68 -0
  35. data/test/functional/activation_key/product_content_test.rb +23 -0
  36. data/test/functional/activation_key/remove_host_collection_test.rb +62 -0
  37. data/test/functional/activation_key/subscriptions_test.rb +74 -0
  38. data/test/functional/activation_key/update_test.rb +26 -0
  39. data/test/functional/apipie_helper_test.rb +31 -0
  40. data/test/functional/capsule/capsule_helpers.rb +13 -0
  41. data/test/functional/capsule/content/add_lifecycle_environment_test.rb +40 -0
  42. data/test/functional/capsule/content/cancel_synchronization_test.rb +42 -0
  43. data/test/functional/capsule/content/capsule_content_helpers.rb +24 -0
  44. data/test/functional/capsule/content/data/library_env.json +47 -0
  45. data/test/functional/capsule/content/data/sync_status.json +6 -0
  46. data/test/functional/capsule/content/data/sync_tasks.json +62 -0
  47. data/test/functional/capsule/content/info_test.rb +61 -0
  48. data/test/functional/capsule/content/lifecycle_environments_test.rb +19 -0
  49. data/test/functional/capsule/content/remove_lifecycle_environment_test.rb +40 -0
  50. data/test/functional/capsule/content/synchronization_status_test.rb +107 -0
  51. data/test/functional/capsule/info_test.rb +25 -0
  52. data/test/functional/capsule/list_test.rb +24 -0
  53. data/test/functional/content_credentials/create_test.rb +32 -0
  54. data/test/functional/content_credentials/data/test_cert.json +43 -0
  55. data/test/functional/content_credentials/info_test.rb +50 -0
  56. data/test/functional/content_credentials/list_test.rb +66 -0
  57. data/test/functional/content_export/complete/library_test.rb +155 -0
  58. data/test/functional/content_export/complete/version_test.rb +252 -0
  59. data/test/functional/content_export/content_export_helpers.rb +26 -0
  60. data/test/functional/content_export/generate_metadata_test.rb +64 -0
  61. data/test/functional/content_export/incremental/library_test.rb +172 -0
  62. data/test/functional/content_export/incremental/version_test.rb +268 -0
  63. data/test/functional/content_export/list_test.rb +64 -0
  64. data/test/functional/content_import/library_test.rb +85 -0
  65. data/test/functional/content_import/list_test.rb +65 -0
  66. data/test/functional/content_import/metadata.json +1 -0
  67. data/test/functional/content_import/version_test.rb +85 -0
  68. data/test/functional/content_view/add_content_view_version_test.rb +88 -0
  69. data/test/functional/content_view/add_repository_test.rb +21 -0
  70. data/test/functional/content_view/component/add_test.rb +177 -0
  71. data/test/functional/content_view/component/list_test.rb +55 -0
  72. data/test/functional/content_view/component/remove_test.rb +107 -0
  73. data/test/functional/content_view/component/update_test.rb +134 -0
  74. data/test/functional/content_view/content_view_helpers.rb +20 -0
  75. data/test/functional/content_view/copy_test.rb +53 -0
  76. data/test/functional/content_view/create_test.rb +34 -0
  77. data/test/functional/content_view/delete_test.rb +62 -0
  78. data/test/functional/content_view/filter/create_test.rb +57 -0
  79. data/test/functional/content_view/filter/delete_test.rb +90 -0
  80. data/test/functional/content_view/filter/info_test.rb +89 -0
  81. data/test/functional/content_view/filter/list_test.rb +98 -0
  82. data/test/functional/content_view/filter/update_test.rb +91 -0
  83. data/test/functional/content_view/list_test.rb +68 -0
  84. data/test/functional/content_view/publish_test.rb +24 -0
  85. data/test/functional/content_view/purge_test.rb +97 -0
  86. data/test/functional/content_view/remove_content_view_version_test.rb +88 -0
  87. data/test/functional/content_view/remove_test.rb +79 -0
  88. data/test/functional/content_view/update_test.rb +53 -0
  89. data/test/functional/content_view/version/incremental_update_test.rb +108 -0
  90. data/test/functional/content_view/version/list_test.rb +44 -0
  91. data/test/functional/content_view/version/promote_test.rb +34 -0
  92. data/test/functional/content_view/version/republish_repositories_test.rb +34 -0
  93. data/test/functional/content_view/version/update_test.rb +48 -0
  94. data/test/functional/erratum/erratum_helpers.rb +91 -0
  95. data/test/functional/erratum/info_test.rb +29 -0
  96. data/test/functional/erratum/list_test.rb +108 -0
  97. data/test/functional/file/file_helpers.rb +13 -0
  98. data/test/functional/file/info_test.rb +162 -0
  99. data/test/functional/file/list_test.rb +112 -0
  100. data/test/functional/filter_rule/create_test.rb +99 -0
  101. data/test/functional/filter_rule/delete_test.rb +104 -0
  102. data/test/functional/filter_rule/filter_rule_helpers.rb +12 -0
  103. data/test/functional/filter_rule/info_test.rb +104 -0
  104. data/test/functional/filter_rule/list_test.rb +91 -0
  105. data/test/functional/filter_rule/update_test.rb +104 -0
  106. data/test/functional/host/errata/apply_test.rb +45 -0
  107. data/test/functional/host/errata/info_test.rb +27 -0
  108. data/test/functional/host/errata/list_test.rb +49 -0
  109. data/test/functional/host/errata/recalculate_test.rb +40 -0
  110. data/test/functional/host/extensions/create_test.rb +95 -0
  111. data/test/functional/host/extensions/data/host.json +320 -0
  112. data/test/functional/host/extensions/data/host_list.json +117 -0
  113. data/test/functional/host/extensions/info_test.rb +35 -0
  114. data/test/functional/host/extensions/list_test.rb +21 -0
  115. data/test/functional/host/extensions/update_test.rb +70 -0
  116. data/test/functional/host/host_helpers.rb +8 -0
  117. data/test/functional/host/subscription/attach_test.rb +54 -0
  118. data/test/functional/host/subscription/auto_attach_test.rb +35 -0
  119. data/test/functional/host/subscription/content_override_test.rb +96 -0
  120. data/test/functional/host/subscription/product_content_test.rb +27 -0
  121. data/test/functional/host/subscription/register_test.rb +53 -0
  122. data/test/functional/host/subscription/remove_test.rb +52 -0
  123. data/test/functional/host/subscription/unregister_test.rb +37 -0
  124. data/test/functional/host/traces/list_test.rb +37 -0
  125. data/test/functional/host/traces/resolve_test.rb +31 -0
  126. data/test/functional/host_collection/add_host_test.rb +90 -0
  127. data/test/functional/host_collection/content_api_expectations.rb +35 -0
  128. data/test/functional/host_collection/content_install_test.rb +62 -0
  129. data/test/functional/host_collection/content_remove_test.rb +37 -0
  130. data/test/functional/host_collection/content_update_test.rb +37 -0
  131. data/test/functional/host_collection/copy_test.rb +64 -0
  132. data/test/functional/host_collection/create_test.rb +54 -0
  133. data/test/functional/host_collection/delete_test.rb +57 -0
  134. data/test/functional/host_collection/hosts_test.rb +39 -0
  135. data/test/functional/host_collection/info_test.rb +57 -0
  136. data/test/functional/host_collection/list_test.rb +63 -0
  137. data/test/functional/host_collection/remove_host_test.rb +90 -0
  138. data/test/functional/host_collection/update_test.rb +57 -0
  139. data/test/functional/hostgroup/create_test.rb +112 -0
  140. data/test/functional/hostgroup/data/hostgroup.json +50 -0
  141. data/test/functional/hostgroup/info_test.rb +33 -0
  142. data/test/functional/hostgroup/update_test.rb +120 -0
  143. data/test/functional/lifecycle_environment/create_test.rb +14 -0
  144. data/test/functional/lifecycle_environment/lifecycle_environment_helpers.rb +18 -0
  145. data/test/functional/lifecycle_environment/list_test.rb +38 -0
  146. data/test/functional/lifecycle_environment/update_test.rb +14 -0
  147. data/test/functional/local_helper_test.rb +30 -0
  148. data/test/functional/module_stream/info_test.rb +58 -0
  149. data/test/functional/module_stream/list_test.rb +53 -0
  150. data/test/functional/organization/delete_test.rb +26 -0
  151. data/test/functional/organization/info_test.rb +22 -0
  152. data/test/functional/organization/organization_helpers.rb +10 -0
  153. data/test/functional/package/list_test.rb +158 -0
  154. data/test/functional/package_group/list_test.rb +38 -0
  155. data/test/functional/ping_test.rb +59 -0
  156. data/test/functional/product/create_test.rb +54 -0
  157. data/test/functional/product/delete_test.rb +41 -0
  158. data/test/functional/product/info_test.rb +33 -0
  159. data/test/functional/product/list_test.rb +58 -0
  160. data/test/functional/product/product_helpers.rb +24 -0
  161. data/test/functional/product/remove_sync_plan_test.rb +35 -0
  162. data/test/functional/product/set_sync_plan_test.rb +49 -0
  163. data/test/functional/product/update_proxy.rb +48 -0
  164. data/test/functional/product/update_test.rb +46 -0
  165. data/test/functional/repository/create_test.rb +21 -0
  166. data/test/functional/repository/delete_test.rb +95 -0
  167. data/test/functional/repository/info_test.rb +156 -0
  168. data/test/functional/repository/list_test.rb +68 -0
  169. data/test/functional/repository/remove_content_test.rb +108 -0
  170. data/test/functional/repository/repository_helpers.rb +18 -0
  171. data/test/functional/repository/synchronize_test.rb +57 -0
  172. data/test/functional/repository/update_test.rb +149 -0
  173. data/test/functional/repository/upload_test.rb +345 -0
  174. data/test/functional/repository_set/available_repositories_test.rb +18 -0
  175. data/test/functional/repository_set/disable_test.rb +42 -0
  176. data/test/functional/repository_set/enable_test.rb +42 -0
  177. data/test/functional/repository_set/info_test.rb +17 -0
  178. data/test/functional/repository_set/list_test.rb +18 -0
  179. data/test/functional/repository_set/repository_set_helpers.rb +20 -0
  180. data/test/functional/search_helpers.rb +17 -0
  181. data/test/functional/simple_content_access/disable_test.rb +48 -0
  182. data/test/functional/simple_content_access/enable_test.rb +46 -0
  183. data/test/functional/srpm/list_test.rb +92 -0
  184. data/test/functional/subscription/list_test.rb +86 -0
  185. data/test/functional/sync_plan/create_test.rb +60 -0
  186. data/test/functional/sync_plan/delete_test.rb +46 -0
  187. data/test/functional/sync_plan/info_test.rb +37 -0
  188. data/test/functional/sync_plan/list_test.rb +31 -0
  189. data/test/functional/sync_plan/sync_plan_helpers.rb +8 -0
  190. data/test/functional/sync_plan/update_test.rb +44 -0
  191. data/test/functional/test_helper.rb +24 -0
  192. data/test/task_helper.rb +7 -0
  193. data/test/test_helper.rb +38 -0
  194. data/test/unit/id_name_options_validator_test.rb +96 -0
  195. data/test/unit/id_resolver_test.rb +58 -0
  196. data/test/unit/messages_test.rb +7 -0
  197. data/test/unit/search_options_creators_test.rb +145 -0
  198. metadata +388 -6
@@ -0,0 +1,57 @@
1
+ require_relative '../../test_helper'
2
+ require_relative '../../repository/repository_helpers'
3
+
4
+ describe 'content-view filter create' do
5
+ include RepositoryHelpers
6
+ before do
7
+ @cmd = %w(content-view filter create)
8
+ @base_params = ["--name=#{filter_name}", "--content-view-id=#{content_view_id}", "--type=rpm"]
9
+ end
10
+
11
+ let(:org_id) { 1 }
12
+ let(:filter_name) { 'test_filter' }
13
+ let(:content_view_id) { 1 }
14
+ let(:repositories) do
15
+ [
16
+ {'name' => 'repo-1', 'id' => 1},
17
+ {'name' => 'repo-2', 'id' => 2},
18
+ {'name' => 'repo-3', 'id' => 3}
19
+ ]
20
+ end
21
+ let(:repo_ids) { repositories.map { |repo| repo['id'] } }
22
+ let(:repo_names) { repositories.map { |repo| repo['name'] } }
23
+
24
+ it 'creates a content-view filter with repository ids' do
25
+ ids = repo_ids.join(',')
26
+ params = %W(--repository-ids=#{ids})
27
+
28
+ api_expects(:content_view_filters, :create, 'Create content-view filter')
29
+ .with_params('name' => filter_name, 'repository_ids' => repo_ids.map(&:to_s))
30
+ .returns({})
31
+
32
+ expected_result = success_result("Filter created.\n")
33
+ result = run_cmd(@cmd + @base_params + params)
34
+ assert_cmd(expected_result, result)
35
+ end
36
+
37
+ it 'creates a content-view filter with repository names' do
38
+ params = %W(--repositories=#{repo_names.join(',')} --product-id 3)
39
+
40
+ expect_generic_repositories_search({'names' => repo_names, 'product_id' => 3}, repositories)
41
+
42
+ api_expects(:content_view_filters, :create, "Create content-view filter")
43
+ .with_params('name' => filter_name, 'repository_ids' => repo_ids, 'type' => 'rpm')
44
+
45
+ expected_result = success_result("Filter created.\n")
46
+ result = run_cmd(@cmd + @base_params + params)
47
+ assert_cmd(expected_result, result)
48
+ end
49
+
50
+ it 'should fail with no product specified' do
51
+ ids = repo_ids.join(',')
52
+ params = ["--repositories=#{ids}", "--name=#{filter_name}", \
53
+ "--content-view-id=#{content_view_id}", "--type=rpm"]
54
+ result = run_cmd(@cmd + params)
55
+ assert(result.err[/--product-id, --product is required/])
56
+ end
57
+ end
@@ -0,0 +1,90 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../content_view_helpers')
3
+ require File.join(File.dirname(__FILE__), '../../organization/organization_helpers')
4
+
5
+ module HammerCLIKatello
6
+ describe 'Filter::DeleteCommand' do
7
+ include ContentViewHelpers
8
+ include OrganizationHelpers
9
+
10
+ before do
11
+ @cmd = %w(content-view filter delete)
12
+ end
13
+
14
+ it 'accepts filter id' do
15
+ params = ['--id=1']
16
+
17
+ api_expects(:content_view_filters, :destroy) do |par|
18
+ par['id'] == 1
19
+ end
20
+
21
+ run_cmd(@cmd + params)
22
+ end
23
+
24
+ it 'accepts filter name, content view name, and org name' do
25
+ params = ['--name=scanner', '--content-view=darkly', '--organization=pkd']
26
+
27
+ expect_organization_search('pkd', 1)
28
+ expect_content_view_search(1, 'darkly', 1)
29
+
30
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
31
+ par['content_view_id'] == 1 && par['name'] == 'scanner'
32
+ end
33
+ ex.returns(index_response([{'id' => '1'}]))
34
+
35
+ api_expects(:content_view_filters, :destroy) do |par|
36
+ par['id'] == '1'
37
+ end
38
+
39
+ run_cmd(@cmd + params)
40
+ end
41
+
42
+ it 'accepts filter name, content view name, and org label' do
43
+ params = ['--name=scanner', '--content-view=darkly', '--organization-label=pkd']
44
+
45
+ expect_organization_search('pkd', 1, field: 'label')
46
+ expect_content_view_search(1, 'darkly', 1)
47
+
48
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
49
+ par['content_view_id'] == 1 && par['name'] == 'scanner'
50
+ end
51
+ ex.returns(index_response([{'id' => '1'}]))
52
+
53
+ api_expects(:content_view_filters, :destroy) do |par|
54
+ par['id'] == '1'
55
+ end
56
+
57
+ run_cmd(@cmd + params)
58
+ end
59
+
60
+ it 'accepts filter name, content view name, and org id' do
61
+ params = ['--name=scanner', '--content-view=darkly', '--organization-id=1']
62
+
63
+ expect_content_view_search('1', 'darkly', 1)
64
+
65
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
66
+ par['content_view_id'] == 1 && par['name'] == 'scanner'
67
+ end
68
+ ex.returns(index_response([{'id' => '1'}]))
69
+
70
+ api_expects(:content_view_filters, :destroy) do |par|
71
+ par['id'] == '1'
72
+ end
73
+
74
+ run_cmd(@cmd + params)
75
+ end
76
+
77
+ it 'requires organization name or id if content view name is supplied' do
78
+ params = ["--name=high-castle", "--content-view=grasshopper"]
79
+ expected_result = usage_error_result(
80
+ @cmd,
81
+ 'At least one of options --organization-id, --organization, --organization-label ' \
82
+ 'is required.',
83
+ 'Could not delete the filter'
84
+ )
85
+ api_expects_no_call
86
+ result = run_cmd(@cmd + params)
87
+ assert_cmd(expected_result, result)
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,89 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../content_view_helpers')
3
+ require File.join(File.dirname(__FILE__), '../../organization/organization_helpers')
4
+
5
+ module HammerCLIKatello
6
+ describe 'Filter::InfoCommand' do
7
+ include ContentViewHelpers
8
+ include OrganizationHelpers
9
+
10
+ before do
11
+ @cmd = %w(content-view filter info)
12
+ end
13
+
14
+ it 'accepts filter id' do
15
+ params = ['--id=1']
16
+
17
+ api_expects(:content_view_filters, :show) do |par|
18
+ par['id'] == 1
19
+ end
20
+
21
+ run_cmd(@cmd + params)
22
+ end
23
+
24
+ it 'accepts filter name, content view name, and org name' do
25
+ params = ['--name=scanner', '--content-view=darkly', '--organization=pkd']
26
+
27
+ expect_organization_search('pkd', 1)
28
+ expect_content_view_search(1, 'darkly', 1)
29
+
30
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
31
+ par['content_view_id'] == 1 && par['name'] == 'scanner'
32
+ end
33
+ ex.returns(index_response([{'id' => '1'}]))
34
+
35
+ api_expects(:content_view_filters, :show) do |par|
36
+ par['id'] == '1'
37
+ end
38
+
39
+ run_cmd(@cmd + params)
40
+ end
41
+
42
+ it 'accepts filter name, content view name, and org label' do
43
+ params = ['--name=scanner', '--content-view=darkly', '--organization-label=pkd']
44
+
45
+ expect_organization_search('pkd', 1, field: 'label')
46
+ expect_content_view_search(1, 'darkly', 1)
47
+
48
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
49
+ par['content_view_id'] == 1 && par['name'] == 'scanner'
50
+ end
51
+ ex.returns(index_response([{'id' => '1'}]))
52
+
53
+ api_expects(:content_view_filters, :show) do |par|
54
+ par['id'] == '1'
55
+ end
56
+
57
+ run_cmd(@cmd + params)
58
+ end
59
+
60
+ it 'accepts filter name, content view name, and org id' do
61
+ params = ['--name=scanner', '--content-view=darkly', '--organization-id=1']
62
+
63
+ expect_content_view_search('1', 'darkly', 1)
64
+
65
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
66
+ par['content_view_id'] == 1 && par['name'] == 'scanner'
67
+ end
68
+ ex.returns(index_response([{'id' => '1'}]))
69
+
70
+ api_expects(:content_view_filters, :show) do |par|
71
+ par['id'] == '1'
72
+ end
73
+
74
+ run_cmd(@cmd + params)
75
+ end
76
+
77
+ it 'requires organization name or id if content view name is supplied' do
78
+ params = ["--name=high-castle", "--content-view=grasshopper"]
79
+ expected_result = usage_error_result(
80
+ @cmd,
81
+ 'At least one of options --organization-id, --organization, --organization-label ' \
82
+ 'is required.'
83
+ )
84
+ api_expects_no_call
85
+ result = run_cmd(@cmd + params)
86
+ assert_cmd(expected_result, result)
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,98 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../content_view_helpers')
3
+ require File.join(File.dirname(__FILE__), '../../organization/organization_helpers')
4
+
5
+ describe 'listing content view filters' do
6
+ include ContentViewHelpers
7
+ include OrganizationHelpers
8
+
9
+ before do
10
+ @cmd = %w(content-view filter list)
11
+ end
12
+
13
+ let(:org_id) { 1 }
14
+ let(:org_label) { 'Ubik' }
15
+ let(:cv_name) { "Trystero" }
16
+ let(:empty_response) do
17
+ {
18
+ "total" => 0,
19
+ "subtotal" => 0,
20
+ "page" => "1",
21
+ "per_page" => "1000",
22
+ "error" => nil,
23
+ "search" => nil,
24
+ "sort" => {
25
+ "by" => nil,
26
+ "order" => nil
27
+ },
28
+ "results" => []
29
+ }
30
+ end
31
+
32
+ it "lists content view filters" do
33
+ params = ["--content-view-id=1"]
34
+
35
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
36
+ par['content_view_id'] == 1 && par['page'] == 1 && par['per_page'] == 1000
37
+ end
38
+ ex.returns(empty_response)
39
+
40
+ expected_result = success_result("----------|------|-------------|------|----------
41
+ FILTER ID | NAME | DESCRIPTION | TYPE | INCLUSION
42
+ ----------|------|-------------|------|----------
43
+ ")
44
+
45
+ result = run_cmd(@cmd + params)
46
+ assert_cmd(expected_result, result)
47
+ end
48
+
49
+ it "lists content view filters for a content view name and org id" do
50
+ params = ["--organization-id=#{org_id}", "--content-view=#{cv_name}"]
51
+
52
+ expect_content_view_search(org_id.to_s, cv_name, 1)
53
+
54
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
55
+ par['content_view_id'] == 1 && par['page'] == 1 && par['per_page'] == 1000
56
+ end
57
+ ex.returns(empty_response)
58
+
59
+ expected_result = success_result("----------|------|-------------|------|----------
60
+ FILTER ID | NAME | DESCRIPTION | TYPE | INCLUSION
61
+ ----------|------|-------------|------|----------
62
+ ")
63
+
64
+ result = run_cmd(@cmd + params)
65
+ assert_cmd(expected_result, result)
66
+ end
67
+
68
+ it "lists content view filters for a content view name and org label" do
69
+ params = ["--organization-label=#{org_label}", "--content-view=#{cv_name}"]
70
+
71
+ expect_organization_search(org_label, org_id, field: 'label')
72
+ expect_content_view_search(org_id, cv_name, 1)
73
+
74
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
75
+ par['content_view_id'] == 1 && par['page'] == 1 && par['per_page'] == 1000
76
+ end
77
+ ex.returns(empty_response)
78
+
79
+ expected_result = success_result("----------|------|-------------|------|----------
80
+ FILTER ID | NAME | DESCRIPTION | TYPE | INCLUSION
81
+ ----------|------|-------------|------|----------
82
+ ")
83
+
84
+ result = run_cmd(@cmd + params)
85
+ assert_cmd(expected_result, result)
86
+ end
87
+
88
+ it 'requires org name, label, or id if content view name is supplied' do
89
+ params = ["--content-view=#{cv_name}"]
90
+ expected_result = usage_error_result(
91
+ @cmd,
92
+ 'At least one of options --organization-id, --organization, --organization-label is required.'
93
+ )
94
+ api_expects_no_call
95
+ result = run_cmd(@cmd + params)
96
+ assert_cmd(expected_result, result)
97
+ end
98
+ end
@@ -0,0 +1,91 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../content_view_helpers')
3
+ require File.join(File.dirname(__FILE__), '../../organization/organization_helpers')
4
+
5
+ module HammerCLIKatello
6
+ describe 'Filter::UpdateCommand' do
7
+ include ContentViewHelpers
8
+ include OrganizationHelpers
9
+
10
+ before do
11
+ @cmd = %w(content-view filter update)
12
+ end
13
+
14
+ it 'accepts filter id' do
15
+ params = ['--id=1', '--new-name=valis']
16
+
17
+ api_expects(:content_view_filters, :update) do |par|
18
+ par['id'] == 1 && par['name'] == 'valis'
19
+ end
20
+
21
+ run_cmd(@cmd + params)
22
+ end
23
+
24
+ it 'accepts filter name, content view name, description , and org name' do
25
+ params = ['--name=scanner', '--content-view=darkly', '--organization=pkd', '--new-name=ubik',
26
+ '--description=zoo']
27
+
28
+ expect_organization_search('pkd', 1)
29
+ expect_content_view_search(1, 'darkly', 1)
30
+
31
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
32
+ par['content_view_id'] == 1 && par['name'] == 'scanner'
33
+ end
34
+ ex.returns(index_response([{'id' => '1'}]))
35
+
36
+ api_expects(:content_view_filters, :update) do |par|
37
+ par['id'] == '1' && par['name'] == 'ubik' && par['description'] == 'zoo'
38
+ end
39
+
40
+ run_cmd(@cmd + params)
41
+ end
42
+
43
+ it 'accepts filter name, content view name, and org label' do
44
+ params = ['--name=scanner', '--content-view=darkly',
45
+ '--organization-label=pkd', '--new-name=ubik']
46
+
47
+ expect_organization_search('pkd', 1, field: 'label')
48
+ expect_content_view_search(1, 'darkly', 1)
49
+
50
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
51
+ par['content_view_id'] == 1 && par['name'] == 'scanner'
52
+ end
53
+ ex.returns(index_response([{'id' => '1'}]))
54
+
55
+ api_expects(:content_view_filters, :update) do |par|
56
+ par['id'] == '1' && par['name'] == 'ubik'
57
+ end
58
+
59
+ run_cmd(@cmd + params)
60
+ end
61
+
62
+ it 'accepts filter name, content view name, and org id' do
63
+ params = ['--name=scanner', '--content-view=darkly', '--organization-id=1', '--new-name=ubik']
64
+
65
+ expect_content_view_search('1', 'darkly', 1)
66
+
67
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
68
+ par['content_view_id'] == 1 && par['name'] == 'scanner'
69
+ end
70
+ ex.returns(index_response([{'id' => '1'}]))
71
+
72
+ api_expects(:content_view_filters, :update) do |par|
73
+ par['id'] == '1' && par['name'] == 'ubik'
74
+ end
75
+
76
+ run_cmd(@cmd + params)
77
+ end
78
+
79
+ it 'requires content view name or id if name is supplied' do
80
+ params = ["--name=high-castle"]
81
+ expected_result = usage_error_result(
82
+ @cmd,
83
+ 'At least one of options --content-view-id, --content-view is required.',
84
+ 'Could not update the filter'
85
+ )
86
+ api_expects_no_call
87
+ result = run_cmd(@cmd + params)
88
+ assert_cmd(expected_result, result)
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,68 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../lifecycle_environment/lifecycle_environment_helpers')
3
+
4
+ describe 'listing content-views' do
5
+ include LifecycleEnvironmentHelpers
6
+
7
+ before do
8
+ @cmd = %w(content-view list)
9
+ end
10
+
11
+ let(:org_id) { 1 }
12
+ let(:lifecycle_env_id) { 1 }
13
+ let(:empty_response) do
14
+ {
15
+ "total" => 0,
16
+ "subtotal" => 0,
17
+ "page" => "1",
18
+ "per_page" => "1000",
19
+ "error" => nil,
20
+ "search" => nil,
21
+ "sort" => {
22
+ "by" => nil,
23
+ "order" => nil
24
+ },
25
+ "results" => []
26
+ }
27
+ end
28
+
29
+ it "lists an organizations content-views" do
30
+ params = ["--organization-id=#{org_id}"]
31
+
32
+ ex = api_expects(:content_views, :index, 'Organizations content-views list') do |par|
33
+ par['organization_id'] == org_id && par['page'] == 1 &&
34
+ par['per_page'] == 1000
35
+ end
36
+
37
+ ex.returns(empty_response)
38
+ expected_result = success_result(
39
+ "----------------|------|-------|-----------|----------------|---------------
40
+ CONTENT VIEW ID | NAME | LABEL | COMPOSITE | LAST PUBLISHED | REPOSITORY IDS
41
+ ----------------|------|-------|-----------|----------------|---------------
42
+ ")
43
+
44
+ result = run_cmd(@cmd + params)
45
+ assert_cmd(expected_result, result)
46
+ end
47
+
48
+ it "lists the content-views belonging to a lifecycle-environment by name" do
49
+ params = ["--organization-id=#{org_id}", '--lifecycle-environment=test']
50
+
51
+ expect_lifecycle_environment_search(org_id, 'test', lifecycle_env_id)
52
+
53
+ ex = api_expects(:content_views, :index, 'lifecycles content-views list') do |par|
54
+ par['organization_id'] == org_id && par['page'] == 1 &&
55
+ par['per_page'] == 1000
56
+ end
57
+
58
+ ex.returns(empty_response)
59
+ expected_result = success_result(
60
+ "----------------|------|-------|-----------|----------------|---------------
61
+ CONTENT VIEW ID | NAME | LABEL | COMPOSITE | LAST PUBLISHED | REPOSITORY IDS
62
+ ----------------|------|-------|-----------|----------------|---------------
63
+ ")
64
+
65
+ result = run_cmd(@cmd + params)
66
+ assert_cmd(expected_result, result)
67
+ end
68
+ end
@@ -0,0 +1,24 @@
1
+ require_relative '../test_helper'
2
+ require 'hammer_cli_katello/content_view'
3
+
4
+ module HammerCLIKatello
5
+ describe ContentView do
6
+ it 'allows major & minor' do
7
+ ex = api_expects(:organizations, :index) do |p|
8
+ p[:search] == "name = \"org1\""
9
+ end
10
+ ex.returns(index_response([{'id' => 1}]))
11
+
12
+ ex = api_expects(:content_views, :index) do |p|
13
+ p['name'] == 'cv' && p['organization_id'] == 1
14
+ end
15
+ ex.returns(index_response([{'id' => 3}]))
16
+
17
+ api_expects(:content_views, :publish) do |p|
18
+ p['id'] == 3 && p['major'] == 5 && p['minor'] == 1
19
+ end
20
+
21
+ run_cmd(%w(content-view publish --major 5 --minor 1 --organization org1 --name cv --async))
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,97 @@
1
+ require_relative '../test_helper'
2
+ require_relative '../organization/organization_helpers'
3
+ require_relative '../content_view/content_view_helpers'
4
+ require 'hammer_cli_katello/content_view'
5
+ require 'hammer_cli_katello/content_view_purge'
6
+
7
+ module HammerCLIKatello
8
+ describe ContentViewPurgeCommand do
9
+ include ForemanTaskHelpers
10
+
11
+ let(:versions) do
12
+ {'results' => [
13
+ {"id" => 23,
14
+ "version" => "1.0",
15
+ "content_view" => {"id" => 7, "name" => "test cv"},
16
+ "composite_content_views" => [{"id" => 14, "name" => "comp_view"}],
17
+ "composite_content_view_versions" => [],
18
+ "environments" => [{"id" => 1, "name" => "Library"}]},
19
+ {"id" => 34,
20
+ "version" => "2.0",
21
+ "content_view" => {"id" => 7, "name" => "test cv"},
22
+ "composite_content_views" => [],
23
+ "composite_content_view_versions" => [],
24
+ "environments" => []},
25
+ {"id" => 45,
26
+ "version" => "2.10",
27
+ "content_view" => {"id" => 7, "name" => "test cv"},
28
+ "composite_content_views" => [],
29
+ "composite_content_view_versions" => [],
30
+ "environments" => [{"id" => 1, "name" => "Library"}]},
31
+ {"id" => 56,
32
+ "version" => "3.0",
33
+ "content_view" => {"id" => 7, "name" => "test cv"},
34
+ "composite_content_views" => [{"id" => 14, "name" => "comp_view"}],
35
+ "composite_content_view_versions" => [],
36
+ "environments" => []},
37
+ {"id" => 67,
38
+ "version" => "7.0",
39
+ "content_view" => {"id" => 7, "name" => "test cv"},
40
+ "composite_content_views" => [],
41
+ "composite_content_view_versions" => [],
42
+ "environments" => []},
43
+ {"id" => 78,
44
+ "version" => "2.0",
45
+ "content_view" => {"id" => 7, "name" => "test cv"},
46
+ "composite_content_views" => [],
47
+ "composite_content_view_versions" => [{"id" => 87, "version" => "1.0"}],
48
+ "environments" => []}
49
+ ]}
50
+ end
51
+
52
+ it 'fails gracefully if count <= 0' do
53
+ api_expects_no_call
54
+
55
+ r = run_cmd(%w(content-view purge --id 2 --count -1))
56
+ assert(r.err.include?('Invalid value for --count option'), 'Incorrect error message')
57
+ end
58
+
59
+ it 'fails gracefully when there are no versions to delete' do
60
+ ex = api_expects(:content_view_versions, :index)
61
+ ex = ex.with_params("content_view_id" => '2')
62
+ ex.returns(versions)
63
+
64
+ r = run_cmd(%w(content-view purge --id 2 --count 3))
65
+ assert(r.err.include?('No versions to delete.'), 'Incorrect error message')
66
+ end
67
+
68
+ it 'only deletes unassociated versions' do
69
+ ex = api_expects(:content_view_versions, :index)
70
+ ex = ex.with_params("content_view_id" => '2')
71
+ ex.returns(versions)
72
+
73
+ [34, 67].each do |version_id|
74
+ ex = api_expects(:content_view_versions, :destroy)
75
+ ex = ex.with_params("id" => version_id)
76
+ ex.returns('id' => '3', 'state' => 'stopped')
77
+ expect_foreman_task('3')
78
+ end
79
+
80
+ run_cmd(%w(content-view purge --id 2 --count 0))
81
+ end
82
+
83
+ it 'allows for async purge of versions' do
84
+ ex = api_expects(:content_view_versions, :index)
85
+ ex = ex.with_params("content_view_id" => '2')
86
+ ex.returns(versions)
87
+
88
+ [34, 67].each do |version_id|
89
+ ex = api_expects(:content_view_versions, :destroy)
90
+ ex = ex.with_params("id" => version_id)
91
+ ex.returns('id' => '3')
92
+ end
93
+
94
+ run_cmd(%w(content-view purge --id 2 --count 0 --async))
95
+ end
96
+ end
97
+ end