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,88 @@
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
+
6
+ module HammerCLIKatello
7
+ describe ContentView::RemoveContentViewVersionCommand do
8
+ include OrganizationHelpers
9
+ include ContentViewHelpers
10
+
11
+ it 'allows minimal options' do
12
+ ex = api_expects(:content_views, :show) do |p|
13
+ p[:id] == '1'
14
+ end
15
+ ex.returns('id' => 1, 'component_ids' => [1, 3, 6])
16
+ api_expects(:content_views, :update) do |p|
17
+ p['id'] == '1' && p['component_ids'] == %w(1 3)
18
+ end
19
+ run_cmd(%w(content-view remove-version --id 1 --content-view-version-id 6))
20
+ end
21
+
22
+ it 'resolves content view version ID' do
23
+ ex = api_expects(:content_view_versions, :index) do |p|
24
+ p['content_view_id'] == 3 && p['version'] == '2.1'
25
+ end
26
+ ex.returns(index_response([{'id' => 6}]))
27
+ ex.returns('id' => 1, 'component_ids' => [1, 3, 6])
28
+ ex = api_expects(:content_views, :show) do |p|
29
+ p[:id] == '1'
30
+ end
31
+ ex.returns('id' => 1, 'component_ids' => [1, 3])
32
+ api_expects(:content_views, :update) do |p|
33
+ p['id'] == '1' && p['component_ids'] == %w(1 3)
34
+ end
35
+ run_cmd(%w(content-view remove-version --id 1 --content-view-id 3 --content-view-version 2.1))
36
+ end
37
+
38
+ describe 'OrganizationOptions' do
39
+ it 'requires organization if content view name is supplied' do
40
+ api_expects_no_call
41
+ result = run_cmd(%w(content-view remove-version --name cv1))
42
+ assert(result.err[/--organization-id, --organization, --organization-label is required/],
43
+ "Organization option requirements are validated")
44
+ end
45
+
46
+ it 'allows organization id' do
47
+ expect_content_view_search('1', 'cv2', 2)
48
+ ex = api_expects(:content_views, :show) do |p|
49
+ p[:id] == 2
50
+ end
51
+ ex.returns('id' => 2, 'component_ids' => [1, 2, 3])
52
+ api_expects(:content_views, :update) do |p|
53
+ p['id'] == 2 && p['component_ids'] == %w(1 2)
54
+ end
55
+ run_cmd(%w(content-view remove-version --name cv2 --organization-id 1
56
+ --content-view-version-id 3))
57
+ end
58
+
59
+ it 'allows organization name' do
60
+ expect_organization_search('org1', 1)
61
+ expect_content_view_search(1, 'cv2', 2)
62
+ ex = api_expects(:content_views, :show) do |p|
63
+ p[:id] == 2
64
+ end
65
+ ex.returns('id' => 2, 'component_ids' => [1, 2, 3])
66
+ api_expects(:content_views, :update) do |p|
67
+ p['id'] == 2 && p['component_ids'] == %w(1 2)
68
+ end
69
+ run_cmd(%w(content-view remove-version --name cv2 --organization org1
70
+ --content-view-version-id 3))
71
+ end
72
+
73
+ it 'allows organization label' do
74
+ expect_organization_search('org1', 1, field: 'label')
75
+ expect_content_view_search(1, 'cv2', 2)
76
+ ex = api_expects(:content_views, :show) do |p|
77
+ p[:id] == 2
78
+ end
79
+ ex.returns('id' => 2, 'component_ids' => [1, 2, 3])
80
+ api_expects(:content_views, :update) do |p|
81
+ p['id'] == 2 && p['component_ids'] == %w(1 2)
82
+ end
83
+ run_cmd(%w(content-view remove-version --name cv2 --organization-label org1
84
+ --content-view-version-id 3))
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,79 @@
1
+ require_relative '../test_helper'
2
+ require 'hammer_cli_katello/content_view'
3
+
4
+ module HammerCLIKatello
5
+ describe ContentView::RemoveCommand do
6
+ include ForemanTaskHelpers
7
+
8
+ describe 'content view version options' do
9
+ it 'allows removing versions by ID' do
10
+ ex = api_expects(:content_views, :remove) do |p|
11
+ p['id'] == 1 && p['content_view_version_ids'] == %w(6 7 8)
12
+ end
13
+ ex.returns(id: '9')
14
+
15
+ expect_foreman_task('9')
16
+
17
+ run_cmd(%w(content-view remove --id 1 --content-view-version-ids 6,7,8))
18
+ end
19
+
20
+ it 'allows removing versions by version number' do
21
+ versions = %w(6.0 7.0 8.0)
22
+ ids = [6, 7, 8]
23
+
24
+ api_expects(:content_view_versions, :index).with_params(
25
+ 'search' => %(version = "#{versions.join('" or version = "')}"),
26
+ 'content_view_id' => 1
27
+ ).returns(index_response(ids.map { |v| { 'id' => v } }))
28
+
29
+ api_expects(:content_views, :remove).with_params(
30
+ 'id' => 1, 'content_view_version_ids' => ids
31
+ ).returns(id: '9')
32
+
33
+ expect_foreman_task('9')
34
+
35
+ run_cmd(%w(content-view remove --id 1 --content-view-versions 6.0,7.0,8.0))
36
+ end
37
+ end
38
+
39
+ describe 'environment options' do
40
+ it 'allows removing versions by ID' do
41
+ ex = api_expects(:content_views, :remove) do |p|
42
+ p['id'] == 1 && p['environment_ids'] == %w(6 7 8)
43
+ end
44
+ ex.returns(id: '9')
45
+
46
+ expect_foreman_task('9')
47
+
48
+ run_cmd(%w(content-view remove --id 1 --environment-ids 6,7,8))
49
+ end
50
+
51
+ it 'requires organization options when removing environments by name' do
52
+ api_expects_no_call
53
+
54
+ run_cmd(%w(content-view remove --id 1 --environments env6,env7,env8))
55
+ end
56
+
57
+ it 'allows removing environments by name' do
58
+ environment_ids = [6, 7, 8]
59
+ all_environment_ids = [3, 4, 5, 6, 7, 8]
60
+
61
+ ex = api_expects(:lifecycle_environments, :index) do |p|
62
+ p['organization_id'] == '1'
63
+ end
64
+ ex.returns(index_response(all_environment_ids.map do |id|
65
+ {'id' => id, 'name' => "env#{id}"}
66
+ end))
67
+
68
+ ex = api_expects(:content_views, :remove) do |p|
69
+ p['id'] == 1 && p['environment_ids'] == environment_ids
70
+ end
71
+ ex.returns(id: '9')
72
+
73
+ expect_foreman_task('9')
74
+
75
+ run_cmd(%w(content-view remove --id 1 --environments env6,env7,env8 --organization-id 1))
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,53 @@
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
+
6
+ module HammerCLIKatello
7
+ describe ContentView::UpdateCommand do
8
+ include OrganizationHelpers
9
+ include ContentViewHelpers
10
+
11
+ it 'allows minimal options' do
12
+ api_expects(:content_views, :update) do |p|
13
+ p['id'] == 2
14
+ end
15
+ run_cmd(%w(content-view update --id 2))
16
+ end
17
+
18
+ describe 'OrganizationOptions' do
19
+ it 'requires organization if content view name is supplied' do
20
+ api_expects_no_call
21
+ result = run_cmd(%w(content-view update --name cv2))
22
+ assert(result.err[/--organization-id, --organization, --organization-label is required/],
23
+ "Organization option requirements are validated")
24
+ end
25
+
26
+ it 'allows organization id' do
27
+ expect_content_view_search('1', 'cv2', 2)
28
+ api_expects(:content_views, :update) do |p|
29
+ p['id'] == 2
30
+ end
31
+ run_cmd(%w(content-view update --name cv2 --organization-id 1))
32
+ end
33
+
34
+ it 'allows organization name' do
35
+ expect_organization_search('org1', 1)
36
+ expect_content_view_search(1, 'cv2', 2)
37
+ api_expects(:content_views, :update) do |p|
38
+ p['id'] == 2
39
+ end
40
+ run_cmd(%w(content-view update --name cv2 --organization org1))
41
+ end
42
+
43
+ it 'allows organization label' do
44
+ expect_organization_search('org1', 1, field: 'label')
45
+ expect_content_view_search(1, 'cv2', 2)
46
+ api_expects(:content_views, :update) do |p|
47
+ p['id'] == 2
48
+ end
49
+ run_cmd(%w(content-view update --name cv2 --organization-label org1))
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,108 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../../organization/organization_helpers')
3
+ require File.join(File.dirname(__FILE__),
4
+ '../../lifecycle_environment/lifecycle_environment_helpers')
5
+
6
+ describe 'content-view version incremental-update' do
7
+ include OrganizationHelpers
8
+ include LifecycleEnvironmentHelpers
9
+ include ForemanTaskHelpers
10
+
11
+ before do
12
+ @cmd = %w(content-view version incremental-update)
13
+ end
14
+
15
+ it "performs incremental update with no updates" do
16
+ params = ['--errata-ids=FOO2012', '--lifecycle-environment-ids=1,2,3',
17
+ '--content-view-version-id=5']
18
+
19
+ ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
20
+ par['update_hosts'].nil? &&
21
+ par[:content_view_version_environments][0][:environment_ids] == %w(1 2 3) &&
22
+ par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
23
+ par['add_content']['errata_ids'] == ['FOO2012']
24
+ end
25
+ ex.returns('id' => '3', 'state' => 'stopped')
26
+
27
+ expect_foreman_task('3')
28
+
29
+ result = run_cmd(@cmd + params)
30
+ assert_equal(result.exit_code, 0)
31
+ end
32
+
33
+ it "performs incremental update with update all hosts" do
34
+ params = ['--update-all-hosts=true', '--errata-ids=FOO2012',
35
+ '--lifecycle-environment-ids=1,2,3', '--content-view-version-id=5']
36
+
37
+ ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
38
+ par['update_hosts']['included'][:search] == '' &&
39
+ par[:content_view_version_environments][0][:environment_ids] == %w(1 2 3) &&
40
+ par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
41
+ par['add_content']['errata_ids'] == ['FOO2012']
42
+ end
43
+ ex.returns('id' => '3', 'state' => 'stopped')
44
+
45
+ expect_foreman_task('3')
46
+
47
+ result = run_cmd(@cmd + params)
48
+ assert_equal(result.exit_code, 0)
49
+ end
50
+
51
+ it "performs incremental update with no environment" do
52
+ params = ['--update-all-hosts=true', '--errata-ids=FOO2012', '--content-view-version-id=5']
53
+
54
+ ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
55
+ par['update_hosts']['included'][:search] == '' &&
56
+ par[:content_view_version_environments][0][:environment_ids].nil? &&
57
+ par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
58
+ par['add_content']['errata_ids'] == ['FOO2012']
59
+ end
60
+ ex.returns('id' => '3', 'state' => 'stopped')
61
+
62
+ expect_foreman_task('3')
63
+
64
+ result = run_cmd(@cmd + params)
65
+ assert_equal(result.exit_code, 0)
66
+ end
67
+
68
+ it "performs incremental update with names" do
69
+ params = ['--update-all-hosts=true', '--errata-ids=FOO2012',
70
+ '--lifecycle-environments=trump,cruz,bernie',
71
+ '--content-view-version-id=5', '--organization=USA']
72
+
73
+ expect_organization_search('USA', 5)
74
+ expect_lifecycle_environments_request(5, [{'name' => 'trump', 'id' => 1},
75
+ {'name' => 'cruz', 'id' => 2},
76
+ {'name' => 'bernie', 'id' => 3}])
77
+
78
+ ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
79
+ par['update_hosts']['included'][:search] == '' &&
80
+ par[:content_view_version_environments][0][:environment_ids] == [1, 2, 3] &&
81
+ par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
82
+ par['add_content']['errata_ids'] == ['FOO2012']
83
+ end
84
+ ex.returns('id' => '3', 'state' => 'stopped')
85
+
86
+ expect_foreman_task('3')
87
+
88
+ result = run_cmd(@cmd + params)
89
+ assert_equal(result.exit_code, 0)
90
+ end
91
+
92
+ it "performs incremental update with packages" do
93
+ params = ['--content-view-version-id=5', '--packages=bla', '--lifecycle-environment-ids=1']
94
+
95
+ expect_generic_search(
96
+ :packages, params: {search: "name = \"bla\""}, returns: {'id' => 15}
97
+ )
98
+
99
+ ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
100
+ par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
101
+ par["add_content"]["package_ids"] == [15]
102
+ end
103
+ ex.returns('id' => '3', 'state' => 'stopped')
104
+ expect_foreman_task('3')
105
+ result = run_cmd(@cmd + params)
106
+ assert_equal(result.exit_code, 0)
107
+ end
108
+ end
@@ -0,0 +1,44 @@
1
+ require_relative '../../test_helper'
2
+ require 'hammer_cli_katello/content_view_version'
3
+
4
+ module HammerCLIKatello
5
+ describe ContentViewVersion::ListCommand do
6
+ it 'allows minimal options' do
7
+ api_expects(:content_view_versions, :index)
8
+
9
+ run_cmd(%w(content-view version list))
10
+ end
11
+
12
+ describe 'allows organization' do
13
+ it 'id' do
14
+ api_expects(:content_view_versions, :index) do |p|
15
+ p['organization_id'] == 1
16
+ end
17
+
18
+ run_cmd(%w(content-view version list --organization-id 1))
19
+ end
20
+
21
+ it 'name' do
22
+ api_expects(:organizations, :index) { |par| par[:search] == "name = \"org1\"" }
23
+ .at_least_once.returns(index_response([{'id' => 1}]))
24
+
25
+ api_expects(:content_view_versions, :index) do |p|
26
+ p['organization_id'] == 1
27
+ end
28
+
29
+ run_cmd(%w(content-view version list --organization org1))
30
+ end
31
+
32
+ it 'label' do
33
+ api_expects(:organizations, :index) { |par| par[:search] == "label = \"org1\"" }
34
+ .at_least_once.returns(index_response([{'id' => 1}]))
35
+
36
+ api_expects(:content_view_versions, :index) do |p|
37
+ p['organization_id'] == 1
38
+ end
39
+
40
+ run_cmd(%w(content-view version list --organization-label org1))
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,34 @@
1
+ require_relative '../../test_helper'
2
+
3
+ module HammerCLIKatello
4
+ describe ContentViewVersion::PromoteCommand do
5
+ it 'allows promoting a content view' do
6
+ ex = api_expects(:organizations, :index) do |p|
7
+ p[:search] == "name = \"org1\""
8
+ end
9
+ ex.at_least_once.returns(index_response([{'id' => 1}]))
10
+
11
+ ex = api_expects(:content_views, :index) do |p|
12
+ p['name'] == 'cv' && p['organization_id'] == 1
13
+ end
14
+ ex.returns(index_response([{'id' => 3}]))
15
+
16
+ ex = api_expects(:content_view_versions, :index) do |p|
17
+ p['version'] == '1' && p['content_view_id'] == 3
18
+ end
19
+ ex.returns(index_response([{'id' => 6}]))
20
+
21
+ ex = api_expects(:lifecycle_environments, :index) do |p|
22
+ p['organization_id'] == 1 && p['name'] == 'test'
23
+ end
24
+ ex.returns(index_response([{'id' => 9}]))
25
+
26
+ api_expects(:content_view_versions, :promote) do |p|
27
+ p['id'] == 6 && p['environment_ids'] == [9]
28
+ end
29
+
30
+ run_cmd(%w(content-view version promote --organization org1 --content-view cv
31
+ --to-lifecycle-environment test --version 1 --async))
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ require_relative '../../test_helper'
2
+
3
+ module HammerCLIKatello
4
+ describe ContentViewVersion::RepublishRepositoriesCommand do
5
+ include ForemanTaskHelpers
6
+ include OrganizationHelpers
7
+
8
+ it 'allows republishing repositories on a content view version' do
9
+ expect_organization_search('org1', 1)
10
+
11
+ ex = api_expects(:content_views, :index) do |p|
12
+ p['name'] == 'cv' && p['organization_id'] == 1
13
+ end
14
+ ex.returns(index_response([{'id' => 3}]))
15
+
16
+ ex = api_expects(:content_view_versions, :index) do |p|
17
+ p['version'] == '1' && p['content_view_id'] == 3
18
+ end
19
+ ex.returns(index_response([{'id' => 6}]))
20
+
21
+ ex = api_expects(:content_view_versions, :republish_repositories) do |p|
22
+ p['id'] == 6
23
+ end
24
+ ex.returns('state' => 'pending', 'id' => '3')
25
+
26
+ expect_foreman_task('3')
27
+
28
+ result = run_cmd(%w(content-view version republish-repositories --organization org1
29
+ --content-view cv --version 1))
30
+
31
+ assert_equal(result.exit_code, 0)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,48 @@
1
+ require_relative '../../test_helper'
2
+ require 'hammer_cli_katello/content_view_version'
3
+
4
+ module HammerCLIKatello
5
+ describe ContentViewVersion::UpdateCommand do
6
+ include OrganizationHelpers
7
+ it 'allows minimal options' do
8
+ ex = api_expects(:content_view_versions, :update).with_params('description' => 'pizza')
9
+ ex.returns('id' => '2', 'description' => 'pizza')
10
+
11
+ result = run_cmd(%w(content-view version update --id 2 --description pizza))
12
+ assert_equal(result.exit_code, 0)
13
+ end
14
+ end
15
+
16
+ describe 'content view options' do
17
+ it 'allows content view id with one version' do
18
+ ex = api_expects(:content_view_versions, :index)
19
+ ex.returns('id' => '1', 'content_view' => [{'id' => '2'}])
20
+
21
+ ex = api_expects(:content_view_versions, :update).with_params('description' => 'pizza')
22
+ ex.returns('id' => '1', 'description' => 'pizza', 'content_view' => [{'id' => '2'}])
23
+
24
+ result = run_cmd(%w(content-view version update --description pizza --content-view-id 2))
25
+ assert_equal(result.exit_code, 0)
26
+ end
27
+
28
+ it 'allows content view id with multiple versions' do
29
+ ex = api_expects(:content_view_versions, :index)
30
+ ex.returns('id' => '2', 'content_view' => [{'id' => '3'}])
31
+
32
+ ex = api_expects(:content_view_versions, :update).with_params('description' => 'pizza')
33
+ ex.returns('id' => '2', 'description' => 'pizza', 'content_view' => [{'id' => '3'}])
34
+
35
+ result = run_cmd(%w(content-view version update --description pizza
36
+ --content-view-id 3 --version 2))
37
+ assert_equal(result.exit_code, 0)
38
+ end
39
+
40
+ it 'blocks update without description' do
41
+ ex = api_expects(:content_view_versions, :index)
42
+ ex.returns('id' => '1', 'content_view' => [{'id' => '2'}])
43
+
44
+ result = run_cmd(%w(content-view version update --content-view-id 2))
45
+ assert_equal(result.exit_code, 64)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,91 @@
1
+ module ErratumHelpers
2
+ # rubocop:disable MethodLength
3
+ def make_erratum_response(with_packages = true, with_module_streams = true)
4
+ packs = with_packages ? packages : []
5
+ if with_module_streams
6
+ module_streams = [
7
+ {
8
+ "name" => module_stream[:name],
9
+ "stream" => module_stream[:stream],
10
+ "version" => "20180730223407",
11
+ "context" => "deadbeef",
12
+ "arch" => "noarch",
13
+ "id" => 4,
14
+ "packages" => packs
15
+ }
16
+ ]
17
+ else
18
+ module_streams = []
19
+ end
20
+ {
21
+ "id" => 6,
22
+ "pulp_id" => "a4999071-2e2a-4293-9a72-219924032633",
23
+ "title" => "Duck_Kangaroo_Erratum",
24
+ "errata_id" => "RHEA-2012:0059",
25
+ "issued" => "2018-01-27",
26
+ "updated" => "2018-07-20",
27
+ "severity" => "",
28
+ "description" => "Duck_Kangaro_Erratum description",
29
+ "solution" => "",
30
+ "summary" => "",
31
+ "reboot_suggested" => false,
32
+ "uuid" => "a4999071-2e2a-4293-9a72-219924032633",
33
+ "name" => "Duck_Kangaroo_Erratum",
34
+ "type" => "enhancement",
35
+ "cves" => [],
36
+ "bugs" => [],
37
+ "hosts_available_count" => 0,
38
+ "hosts_applicable_count" => 0,
39
+ "packages" => packages,
40
+ "module_streams" => module_streams
41
+ }
42
+ end
43
+
44
+ def packages
45
+ ["kangaroo-0.3-1.noarch", "bar"]
46
+ end
47
+
48
+ def module_stream
49
+ {name: "MyMOdule", stream: "cool-100"}
50
+ end
51
+
52
+ def erratum_id
53
+ "1"
54
+ end
55
+
56
+ def host_id
57
+ 1
58
+ end
59
+
60
+ def verify_module_packages_and_orphan_packages(result)
61
+ result_out = result.out
62
+ # output looks like
63
+ # => "Title: Duck_Kangaroo_Erratum\n
64
+ # Description: Duck_Kangaro_Erratum description\n
65
+ # ID: 6
66
+ # \nErrata ID: RHEA-2012:0059\nReboot Suggested: false\n
67
+ # Updated: 2018-07-20\nIssued: 2018-01-27\nSolution:
68
+ # \nPackages: kangaroo-0.3-1.noarch
69
+ #\nModule Streams: \n 1) Name: kangaroo\n Stream: 0
70
+ # \n Packages: kangaroo-0.3-1.noarch\n\n
71
+ module_streams_out = result_out.slice(result_out.index("Module Streams")..-1)
72
+ package_out = result_out.slice(0..result_out.index("Module Streams"))
73
+
74
+ assert_includes(module_streams_out, "Name")
75
+ assert_includes(module_streams_out, module_stream[:name])
76
+ assert_includes(module_streams_out, "Stream")
77
+ assert_includes(module_streams_out, module_stream[:stream])
78
+ assert_includes(module_streams_out, packages.first)
79
+ assert_includes(module_streams_out, packages.last)
80
+
81
+ assert_includes(package_out, packages.first)
82
+ assert_includes(package_out, packages.last)
83
+ end
84
+
85
+ def verify_no_modules_packages_with_orphan_packages(result)
86
+ result_out = result.out
87
+ refute_includes(result_out, "Module Streams")
88
+ assert_includes(result_out, packages.first)
89
+ assert_includes(result_out, packages.last)
90
+ end
91
+ end
@@ -0,0 +1,29 @@
1
+ require_relative '../test_helper'
2
+ require_relative 'erratum_helpers'
3
+
4
+ describe 'Erratum Info' do
5
+ include ErratumHelpers
6
+
7
+ before do
8
+ @cmd = %w(erratum info)
9
+ end
10
+
11
+ it "prints module package info on run" do
12
+ api_expects(:errata, :show)
13
+ .with_params('id' => erratum_id)
14
+ .returns(make_erratum_response)
15
+ params = ["--id=#{erratum_id}"]
16
+ result = run_cmd(@cmd + params)
17
+ verify_module_packages_and_orphan_packages(result)
18
+ end
19
+
20
+ it "prints package info on run" do
21
+ api_expects(:errata, :show)
22
+ .with_params('id' => erratum_id)
23
+ .returns(make_erratum_response(true, false))
24
+
25
+ params = ["--id=#{erratum_id}"]
26
+ result = run_cmd(@cmd + params)
27
+ verify_no_modules_packages_with_orphan_packages(result)
28
+ end
29
+ end