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,54 @@
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__), '../sync_plan/sync_plan_helpers')
4
+ require File.join(File.dirname(__FILE__), '../product/product_helpers')
5
+
6
+ describe "create a product" do
7
+ include OrganizationHelpers
8
+ include SyncPlanHelpers
9
+ include ProductHelpers
10
+
11
+ it 'by organization ID and product name' do
12
+ api_expects(:products, :create, 'create a product') do |par|
13
+ par['organization_id'] == 1 && par['name'] = 'product1'
14
+ end
15
+
16
+ assert_equal(
17
+ 0,
18
+ run_cmd(%w(product create --organization-id 1 --name product1)).exit_code
19
+ )
20
+ end
21
+
22
+ it 'by organization name and product name' do
23
+ expect_organization_search('org1', 1)
24
+ api_expects(:products, :create, 'create a product') do |par|
25
+ par['organization_id'] == 1 && par['name'] = 'product1'
26
+ end
27
+ assert_equal(
28
+ 0,
29
+ run_cmd(%w(product create --organization org1 --name product1)).exit_code
30
+ )
31
+ end
32
+
33
+ it 'by organization name, product name, and sync plan' do
34
+ expect_organization_search('org1', 1)
35
+ expect_sync_plan_search(1, 'sync_plan1', 1)
36
+ api_expects(:products, :create, 'create a product with a sync plan') do |par|
37
+ par['organization_id'] == 1 &&
38
+ par['name'] == 'product1' &&
39
+ par['sync_plan_id'] == 1
40
+ end
41
+ command = %w(product create --organization org1 --name product1 --sync-plan sync_plan1)
42
+ assert_equal(
43
+ 0,
44
+ run_cmd(command).exit_code
45
+ )
46
+ end
47
+
48
+ it 'fails if no organization is given' do
49
+ refute_equal(
50
+ 0,
51
+ run_cmd(%w(product create --name product1)).exit_code
52
+ )
53
+ end
54
+ end
@@ -0,0 +1,41 @@
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__), '../product/product_helpers')
4
+
5
+ describe 'delete a product' do
6
+ include OrganizationHelpers
7
+ include ProductHelpers
8
+
9
+ it 'by ID' do
10
+ api_expects(:products, :destroy, 'delete a product') do |par|
11
+ par['id'] == 1
12
+ end
13
+ assert_equal(
14
+ 0,
15
+ run_cmd(%w(product delete --id 1)).exit_code
16
+ )
17
+ end
18
+
19
+ it 'by organization ID and product name' do
20
+ expect_product_search(1, 'product1', 1)
21
+ api_expects(:products, :destroy, 'delete a product') do |par|
22
+ par['id'] == 1
23
+ end
24
+ assert_equal(
25
+ 0,
26
+ run_cmd(%w(product delete --organization-id 1 --name product1)).exit_code
27
+ )
28
+ end
29
+
30
+ it 'by organization name and product name' do
31
+ expect_organization_search('org1', 1)
32
+ expect_product_search(1, 'product1', 1)
33
+ api_expects(:products, :destroy, 'delete a product') do |par|
34
+ par['id'] == 1
35
+ end
36
+ assert_equal(
37
+ 0,
38
+ run_cmd(%w(product delete --organization org1 --name product1)).exit_code
39
+ )
40
+ end
41
+ end
@@ -0,0 +1,33 @@
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__), '../product/product_helpers')
4
+
5
+ describe "get product info" do
6
+ include OrganizationHelpers
7
+ include ProductHelpers
8
+
9
+ it 'by ID' do
10
+ expect_product_show(:id => 1)
11
+ assert_equal(
12
+ 0,
13
+ run_cmd(%w(product info --id 1)).exit_code
14
+ )
15
+ end
16
+
17
+ it 'by organization id and product name' do
18
+ expect_product_show(:name => 'product1', :org_id => 1, :id => 1)
19
+ assert_equal(
20
+ 0,
21
+ run_cmd(%w(product info --organization-id 1 --name product1)).exit_code
22
+ )
23
+ end
24
+
25
+ it 'by organization name and product name' do
26
+ expect_organization_search('org1', 1)
27
+ expect_product_show(:name => 'product1', :org_id => 1, :id => 1)
28
+ assert_equal(
29
+ 0,
30
+ run_cmd(%w(product info --organization org1 --name product1)).exit_code
31
+ )
32
+ end
33
+ end
@@ -0,0 +1,58 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+ require File.join(File.dirname(__FILE__), 'product_helpers')
3
+
4
+ describe "listing products" do
5
+ include ProductHelpers
6
+
7
+ let(:empty_response_table) do
8
+ <<eostring
9
+ ---|------|-------------|--------------|--------------|-----------
10
+ ID | NAME | DESCRIPTION | ORGANIZATION | REPOSITORIES | SYNC STATE
11
+ ---|------|-------------|--------------|--------------|-----------
12
+ eostring
13
+ end
14
+
15
+ it 'displays the table properly' do
16
+ api_expects(:products, :index, 'index products').returns(index_response([]))
17
+ assert_cmd(
18
+ success_result(empty_response_table),
19
+ run_cmd(%w(product list --organization-id 1))
20
+ )
21
+ end
22
+
23
+ it 'by organization ID' do
24
+ ex = api_expects(:products, :index, 'index products') do |par|
25
+ par['organization_id'] == 1
26
+ end
27
+ ex.returns(index_response([]))
28
+
29
+ assert_equal(
30
+ 0,
31
+ run_cmd(%w(product list --organization-id 1)).exit_code
32
+ )
33
+ end
34
+
35
+ it 'by organization ID and subscription ID' do
36
+ ex = api_expects(:products, :index, 'organization product list') do |par|
37
+ par['organization_id'] == 1 && par['subscription_id'] == 1
38
+ end
39
+ ex.returns(index_response([]))
40
+
41
+ assert_equal(
42
+ 0,
43
+ run_cmd(%w(product list --organization-id 1 --subscription-id 1)).exit_code
44
+ )
45
+ end
46
+
47
+ it 'by organization ID and sync plan ID' do
48
+ ex = api_expects(:products, :index, 'organization product list') do |par|
49
+ par['organization_id'] == 1 && par['sync_plan_id'] == 1
50
+ end
51
+ ex.returns(index_response([]))
52
+
53
+ assert_equal(
54
+ 0,
55
+ run_cmd(%w(product list --organization-id 1 --sync-plan-id 1)).exit_code
56
+ )
57
+ end
58
+ end
@@ -0,0 +1,24 @@
1
+ module ProductHelpers
2
+ def expect_generic_product_search(params = {}, returns = {})
3
+ api_expects(:products, :index, 'Find the Product')
4
+ .with_params(params).returns(index_response([returns]))
5
+ end
6
+
7
+ def expect_product_search(org_id, name, id)
8
+ expect_generic_product_search({'name' => name, 'organization_id' => org_id}, 'id' => id)
9
+ end
10
+
11
+ def expect_product_show(options = {})
12
+ raise "#{__method__} must be called with :id" unless (options.keys & [:id]).size == 1
13
+
14
+ if options[:name]
15
+ raise "#{__method__} used with :name also requires :org_id" unless options[:org_id]
16
+ expect_product_search(options[:org_id], options[:name], options[:id])
17
+ end
18
+
19
+ ex = api_expects(:products, :show, 'Show a Product') do |par|
20
+ par['id'] == options[:id]
21
+ end
22
+ ex.returns(index_response([{'id' => options[:id]}]))
23
+ end
24
+ end
@@ -0,0 +1,35 @@
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__), '../sync_plan/sync_plan_helpers')
4
+ require File.join(File.dirname(__FILE__), '../product/product_helpers')
5
+
6
+ describe "remove a product's sync plan" do
7
+ include OrganizationHelpers
8
+ include SyncPlanHelpers
9
+ include ProductHelpers
10
+
11
+ it "by product ID" do
12
+ api_expects(:products, :update, "set sync plan") do |params|
13
+ params['id'] == 1 && params['sync_plan_id'].nil?
14
+ end
15
+
16
+ assert_equal(
17
+ 0,
18
+ run_cmd(%w(product remove-sync-plan --id 1)).exit_code
19
+ )
20
+ end
21
+
22
+ it "by product name" do
23
+ expect_product_search(1, 'product1', 1)
24
+ api_expects(:products, :update, "set sync plan") do |params|
25
+ params['id'] == 1 && params['sync_plan_id'].nil?
26
+ end
27
+
28
+ assert_equal(
29
+ 0,
30
+ run_cmd(%w(product remove-sync-plan
31
+ --organization-id 1
32
+ --name product1)).exit_code
33
+ )
34
+ end
35
+ end
@@ -0,0 +1,49 @@
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__), '../sync_plan/sync_plan_helpers')
4
+ require File.join(File.dirname(__FILE__), '../product/product_helpers')
5
+
6
+ describe "set a product's sync plan" do
7
+ include OrganizationHelpers
8
+ include SyncPlanHelpers
9
+ include ProductHelpers
10
+
11
+ it "by product ID and sync-plan ID" do
12
+ api_expects(:products, :update, "set sync plan") do |params|
13
+ params['id'] == 1 && params['sync_plan_id'] == 1
14
+ end
15
+
16
+ assert_equal(
17
+ 0,
18
+ run_cmd(%w(product set-sync-plan --id 1 --sync-plan-id 1)).exit_code
19
+ )
20
+ end
21
+
22
+ it "by product ID and sync-plan name (requires org ID)" do
23
+ expect_sync_plan_search(1, 'syncplan1', 1)
24
+ api_expects(:products, :update, "set sync plan") do |params|
25
+ params['id'] == 1 && params['sync_plan_id'] == 1
26
+ end
27
+
28
+ assert_equal(
29
+ 0,
30
+ run_cmd(%w(product set-sync-plan --organization-id 1 --id 1 --sync-plan syncplan1)).exit_code
31
+ )
32
+ end
33
+
34
+ it "by product name and sync-plan name (both requiring org ID)" do
35
+ expect_product_search(1, 'product1', 1)
36
+ expect_sync_plan_search(1, 'syncplan1', 1)
37
+ api_expects(:products, :update, "set sync plan") do |params|
38
+ params['id'] == 1 && params['sync_plan_id'] == 1
39
+ end
40
+
41
+ assert_equal(
42
+ 0,
43
+ run_cmd(%w(product set-sync-plan
44
+ --organization-id 1
45
+ --name product1
46
+ --sync-plan syncplan1)).exit_code
47
+ )
48
+ end
49
+ end
@@ -0,0 +1,48 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+
3
+ describe 'update an http proxy on a product' do
4
+ include ForemanTaskHelpers
5
+
6
+ before do
7
+ @cmd = %w(product update-proxy)
8
+ end
9
+
10
+ let(:sync_response) do
11
+ {
12
+ 'id' => 1,
13
+ 'state' => 'planned',
14
+ 'action' => 'Update http proxy'
15
+ }
16
+ end
17
+
18
+ it 'updates product proxy policy' do
19
+ params = [
20
+ '--ids=1',
21
+ '--http-proxy-policy=use_selected_http_proxy',
22
+ '--http-proxy-id=1'
23
+ ]
24
+
25
+ ex = api_expects(:products_bulk_actions, :update_http_proxy, 'update an http-proxy')
26
+ .with_params('ids' => '1', 'http_proxy_policy' => 'use_selected_http_proxy',
27
+ 'http_proxy_id' => '1')
28
+ ex.returns(sync_response)
29
+
30
+ expect_foreman_task('3')
31
+
32
+ result = run_cmd(@cmd + params)
33
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
34
+ end
35
+
36
+ it 'fails with missing required params' do
37
+ params = ['--proxy-id=1']
38
+
39
+ ex = api_expects(:products_bulk_actions, :update_http_proxy, 'update an http-proxy')
40
+ .with_params('proxy_id' => '1')
41
+ ex.returns(
42
+ 'proxy_id' => '1'
43
+ )
44
+
45
+ result = run_cmd(@cmd + params)
46
+ assert_equal(result.exit_code, 70)
47
+ end
48
+ end
@@ -0,0 +1,46 @@
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__), '../product/product_helpers')
4
+
5
+ describe 'update a product' do
6
+ include OrganizationHelpers
7
+ include ProductHelpers
8
+
9
+ it 'by product ID' do
10
+ api_expects(:products, :update, 'update a product') do |par|
11
+ par['id'] == 1 &&
12
+ par['description'] == 'new_description'
13
+ end
14
+ assert_equal(
15
+ 0,
16
+ run_cmd(%w(product update --organization-id 1 --id 1 --description new_description)).exit_code
17
+ )
18
+ end
19
+
20
+ it 'by organization ID and product name' do
21
+ expect_product_search(1, 'product1', 1)
22
+ api_expects(:products, :update, 'update a product') do |par|
23
+ par['id'] == 1 &&
24
+ par['description'] == 'new_description'
25
+ end
26
+ command = %w(product update --organization-id 1 --name product1 --description new_description)
27
+ assert_equal(
28
+ 0,
29
+ run_cmd(command).exit_code
30
+ )
31
+ end
32
+
33
+ it 'by organization name and product name' do
34
+ expect_organization_search('org1', 1)
35
+ expect_product_search(1, 'product1', 1)
36
+ api_expects(:products, :update, 'update a product') do |par|
37
+ par['id'] == 1 &&
38
+ par['description'] == 'new_description'
39
+ end
40
+ command = %w(product update --organization org1 --name product1 --description new_description)
41
+ assert_equal(
42
+ 0,
43
+ run_cmd(command).exit_code
44
+ )
45
+ end
46
+ end
@@ -0,0 +1,21 @@
1
+ require_relative '../test_helper'
2
+
3
+ describe "create repository" do
4
+ let(:org_id) { 1 }
5
+ let(:product_id) { 2 }
6
+ let(:name) { "repo1" }
7
+ let(:content_type) { "yum" }
8
+
9
+ it 'with basic options' do
10
+ api_expects(:repositories, :create)
11
+ .with_params(
12
+ name: name,
13
+ product_id: product_id,
14
+ content_type: content_type)
15
+
16
+ command = %W(repository create --organization-id #{org_id} --product-id #{product_id}
17
+ --content-type #{content_type} --name #{name})
18
+
19
+ assert_equal(0, run_cmd(command).exit_code)
20
+ end
21
+ end
@@ -0,0 +1,95 @@
1
+ require_relative '../test_helper'
2
+ require 'hammer_cli_katello/repository'
3
+
4
+ module HammerCLIKatello
5
+ describe Repository::DeleteCommand do
6
+ it 'allows minimal parameters' do
7
+ api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
8
+ run_cmd(%w(repository delete --id 1))
9
+ end
10
+
11
+ describe 'product options' do
12
+ it 'are required to resolve repository name' do
13
+ api_expects_no_call
14
+ result = run_cmd(%w(repository delete --name repo1))
15
+ assert_includes(result.err, 'At least one of options --product, --product-id is required')
16
+ end
17
+
18
+ it 'can be specified via product id' do
19
+ api_expects(:repositories, :index)
20
+ .with_params('product_id' => 3, 'name' => 'repo1')
21
+ .returns(index_response([{'id' => 1}]))
22
+
23
+ api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
24
+
25
+ run_cmd(%w(repository delete --name repo1 --product-id 3))
26
+ end
27
+
28
+ it 'can be specified via product name' do
29
+ api_expects(:products, :index)
30
+ .with_params('organization_id' => '6', 'name' => 'product3')
31
+ .returns(index_response([{'id' => 3}]))
32
+
33
+ api_expects(:repositories, :index)
34
+ .with_params('product_id' => 3, 'name' => 'repo1')
35
+ .returns(index_response([{'id' => 1}]))
36
+
37
+ api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
38
+
39
+ run_cmd(%w(repository delete --name repo1 --product product3 --organization-id 6))
40
+ end
41
+
42
+ describe 'organization options' do
43
+ it 'can be specified by organization id' do
44
+ api_expects(:products, :index)
45
+ .with_params('organization_id' => '6', 'name' => 'product3')
46
+ .returns(index_response([{'id' => 3}]))
47
+
48
+ api_expects(:repositories, :index)
49
+ .with_params('product_id' => 3, 'name' => 'repo1')
50
+ .returns(index_response([{'id' => 1}]))
51
+
52
+ api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
53
+
54
+ run_cmd(%w(repository delete --name repo1 --product product3 --organization-id 6))
55
+ end
56
+
57
+ it 'can be specified by organization name' do
58
+ api_expects(:organizations, :index)
59
+ .with_params(:search => "name = \"org6\"")
60
+ .returns(index_response([{'id' => 6}]))
61
+
62
+ api_expects(:products, :index)
63
+ .with_params('organization_id' => 6, 'name' => 'product3')
64
+ .returns(index_response([{'id' => 3}]))
65
+
66
+ api_expects(:repositories, :index)
67
+ .with_params('product_id' => 3, 'name' => 'repo1')
68
+ .returns(index_response([{'id' => 1}]))
69
+
70
+ api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
71
+
72
+ run_cmd(%w(repository delete --name repo1 --product product3 --organization org6))
73
+ end
74
+
75
+ it 'can be specified by organization label' do
76
+ api_expects(:organizations, :index)
77
+ .with_params(:search => "label = \"org6\"")
78
+ .returns(index_response([{'id' => 6}]))
79
+
80
+ api_expects(:products, :index)
81
+ .with_params('organization_id' => 6, 'name' => 'product3')
82
+ .returns(index_response([{'id' => 3}]))
83
+
84
+ api_expects(:repositories, :index)
85
+ .with_params('product_id' => 3, 'name' => 'repo1')
86
+ .returns(index_response([{'id' => 1}]))
87
+
88
+ api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
89
+
90
+ run_cmd(%w(repository delete --name repo1 --product product3 --organization-label org6))
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,156 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../product/product_helpers')
3
+ require File.join(File.dirname(__FILE__), './repository_helpers')
4
+ require 'hammer_cli_katello/associating_commands'
5
+
6
+ describe "get repository info" do
7
+ include ProductHelpers
8
+ include RepositoryHelpers
9
+
10
+ before do
11
+ @cmd = %w(repository info)
12
+ end
13
+
14
+ it "shows repository info by id" do
15
+ params = ['--id=1']
16
+ ex = api_expects(:repositories, :show, "Get info")
17
+ ex.returns(
18
+ 'id' => 1,
19
+ 'name' => 'Test Repo',
20
+ 'label' => 'Test_Repo',
21
+ 'description' => 'hammertime',
22
+ 'organization' => {
23
+ 'name' => 'Default Organization',
24
+ 'label' => 'Default_Organization',
25
+ 'id' => 1
26
+ },
27
+ 'created_at' => '2020-08-05 15:35:36 UTC',
28
+ 'updated_at' => '2020-08-05 15:35:36 UTC',
29
+ 'content_type' => 'yum',
30
+ 'product' => {
31
+ 'id' => 79,
32
+ 'name' => 'test'
33
+ },
34
+ 'download_policy' => 'immediate',
35
+ 'unprotected' => true,
36
+ 'last_sync_words' => '3 minutes',
37
+ 'mirror_on_sync' => true,
38
+ 'relative_path' => 'Default_Organization/Library/Test_Repo',
39
+ 'content_counts' => {
40
+ 'rpm' => 1,
41
+ 'srpm' => 0,
42
+ 'package_group' => 0,
43
+ 'erratum' => 1,
44
+ 'module_stream' => 0
45
+ }
46
+ )
47
+ result = run_cmd(@cmd + params)
48
+ # rubocop:disable Style/WordArray
49
+ expected_fields = [['Id', '1'],
50
+ ['Name', 'Test Repo'],
51
+ ['Label', 'Test_Repo'],
52
+ ['Description', 'hammertime'],
53
+ ['Organization', 'Default Organization'],
54
+ ['Red Hat Repository', 'no'],
55
+ ['Content Type', 'yum'],
56
+ ['Mirror on Sync', 'yes'],
57
+ ['Publish Via HTTP', 'yes'],
58
+ ['Relative Path', 'Default_Organization/Library/Test_Repo'],
59
+ ['Download Policy', 'immediate'],
60
+ ['HTTP Proxy', ''],
61
+ ['Product', ''],
62
+ ['Id', '79'],
63
+ ['Name', 'test'],
64
+ ['GPG Key', ''],
65
+ ['Sync', ''],
66
+ ['Status', 'Not Synced'],
67
+ ['Last Sync Date', '3 minutes'],
68
+ ['Created', '2020/08/05 15:35:36'],
69
+ ['Updated', '2020/08/05 15:35:36'],
70
+ ['Content Counts', ''],
71
+ ['Packages', '1'],
72
+ ['Source RPMS', '0'],
73
+ ['Package Groups', '0'],
74
+ ['Errata', '1'],
75
+ ['Module Streams', '0']]
76
+ # rubocop:enable Style/WordArray
77
+ expected_results = expected_fields.map { |field| success_result(FieldMatcher.new(*field)) }
78
+ expected_results.each { |expected| assert_cmd(expected, result) }
79
+ end
80
+
81
+ it "Shows information about a repository with organization-id and product name" do
82
+ org_id = 1
83
+ product_id = 2
84
+ repo_id = 3
85
+ params = ["--name=Test_Repo", "--product=Test_Product", "--organization-id=1"]
86
+
87
+ expect_product_search(org_id, 'Test_Product', product_id)
88
+
89
+ expect_repository_search(product_id, 'Test_Repo', repo_id)
90
+
91
+ ex = api_expects(:repositories, :show, "Get info")
92
+
93
+ ex.returns(
94
+ 'id' => 1,
95
+ 'name' => 'Test Repo',
96
+ 'label' => 'Test_Repo',
97
+ 'description' => 'hammertime',
98
+ 'organization' => {
99
+ 'name' => 'Default Organization',
100
+ 'label' => 'Default_Organization',
101
+ 'id' => 1
102
+ },
103
+ 'created_at' => '2020-08-05 15:35:36 UTC',
104
+ 'updated_at' => '2020-08-05 15:35:36 UTC',
105
+ 'content_type' => 'yum',
106
+ 'product' => {
107
+ 'id' => 79,
108
+ 'name' => 'Test_Product'
109
+ },
110
+ 'download_policy' => 'immediate',
111
+ 'unprotected' => true,
112
+ 'last_sync_words' => '3 minutes',
113
+ 'mirror_on_sync' => true,
114
+ 'relative_path' => 'Default_Organization/Library/Test_Repo',
115
+ 'content_counts' => {
116
+ 'rpm' => 1,
117
+ 'srpm' => 0,
118
+ 'package_group' => 0,
119
+ 'erratum' => 1,
120
+ 'module_stream' => 0
121
+ }
122
+ )
123
+ result = run_cmd(@cmd + params)
124
+ # rubocop:disable Style/WordArray
125
+ expected_fields = [['Id', '1'],
126
+ ['Name', 'Test Repo'],
127
+ ['Label', 'Test_Repo'],
128
+ ['Description', 'hammertime'],
129
+ ['Organization', 'Default Organization'],
130
+ ['Red Hat Repository', 'no'],
131
+ ['Content Type', 'yum'],
132
+ ['Mirror on Sync', 'yes'],
133
+ ['Publish Via HTTP', 'yes'],
134
+ ['Relative Path', 'Default_Organization/Library/Test_Repo'],
135
+ ['Download Policy', 'immediate'],
136
+ ['HTTP Proxy', ''],
137
+ ['Product', ''],
138
+ ['Id', '79'],
139
+ ['Name', 'Test_Product'],
140
+ ['GPG Key', ''],
141
+ ['Sync', ''],
142
+ ['Status', 'Not Synced'],
143
+ ['Last Sync Date', '3 minutes'],
144
+ ['Created', '2020/08/05 15:35:36'],
145
+ ['Updated', '2020/08/05 15:35:36'],
146
+ ['Content Counts', ''],
147
+ ['Packages', '1'],
148
+ ['Source RPMS', '0'],
149
+ ['Package Groups', '0'],
150
+ ['Errata', '1'],
151
+ ['Module Streams', '0']]
152
+ # rubocop:enable Style/WordArray
153
+ expected_results = expected_fields.map { |field| success_result(FieldMatcher.new(*field)) }
154
+ expected_results.each { |expected| assert_cmd(expected, result) }
155
+ end
156
+ end