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,85 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require 'hammer_cli_katello/content_import'
3
+
4
+ describe 'content-import version' do
5
+ include ForemanTaskHelpers
6
+
7
+ before do
8
+ @cmd = %w(content-import version)
9
+ end
10
+
11
+ let(:task_id) { '5' }
12
+
13
+ let(:response) do
14
+ {
15
+ 'id' => task_id,
16
+ 'state' => 'planned'
17
+ }
18
+ end
19
+
20
+ let(:path) do
21
+ File.dirname(__FILE__)
22
+ end
23
+
24
+ let(:metadata) do
25
+ JSON.parse(File.read("#{path}/metadata.json"))
26
+ end
27
+
28
+ let(:organization_id) { 3 }
29
+
30
+ it "performs import with required options and async" do
31
+ params = [
32
+ "--organization-id=#{organization_id}",
33
+ "--path=#{path}",
34
+ '--async'
35
+ ]
36
+ api_expects(:content_imports, :version)
37
+ .with_params('organization_id' => organization_id, 'path' => path, 'metadata' => metadata)
38
+ .returns(response)
39
+
40
+ result = run_cmd(@cmd + params)
41
+
42
+ assert_equal("Archive is being imported in task #{task_id}.\n", result.out)
43
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
44
+ end
45
+
46
+ it "performs import with required options" do
47
+ params = [
48
+ "--organization-id=#{organization_id}",
49
+ "--path=#{path}"
50
+ ]
51
+
52
+ api_expects(:content_imports, :version)
53
+ .with_params('organization_id' => organization_id, 'path' => path, 'metadata' => metadata)
54
+ .returns(response)
55
+
56
+ expect_foreman_task(task_id)
57
+
58
+ result = run_cmd(@cmd + params)
59
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
60
+ end
61
+
62
+ it 'fails on missing required params' do
63
+ params = [
64
+ '--id=2'
65
+ ]
66
+
67
+ result = run_cmd(@cmd + params)
68
+ expected_error = "Could not import the archive."
69
+
70
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
71
+ assert_equal(result.err[/#{expected_error}/], expected_error)
72
+ end
73
+
74
+ it 'fails on missing metadata.json' do
75
+ bad_path = "/nosuchdir"
76
+ params = [
77
+ "--organization-id=#{organization_id}",
78
+ "--path=#{bad_path}"
79
+ ]
80
+ result = run_cmd(@cmd + params)
81
+ expected_error = "Unable to find '#{bad_path}/metadata.json'."
82
+
83
+ assert_match(/#{expected_error}/, result.err)
84
+ end
85
+ end
@@ -0,0 +1,29 @@
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 'hammer_cli_katello/content_units'
7
+
8
+ module HammerCLIKatello
9
+ describe ContentUnitsCommand::InfoCommand do
10
+ include ContentViewHelpers
11
+ include RepositoryHelpers
12
+ include ProductHelpers
13
+ include OrganizationHelpers
14
+
15
+ it 'allows minimal options' do
16
+ api_expects(:generic_content_units, :show)
17
+ .with_params('content_type' => 'python_package', 'id' => '1492')
18
+
19
+ run_cmd(%w(content-units info --content-type python_package --id 1492))
20
+ end
21
+
22
+ it 'requires content_type param' do
23
+ api_expects_no_call
24
+
25
+ r = run_cmd(%w(content-units info --id 1492))
26
+ assert(r.err.include?("Missing arguments for '--content-type'"), "Invalid error message")
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,106 @@
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 'hammer_cli_katello/content_units'
7
+
8
+ module HammerCLIKatello
9
+ describe ContentUnitsCommand::ListCommand do
10
+ include ContentViewHelpers
11
+ include RepositoryHelpers
12
+ include ProductHelpers
13
+ include OrganizationHelpers
14
+
15
+ it 'allows minimal options' do
16
+ api_expects(:generic_content_units, :index)
17
+ .with_params('content_type' => 'python_package')
18
+
19
+ run_cmd(%w(content-units list --content-type python_package))
20
+ end
21
+
22
+ it 'requires content_type param' do
23
+ api_expects_no_call
24
+
25
+ r = run_cmd(%w(content-units list))
26
+ assert(r.err.include?("Missing arguments for '--content-type'"), "Invalid error message")
27
+ end
28
+
29
+ describe 'repository options' do
30
+ it 'may be specified by ID' do
31
+ api_expects(:generic_content_units, :index)
32
+ .with_params('content_type' => 'python_package', 'repository_id' => 1)
33
+
34
+ run_cmd(%w(content-units list --content-type python_package --repository-id 1))
35
+ end
36
+
37
+ it 'require product ID when given repository name' do
38
+ api_expects_no_call
39
+
40
+ r = run_cmd(%w(content-units list --content-type python_package --repository repo1))
41
+ assert(r.err.include?("--product, --product-id is required"), "Invalid error message")
42
+ end
43
+
44
+ # rubocop:disable LineLength
45
+ it 'may be specified by name and product ID' do
46
+ expect_repository_search(2, 'repo1', 1)
47
+
48
+ api_expects(:generic_content_units, :index)
49
+ .with_params('content_type' => 'python_package', 'repository_id' => 1)
50
+ run_cmd(%w(content-units list --content-type python_package --repository repo1 --product-id 2))
51
+ end
52
+ # rubocop:enable LineLength
53
+ end
54
+
55
+ describe 'organization options' do
56
+ it 'may be specified by ID' do
57
+ api_expects(:generic_content_units, :index)
58
+ .with_params('organization_id' => 1, 'content_type' => 'python_package')
59
+
60
+ run_cmd(%w(content-units list --organization-id 1 --content-type python_package))
61
+ end
62
+
63
+ it 'may be specified by name' do
64
+ expect_organization_search('org3', 1)
65
+ api_expects(:generic_content_units, :index)
66
+ .with_params('organization_id' => 1, 'content_type' => 'python_package')
67
+
68
+ run_cmd(%w(content-units list --organization org3 --content-type python_package))
69
+ end
70
+
71
+ it 'may be specified by label' do
72
+ expect_organization_search('org3', 1, field: 'label')
73
+ api_expects(:generic_content_units, :index)
74
+ .with_params('organization_id' => 1, 'content_type' => 'python_package')
75
+
76
+ run_cmd(%w(content-units list --organization-label org3 --content-type python_package))
77
+ end
78
+ end
79
+
80
+ describe 'content-view options' do
81
+ # rubocop:disable LineLength
82
+ it 'may be specified by ID' do
83
+ api_expects(:content_view_versions, :index)
84
+ .with_params('content_view_id' => 1, 'version' => '2.1')
85
+ .returns(index_response([{'id' => 5}]))
86
+ api_expects(:generic_content_units, :index)
87
+ .with_params('content_view_version_id' => 5, 'content_type' => 'python_package')
88
+
89
+ run_cmd(
90
+ %w(
91
+ content-units list --content-view-id 1 --content-view-version 2.1 --content-type python_package
92
+ )
93
+ )
94
+ end
95
+
96
+ it 'requires organization ID when given content view name' do
97
+ api_expects_no_call
98
+
99
+ r = run_cmd(%w(content-units list --content-view cv1 --content-view-version 2.1 --content-type python_package))
100
+ expected_error = "--organization-id, --organization, --organization-label is required"
101
+ assert(r.err.include?(expected_error), "Invalid error message")
102
+ end
103
+ # rubocop:enable LineLength
104
+ end
105
+ end
106
+ end
@@ -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::AddContentViewVersionCommand 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])
16
+ api_expects(:content_views, :update) do |p|
17
+ p['id'] == '1' && p['component_ids'] == %w(1 3 6)
18
+ end
19
+ run_cmd(%w(content-view add-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])
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 6)
34
+ end
35
+ run_cmd(%w(content-view add-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 add-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])
52
+ api_expects(:content_views, :update) do |p|
53
+ p['id'] == 2 && p['component_ids'] == %w(1 2 3)
54
+ end
55
+ run_cmd(%w(content-view add-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])
66
+ api_expects(:content_views, :update) do |p|
67
+ p['id'] == 2 && p['component_ids'] == %w(1 2 3)
68
+ end
69
+ run_cmd(%w(content-view add-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])
80
+ api_expects(:content_views, :update) do |p|
81
+ p['id'] == 2 && p['component_ids'] == %w(1 2 3)
82
+ end
83
+ run_cmd(%w(content-view add-version --name cv2 --organization-label org1
84
+ --content-view-version-id 3))
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,21 @@
1
+ require_relative '../test_helper'
2
+ require 'hammer_cli_katello/content_view'
3
+
4
+ module HammerCLIKatello
5
+ describe ContentView do
6
+ describe 'AddRepositoryCommand' do
7
+ it 'allows adding a repository by ID' do
8
+ ex = api_expects(:organizations, :index) do |p|
9
+ p[:search] == "name = \"org1\""
10
+ end
11
+ ex.returns(index_response([{'id' => 1}]))
12
+
13
+ api_expects(:content_views, :index) do |p|
14
+ p['name'] == 'cv' && p['organization_id'] == 1
15
+ end
16
+
17
+ run_cmd(%w(content-view add-repository --organization org1 --name cv --repository-id 1))
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,177 @@
1
+ require_relative '../../test_helper'
2
+ require 'hammer_cli_katello/content_view_component'
3
+ # rubocop:disable Metrics/ModuleLength
4
+ module HammerCLIKatello
5
+ describe ContentViewComponent::AddComponents do
6
+ before do
7
+ @cmd = %w(content-view component add)
8
+ @composite = OpenStruct.new(:id => 2, :name => "composite")
9
+ @component_version = OpenStruct.new(:id => 666, :version => "1.0")
10
+ @component = OpenStruct.new(:id => 6, :name => "component",
11
+ :content_view_version => @component_version)
12
+ @organization = OpenStruct.new(:id => 1, :name => "great", :label => "label")
13
+ end
14
+
15
+ def setup_org_expectations
16
+ org_expect = api_expects(:organizations, :index) do |par|
17
+ par[:search] == "name = \"#{@organization.name}\""
18
+ end
19
+ org_expect.at_least_once.returns(index_response([{'id' => @organization.id.to_s}]))
20
+ end
21
+
22
+ def setup_content_view_expectations(content_view)
23
+ cv_expect = api_expects(:content_views, :index) do |p|
24
+ p['name'] == content_view.name && p["organization_id"].to_s == @organization.id.to_s
25
+ end
26
+ cv_expect.at_least_once.returns(index_response([{'id' => content_view.id}]))
27
+ end
28
+
29
+ describe 'allows adding a component with' do
30
+ it 'component-content-view-id and latest=true' do
31
+ latest = true
32
+ params = ["--composite-content-view-id=#{@composite.id}",
33
+ "--component-content-view-id=#{@component.id}",
34
+ "--latest"]
35
+
36
+ api_expects(:content_view_components, :add_components) do |p|
37
+ component = p['components'].first
38
+ p['composite_content_view_id'] == @composite.id &&
39
+ component[:latest] == latest &&
40
+ component[:content_view_id] == @component.id.to_s
41
+ end
42
+ run_cmd(@cmd + params)
43
+ end
44
+
45
+ it 'component-content-view-version-id and latest=false' do
46
+ latest = false
47
+ params = ["--composite-content-view-id=#{@composite.id}",
48
+ "--component-content-view-version-id=#{@component_version.id}"]
49
+
50
+ api_expects(:content_view_components, :add_components) do |p|
51
+ component = p['components'].first
52
+ p['composite_content_view_id'] == @composite.id &&
53
+ component[:latest] == latest &&
54
+ component[:content_view_version_id] == @component_version.id.to_s
55
+ end
56
+ run_cmd(@cmd + params)
57
+ end
58
+ end
59
+
60
+ describe 'allows adding a component with composite name and org' do
61
+ before do
62
+ setup_org_expectations
63
+ setup_content_view_expectations(@composite)
64
+ end
65
+
66
+ it 'component-content-view-id and latest=true' do
67
+ latest = true
68
+ params = ["--composite-content-view=#{@composite.name}",
69
+ "--component-content-view-id=#{@component.id}",
70
+ "--organization=#{@organization.name}",
71
+ "--latest"]
72
+
73
+ api_expects(:content_view_components, :add_components) do |p|
74
+ component = p['components'].first
75
+ p['composite_content_view_id'] == @composite.id &&
76
+ component[:latest] == latest &&
77
+ component[:content_view_id] == @component.id.to_s
78
+ end
79
+ run_cmd(@cmd + params)
80
+ end
81
+
82
+ it 'component-content-view-version-id and latest=false' do
83
+ latest = false
84
+ params = ["--composite-content-view=#{@composite.name}",
85
+ "--organization=#{@organization.name}",
86
+ "--component-content-view-version-id=#{@component_version.id}"]
87
+
88
+ api_expects(:content_view_components, :add_components) do |p|
89
+ component = p['components'].first
90
+ p['composite_content_view_id'] == @composite.id &&
91
+ component[:latest] == latest &&
92
+ component[:content_view_version_id] == @component_version.id.to_s
93
+ end
94
+ run_cmd(@cmd + params)
95
+ end
96
+ end
97
+
98
+ describe 'allows adding a component with component name and org' do
99
+ it 'component-content-view and latest=true' do
100
+ latest = true
101
+ params = ["--composite-content-view-id=#{@composite.id}",
102
+ "--component-content-view=#{@component.name}",
103
+ "--organization=#{@organization.name}",
104
+ "--latest"]
105
+ setup_org_expectations
106
+ setup_content_view_expectations(@component)
107
+ api_expects(:content_view_components, :add_components) do |p|
108
+ component = p['components'].first
109
+ p['composite_content_view_id'] == @composite.id &&
110
+ component[:latest] == latest &&
111
+ component[:content_view_id] == @component.id
112
+ end
113
+ run_cmd(@cmd + params)
114
+ end
115
+ end
116
+
117
+ describe 'allows adding a component with component version number org component content_view' do
118
+ before do
119
+ cvv_expect = api_expects(:content_view_versions, :index) do |p|
120
+ p['content_view_id'].to_s == @component.id.to_s &&
121
+ p["version"] == @component.content_view_version.version
122
+ end
123
+ cvv_expect.at_least_once.
124
+ returns(index_response([{'id' => @component.content_view_version.id}]))
125
+ end
126
+
127
+ it 'component-content-view-id and component version number' do
128
+ latest = false
129
+ params = ["--composite-content-view-id=#{@composite.id}",
130
+ "--component-content-view-id=#{@component.id}",
131
+ "--component-content-view-version=#{@component.content_view_version.version}"]
132
+
133
+ # 1) Should fetch the component_content_view_version_id
134
+ # using cv specified in --component-content-view-id and version specified in
135
+ # --component-content-view-version
136
+ # 2) Should set the component[:content_view_id] && component[:content_view_version_id]
137
+ # correctly
138
+
139
+ api_expects(:content_view_components, :add_components) do |p|
140
+ component = p['components'].first
141
+ p['composite_content_view_id'] == @composite.id &&
142
+ component[:latest] == latest &&
143
+ component[:content_view_id] == @component.id.to_s &&
144
+ component[:content_view_version_id] == @component.content_view_version.id
145
+ end
146
+ run_cmd(@cmd + params)
147
+ end
148
+
149
+ it 'component-content-view and component version number' do
150
+ latest = false
151
+ params = ["--composite-content-view=#{@composite.name}",
152
+ "--component-content-view=#{@component.name}",
153
+ "--component-content-view-version=#{@component.content_view_version.version}",
154
+ "--organization=#{@organization.name}"]
155
+ # 1) Should fetch the org using org name specified in --organization
156
+ # 2) Should fetch composite content view using name in --composite-content-view
157
+ # 3) Should fetch component content view using name in --component-content-view
158
+ # 4) Should fetch the component_content_view_version_id
159
+ # using cv specified in --component-content-view-id and version specified in
160
+ # --component-content-view-version
161
+ # 5) Should set the component[:content_view_id] && component[:content_view_version_id]
162
+ # correctly
163
+ setup_org_expectations
164
+ setup_content_view_expectations(@component)
165
+ setup_content_view_expectations(@composite)
166
+ api_expects(:content_view_components, :add_components) do |p|
167
+ component = p['components'].first
168
+ p['composite_content_view_id'] == @composite.id &&
169
+ component[:latest] == latest &&
170
+ component[:content_view_id] == @component.id &&
171
+ component[:content_view_version_id] == @component.content_view_version.id
172
+ end
173
+ run_cmd(@cmd + params)
174
+ end
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,55 @@
1
+ require_relative '../../test_helper'
2
+ require 'hammer_cli_katello/content_view_component'
3
+ module HammerCLIKatello
4
+ describe ContentViewComponent::ListCommand do
5
+ before do
6
+ @cmd = %w(content-view component list)
7
+ end
8
+
9
+ it 'expects composite_content_view_id as minimal options' do
10
+ api_expects(:content_view_components, :index, "component list") do |p|
11
+ p["composite_content_view_id"].to_s == "1"
12
+ end
13
+ run_cmd(@cmd + ["--composite-content-view-id=1"])
14
+ end
15
+
16
+ it 'expects composite_content_view and organization_id as other options' do
17
+ api_expects(:content_views, :index) do |p|
18
+ p['name'] == "lol" && p["organization_id"].to_s == "1"
19
+ end
20
+ run_cmd(@cmd + %w(--composite-content-view=lol --organization-id=1))
21
+ end
22
+
23
+ it 'label' do
24
+ api_expects(:organizations, :index) { |par| par[:search] == "label = \"org1\"" }
25
+ .at_least_once.returns(index_response([{'id' => 1}]))
26
+
27
+ api_expects(:content_view_components, :index) do |p|
28
+ p["composite_content_view_id"].to_s == "1"
29
+ end
30
+
31
+ api_expects(:content_views, :index).
32
+ at_least_once.returns(index_response([{'id' => 1}])) do |p|
33
+ p['name'] == "lol" && p["organization_id"].to_s == "1"
34
+ end
35
+
36
+ run_cmd(@cmd + %w(--composite-content-view=lol --organization-label=org1))
37
+ end
38
+
39
+ it 'name' do
40
+ api_expects(:organizations, :index) { |par| par[:search] == "name = \"org1\"" }
41
+ .at_least_once.returns(index_response([{'id' => 1}]))
42
+
43
+ api_expects(:content_view_components, :index) do |p|
44
+ p["composite_content_view_id"].to_s == "1"
45
+ end
46
+
47
+ api_expects(:content_views, :index).
48
+ at_least_once.returns(index_response([{'id' => 1}])) do |p|
49
+ p['name'] == "lol" && p["organization_id"].to_s == "1"
50
+ end
51
+
52
+ run_cmd(@cmd + %w(--composite-content-view=lol --organization=org1))
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,107 @@
1
+ require_relative '../../test_helper'
2
+ require 'hammer_cli_katello/content_view_component'
3
+ module HammerCLIKatello
4
+ describe ContentViewComponent::RemoveComponents do
5
+ before do
6
+ @cmd = %w(content-view component remove)
7
+
8
+ @component = OpenStruct.new(:id => 6, :name => "component")
9
+ @component2 = OpenStruct.new(:id => 7, :name => "component2")
10
+
11
+ @content_view_component = OpenStruct.new(:id => 1444,
12
+ :content_view => @component)
13
+
14
+ @content_view_component2 = OpenStruct.new(:id => 1445,
15
+ :content_view => @component2)
16
+
17
+ @composite = OpenStruct.new(:id => 2, :name => "composite",
18
+ :content_view_components => [@content_view_component])
19
+ @organization = OpenStruct.new(:id => 1, :name => "great", :label => "label")
20
+ @content_view_components = [@content_view_component, @content_view_component2]
21
+ end
22
+
23
+ def setup_org_expectations
24
+ org_expect = api_expects(:organizations, :index) do |par|
25
+ par[:search] == "name = \"#{@organization.name}\""
26
+ end
27
+ org_expect.at_least_once.returns(index_response([{'id' => @organization.id.to_s}]))
28
+ end
29
+
30
+ def setup_content_view_expectations(content_view)
31
+ cv_expect = api_expects(:content_views, :index) do |p|
32
+ p['name'] == content_view.name && p["organization_id"].to_s == @organization.id.to_s
33
+ end
34
+ cv_expect.at_least_once.returns(index_response([{"id" => content_view.id}]))
35
+ end
36
+
37
+ def setup_content_view_components_expectations
38
+ cvc_expect = api_expects(:content_view_components, :index) do |p|
39
+ p[:composite_content_view_id].to_s == @composite.id.to_s
40
+ end
41
+ ret = @content_view_components.map do |cvc|
42
+ { "id" => cvc.id,
43
+ "content_view" => {"id" => cvc.content_view.id,
44
+ "name" => cvc.content_view.name}}
45
+ end
46
+ cvc_expect.at_least_once.returns(index_response(ret))
47
+ end
48
+
49
+ describe 'allows deleting component with' do
50
+ it 'id and component-ids' do
51
+ params = ["--composite-content-view-id=#{@composite.id}",
52
+ "--component-ids=#{@content_view_components.map(&:id).join(',')}"]
53
+
54
+ api_expects(:content_view_components, :remove_components) do |p|
55
+ component_ids = p['component_ids'].map(&:to_s)
56
+ p['composite_content_view_id'].to_s == @composite.id.to_s &&
57
+ component_ids.include?(@content_view_component.id.to_s) &&
58
+ component_ids.include?(@content_view_component2.id.to_s)
59
+ end
60
+ run_cmd(@cmd + params)
61
+ end
62
+
63
+ it 'id and component-content-view-id' do
64
+ component_cv_ids = @content_view_components.map do |cvc|
65
+ cvc["content_view"]["id"]
66
+ end
67
+
68
+ params = ["--composite-content-view-id=#{@composite.id}",
69
+ "--component-content-view-ids=#{component_cv_ids.join(',')}"]
70
+ setup_content_view_components_expectations
71
+
72
+ api_expects(:content_view_components, :remove_components) do |p|
73
+ component_ids = p['component_ids'].map(&:to_s)
74
+ p['composite_content_view_id'].to_s == @composite.id.to_s &&
75
+ component_ids.include?(@content_view_component.id.to_s) &&
76
+ component_ids.include?(@content_view_component2.id.to_s)
77
+ end
78
+ run_cmd(@cmd + params)
79
+ end
80
+
81
+ it 'orgs and component-content-view-names' do
82
+ component_cv_names = @content_view_components.map do |cvc|
83
+ cvc["content_view"]["name"]
84
+ end
85
+
86
+ params = ["--composite-content-view=#{@composite.name}",
87
+ "--component-content-views=#{component_cv_names.join(',')}",
88
+ "--organization=#{@organization.name}"]
89
+ # 1) Should fetch the org using org name specified in --organization
90
+ # 2) Should fetch composite content view using name in --composite-content-view
91
+ # 3) Should fetch component content view using name in --component-content-view
92
+
93
+ setup_org_expectations
94
+ setup_content_view_expectations(@composite)
95
+ setup_content_view_components_expectations
96
+
97
+ api_expects(:content_view_components, :remove_components) do |p|
98
+ component_ids = p['component_ids'].map(&:to_s)
99
+ p['composite_content_view_id'].to_s == @composite.id.to_s &&
100
+ component_ids.include?(@content_view_component.id.to_s) &&
101
+ component_ids.include?(@content_view_component2.id.to_s)
102
+ end
103
+ run_cmd(@cmd + params)
104
+ end
105
+ end
106
+ end
107
+ end