hammer_cli_katello 1.5.0 → 1.6.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 (222) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hammer_cli_katello/acs.rb +82 -0
  3. data/lib/hammer_cli_katello/activation_key.rb +8 -2
  4. data/lib/hammer_cli_katello/content_export.rb +39 -0
  5. data/lib/hammer_cli_katello/content_export_helper.rb +64 -6
  6. data/lib/hammer_cli_katello/host_subscription.rb +32 -0
  7. data/lib/hammer_cli_katello/organization.rb +4 -0
  8. data/lib/hammer_cli_katello/repository.rb +1 -1
  9. data/lib/hammer_cli_katello/simple_content_access.rb +10 -0
  10. data/lib/hammer_cli_katello/version.rb +1 -1
  11. data/lib/hammer_cli_katello.rb +5 -0
  12. data/test/data/2.5/foreman_api.json +1 -0
  13. data/test/data/3.0/foreman_api.json +1 -0
  14. data/test/data/3.10/foreman_api.json +1 -0
  15. data/test/data/3.11/foreman_api.json +1 -0
  16. data/test/data/3.12/foreman_api.json +1 -0
  17. data/test/data/3.13/foreman_api.json +1 -0
  18. data/test/data/3.14/foreman_api.json +1 -0
  19. data/test/data/3.15/foreman_api.json +1 -0
  20. data/test/data/3.16/foreman_api.json +1 -0
  21. data/test/data/3.17/foreman_api.json +1 -0
  22. data/test/data/3.18/foreman_api.json +1 -0
  23. data/test/data/3.19/foreman_api.json +1 -0
  24. data/test/data/3.2/foreman_api.json +1 -0
  25. data/test/data/3.4/foreman_api.json +1 -0
  26. data/test/data/3.5/foreman_api.json +1 -0
  27. data/test/data/3.6/foreman_api.json +1 -0
  28. data/test/data/3.7/foreman_api.json +1 -0
  29. data/test/data/3.8/foreman_api.json +1 -0
  30. data/test/data/3.9/foreman_api.json +1 -0
  31. data/test/data/4.0/foreman_api.json +1 -0
  32. data/test/data/4.1/foreman_api.json +1 -0
  33. data/test/data/4.3/foreman_api.json +1 -0
  34. data/test/data/4.4/foreman_api.json +1 -0
  35. data/test/data/4.5/foreman_api.json +1 -0
  36. data/test/data/4.6/foreman_api.json +1 -0
  37. data/test/data/Readme.md +5 -0
  38. data/test/functional/acs/create_test.rb +27 -0
  39. data/test/functional/acs/delete_test.rb +13 -0
  40. data/test/functional/acs/info_test.rb +94 -0
  41. data/test/functional/acs/list_test.rb +62 -0
  42. data/test/functional/acs/update_test.rb +23 -0
  43. data/test/functional/activation_key/add_host_collection_test.rb +62 -0
  44. data/test/functional/activation_key/content_override_test.rb +92 -0
  45. data/test/functional/activation_key/create_test.rb +33 -0
  46. data/test/functional/activation_key/data/activation_key.json +17 -0
  47. data/test/functional/activation_key/info_test.rb +29 -0
  48. data/test/functional/activation_key/list_test.rb +68 -0
  49. data/test/functional/activation_key/product_content_test.rb +23 -0
  50. data/test/functional/activation_key/remove_host_collection_test.rb +62 -0
  51. data/test/functional/activation_key/subscriptions_test.rb +74 -0
  52. data/test/functional/activation_key/update_test.rb +26 -0
  53. data/test/functional/apipie_helper_test.rb +31 -0
  54. data/test/functional/capsule/capsule_helpers.rb +13 -0
  55. data/test/functional/capsule/content/add_lifecycle_environment_test.rb +40 -0
  56. data/test/functional/capsule/content/cancel_synchronization_test.rb +42 -0
  57. data/test/functional/capsule/content/capsule_content_helpers.rb +24 -0
  58. data/test/functional/capsule/content/data/library_env.json +47 -0
  59. data/test/functional/capsule/content/data/sync_status.json +6 -0
  60. data/test/functional/capsule/content/data/sync_tasks.json +62 -0
  61. data/test/functional/capsule/content/info_test.rb +61 -0
  62. data/test/functional/capsule/content/lifecycle_environments_test.rb +19 -0
  63. data/test/functional/capsule/content/remove_lifecycle_environment_test.rb +40 -0
  64. data/test/functional/capsule/content/synchronization_status_test.rb +107 -0
  65. data/test/functional/capsule/info_test.rb +25 -0
  66. data/test/functional/capsule/list_test.rb +24 -0
  67. data/test/functional/content_credentials/create_test.rb +32 -0
  68. data/test/functional/content_credentials/data/test_cert.json +43 -0
  69. data/test/functional/content_credentials/info_test.rb +50 -0
  70. data/test/functional/content_credentials/list_test.rb +66 -0
  71. data/test/functional/content_export/complete/library_test.rb +155 -0
  72. data/test/functional/content_export/complete/repository_test.rb +226 -0
  73. data/test/functional/content_export/complete/version_test.rb +297 -0
  74. data/test/functional/content_export/content_export_helpers.rb +33 -0
  75. data/test/functional/content_export/generate_listing_test.rb +62 -0
  76. data/test/functional/content_export/generate_metadata_test.rb +64 -0
  77. data/test/functional/content_export/incremental/library_test.rb +172 -0
  78. data/test/functional/content_export/incremental/repository_test.rb +212 -0
  79. data/test/functional/content_export/incremental/version_test.rb +268 -0
  80. data/test/functional/content_export/list_test.rb +64 -0
  81. data/test/functional/content_import/library_test.rb +85 -0
  82. data/test/functional/content_import/list_test.rb +65 -0
  83. data/test/functional/content_import/metadata.json +1 -0
  84. data/test/functional/content_import/version_test.rb +85 -0
  85. data/test/functional/content_units/info_test.rb +29 -0
  86. data/test/functional/content_units/list_test.rb +106 -0
  87. data/test/functional/content_view/add_content_view_version_test.rb +88 -0
  88. data/test/functional/content_view/add_repository_test.rb +21 -0
  89. data/test/functional/content_view/component/add_test.rb +177 -0
  90. data/test/functional/content_view/component/list_test.rb +55 -0
  91. data/test/functional/content_view/component/remove_test.rb +107 -0
  92. data/test/functional/content_view/component/update_test.rb +134 -0
  93. data/test/functional/content_view/content_view_helpers.rb +20 -0
  94. data/test/functional/content_view/copy_test.rb +53 -0
  95. data/test/functional/content_view/create_test.rb +34 -0
  96. data/test/functional/content_view/delete_test.rb +62 -0
  97. data/test/functional/content_view/filter/create_test.rb +57 -0
  98. data/test/functional/content_view/filter/delete_test.rb +90 -0
  99. data/test/functional/content_view/filter/info_test.rb +89 -0
  100. data/test/functional/content_view/filter/list_test.rb +98 -0
  101. data/test/functional/content_view/filter/update_test.rb +91 -0
  102. data/test/functional/content_view/list_test.rb +68 -0
  103. data/test/functional/content_view/publish_test.rb +24 -0
  104. data/test/functional/content_view/purge_test.rb +97 -0
  105. data/test/functional/content_view/remove_content_view_version_test.rb +88 -0
  106. data/test/functional/content_view/remove_test.rb +79 -0
  107. data/test/functional/content_view/update_test.rb +53 -0
  108. data/test/functional/content_view/version/incremental_update_test.rb +108 -0
  109. data/test/functional/content_view/version/list_test.rb +44 -0
  110. data/test/functional/content_view/version/promote_test.rb +75 -0
  111. data/test/functional/content_view/version/republish_repositories_test.rb +34 -0
  112. data/test/functional/content_view/version/update_test.rb +48 -0
  113. data/test/functional/erratum/erratum_helpers.rb +91 -0
  114. data/test/functional/erratum/info_test.rb +29 -0
  115. data/test/functional/erratum/list_test.rb +108 -0
  116. data/test/functional/file/file_helpers.rb +13 -0
  117. data/test/functional/file/info_test.rb +162 -0
  118. data/test/functional/file/list_test.rb +112 -0
  119. data/test/functional/filter_rule/create_test.rb +99 -0
  120. data/test/functional/filter_rule/delete_test.rb +104 -0
  121. data/test/functional/filter_rule/filter_rule_helpers.rb +12 -0
  122. data/test/functional/filter_rule/info_test.rb +104 -0
  123. data/test/functional/filter_rule/list_test.rb +91 -0
  124. data/test/functional/filter_rule/update_test.rb +104 -0
  125. data/test/functional/host/errata/apply_test.rb +45 -0
  126. data/test/functional/host/errata/info_test.rb +27 -0
  127. data/test/functional/host/errata/list_test.rb +49 -0
  128. data/test/functional/host/errata/recalculate_test.rb +26 -0
  129. data/test/functional/host/extensions/create_test.rb +95 -0
  130. data/test/functional/host/extensions/data/host.json +320 -0
  131. data/test/functional/host/extensions/data/host_list.json +117 -0
  132. data/test/functional/host/extensions/info_test.rb +35 -0
  133. data/test/functional/host/extensions/list_test.rb +21 -0
  134. data/test/functional/host/extensions/update_test.rb +70 -0
  135. data/test/functional/host/host_helpers.rb +8 -0
  136. data/test/functional/host/subscription/attach_test.rb +54 -0
  137. data/test/functional/host/subscription/auto_attach_test.rb +35 -0
  138. data/test/functional/host/subscription/content_override_test.rb +96 -0
  139. data/test/functional/host/subscription/enabled_repositories_test.rb +39 -0
  140. data/test/functional/host/subscription/product_content_test.rb +27 -0
  141. data/test/functional/host/subscription/register_test.rb +53 -0
  142. data/test/functional/host/subscription/remove_test.rb +52 -0
  143. data/test/functional/host/subscription/unregister_test.rb +37 -0
  144. data/test/functional/host/traces/list_test.rb +37 -0
  145. data/test/functional/host/traces/resolve_test.rb +31 -0
  146. data/test/functional/host_collection/add_host_test.rb +90 -0
  147. data/test/functional/host_collection/content_api_expectations.rb +35 -0
  148. data/test/functional/host_collection/content_install_test.rb +62 -0
  149. data/test/functional/host_collection/content_remove_test.rb +37 -0
  150. data/test/functional/host_collection/content_update_test.rb +37 -0
  151. data/test/functional/host_collection/copy_test.rb +64 -0
  152. data/test/functional/host_collection/create_test.rb +54 -0
  153. data/test/functional/host_collection/delete_test.rb +57 -0
  154. data/test/functional/host_collection/hosts_test.rb +39 -0
  155. data/test/functional/host_collection/info_test.rb +57 -0
  156. data/test/functional/host_collection/list_test.rb +63 -0
  157. data/test/functional/host_collection/remove_host_test.rb +90 -0
  158. data/test/functional/host_collection/update_test.rb +57 -0
  159. data/test/functional/hostgroup/create_test.rb +112 -0
  160. data/test/functional/hostgroup/data/hostgroup.json +50 -0
  161. data/test/functional/hostgroup/info_test.rb +33 -0
  162. data/test/functional/hostgroup/update_test.rb +120 -0
  163. data/test/functional/lifecycle_environment/create_test.rb +14 -0
  164. data/test/functional/lifecycle_environment/lifecycle_environment_helpers.rb +18 -0
  165. data/test/functional/lifecycle_environment/list_test.rb +38 -0
  166. data/test/functional/lifecycle_environment/update_test.rb +14 -0
  167. data/test/functional/local_helper_test.rb +30 -0
  168. data/test/functional/module_stream/info_test.rb +58 -0
  169. data/test/functional/module_stream/list_test.rb +53 -0
  170. data/test/functional/organization/cdn_configuration_test.rb +45 -0
  171. data/test/functional/organization/delete_test.rb +26 -0
  172. data/test/functional/organization/info_test.rb +45 -0
  173. data/test/functional/organization/organization_helpers.rb +10 -0
  174. data/test/functional/package/list_test.rb +160 -0
  175. data/test/functional/package_group/list_test.rb +38 -0
  176. data/test/functional/ping_test.rb +61 -0
  177. data/test/functional/product/create_test.rb +54 -0
  178. data/test/functional/product/delete_test.rb +41 -0
  179. data/test/functional/product/info_test.rb +33 -0
  180. data/test/functional/product/list_test.rb +58 -0
  181. data/test/functional/product/product_helpers.rb +24 -0
  182. data/test/functional/product/remove_sync_plan_test.rb +35 -0
  183. data/test/functional/product/set_sync_plan_test.rb +49 -0
  184. data/test/functional/product/update_proxy.rb +48 -0
  185. data/test/functional/product/update_test.rb +46 -0
  186. data/test/functional/repository/create_test.rb +21 -0
  187. data/test/functional/repository/delete_test.rb +95 -0
  188. data/test/functional/repository/info_test.rb +156 -0
  189. data/test/functional/repository/list_test.rb +68 -0
  190. data/test/functional/repository/reclaim_space_test.rb +105 -0
  191. data/test/functional/repository/remove_content_test.rb +108 -0
  192. data/test/functional/repository/repository_helpers.rb +18 -0
  193. data/test/functional/repository/republish_test.rb +37 -0
  194. data/test/functional/repository/synchronize_test.rb +57 -0
  195. data/test/functional/repository/update_test.rb +150 -0
  196. data/test/functional/repository/upload_test.rb +368 -0
  197. data/test/functional/repository_set/available_repositories_test.rb +18 -0
  198. data/test/functional/repository_set/disable_test.rb +48 -0
  199. data/test/functional/repository_set/enable_test.rb +42 -0
  200. data/test/functional/repository_set/info_test.rb +17 -0
  201. data/test/functional/repository_set/list_test.rb +18 -0
  202. data/test/functional/repository_set/repository_set_helpers.rb +20 -0
  203. data/test/functional/search_helpers.rb +17 -0
  204. data/test/functional/simple_content_access/disable_test.rb +48 -0
  205. data/test/functional/simple_content_access/enable_test.rb +46 -0
  206. data/test/functional/simple_content_access/status_test.rb +29 -0
  207. data/test/functional/srpm/list_test.rb +92 -0
  208. data/test/functional/subscription/list_test.rb +86 -0
  209. data/test/functional/sync_plan/create_test.rb +60 -0
  210. data/test/functional/sync_plan/delete_test.rb +46 -0
  211. data/test/functional/sync_plan/info_test.rb +37 -0
  212. data/test/functional/sync_plan/list_test.rb +31 -0
  213. data/test/functional/sync_plan/sync_plan_helpers.rb +8 -0
  214. data/test/functional/sync_plan/update_test.rb +44 -0
  215. data/test/functional/test_helper.rb +24 -0
  216. data/test/task_helper.rb +7 -0
  217. data/test/test_helper.rb +38 -0
  218. data/test/unit/id_name_options_validator_test.rb +96 -0
  219. data/test/unit/id_resolver_test.rb +58 -0
  220. data/test/unit/messages_test.rb +7 -0
  221. data/test/unit/search_options_creators_test.rb +145 -0
  222. metadata +425 -4
@@ -0,0 +1,75 @@
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
+
34
+ it 'allows promoting a content view without version name/id' do
35
+ ex = api_expects(:organizations, :index) do |p|
36
+ p[:search] == "name = \"org1\""
37
+ end
38
+ ex.at_least_once.returns(index_response([{'id' => 1}]))
39
+
40
+ ex = api_expects(:content_views, :index) do |p|
41
+ p['name'] == 'cv' && p['organization_id'] == 1
42
+ end
43
+ ex.returns(index_response([{'id' => 3}]))
44
+
45
+ ex = api_expects(:content_view_versions, :index) do |p|
46
+ p['content_view_id'] == 3
47
+ end
48
+ ex.returns(
49
+ index_response(
50
+ [
51
+ {'id' => 6, 'name' => 'cv', 'environments' => [{'id' => 1}]},
52
+ {'id' => 7, 'name' => 'cv2', 'environments' => [{'id' => 9}]}
53
+ ]
54
+ )
55
+ )
56
+
57
+ ex = api_expects(:lifecycle_environments, :index) do |p|
58
+ p['organization_id'] == 1 && p['name'] == 'Library'
59
+ end
60
+ ex.returns(index_response([{'id' => 1}]))
61
+
62
+ ex = api_expects(:lifecycle_environments, :index) do |p|
63
+ p['organization_id'] == 1 && p['name'] == 'test'
64
+ end
65
+ ex.returns(index_response([{'id' => 9}]))
66
+
67
+ api_expects(:content_view_versions, :promote) do |p|
68
+ p['id'] == 6 && p['environment_ids'] == [9]
69
+ end
70
+
71
+ run_cmd(%w(content-view version promote --organization org1 --content-view cv
72
+ --to-lifecycle-environment test --from-lifecycle-environment Library --async))
73
+ end
74
+ end
75
+ 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 --force true))
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
@@ -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