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,68 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../lifecycle_environment/lifecycle_environment_helpers')
3
+
4
+ describe 'listing repositories' do
5
+ include LifecycleEnvironmentHelpers
6
+
7
+ before do
8
+ @cmd = %w(repository list)
9
+ end
10
+
11
+ let(:org_id) { 1 }
12
+ let(:lifecycle_env_id) { 1 }
13
+ let(:empty_response) do
14
+ {
15
+ "total" => 0,
16
+ "subtotal" => 0,
17
+ "page" => "1",
18
+ "per_page" => "1000",
19
+ "error" => nil,
20
+ "search" => nil,
21
+ "sort" => {
22
+ "by" => nil,
23
+ "order" => nil
24
+ },
25
+ "results" => []
26
+ }
27
+ end
28
+
29
+ it "lists an organizations repositories" do
30
+ params = ["--organization-id=#{org_id}"]
31
+
32
+ ex = api_expects(:repositories, :index, 'Organizations repositories list') do |par|
33
+ par['organization_id'] == org_id && par['page'] == 1 &&
34
+ par['per_page'] == 1000
35
+ end
36
+
37
+ ex.returns(empty_response)
38
+
39
+ expected_result = success_result("---|------|---------|--------------|----
40
+ ID | NAME | PRODUCT | CONTENT TYPE | URL
41
+ ---|------|---------|--------------|----
42
+ ")
43
+
44
+ result = run_cmd(@cmd + params)
45
+ assert_cmd(expected_result, result)
46
+ end
47
+
48
+ it "lists the repositories belonging to a lifecycle-environment by name" do
49
+ params = ['--organization-id=1', '--environment=test']
50
+
51
+ expect_lifecycle_environment_search(org_id, 'test', lifecycle_env_id)
52
+
53
+ ex = api_expects(:repositories, :index, 'lifecycle repositories list') do |par|
54
+ par['organization_id'] == org_id && par['page'] == 1 &&
55
+ par['per_page'] == 1000
56
+ end
57
+
58
+ ex.returns(empty_response)
59
+
60
+ expected_result = CommandExpectation.new("---|------|---------|--------------|----
61
+ ID | NAME | PRODUCT | CONTENT TYPE | URL
62
+ ---|------|---------|--------------|----
63
+ ", "Warning: Option --environment is deprecated. Use --lifecycle-environment instead\n")
64
+
65
+ result = run_cmd(@cmd + params)
66
+ assert_cmd(expected_result, result)
67
+ end
68
+ end
@@ -0,0 +1,108 @@
1
+ require_relative '../test_helper'
2
+ require_relative '../organization/organization_helpers'
3
+ require 'hammer_cli_katello/repository'
4
+
5
+ module HammerCLIKatello
6
+ describe Repository::RemoveContentCommand do
7
+ include OrganizationHelpers
8
+
9
+ it 'allows minimal options' do
10
+ api_expects(:repositories, :remove_content) do |p|
11
+ p['id'] == 1 && p['ids'] == %w(20 21 22)
12
+ end
13
+
14
+ run_cmd(%w(repository remove-content --id 1 --ids 20,21,22))
15
+ end
16
+
17
+ describe 'resolves repository ID' do
18
+ it 'by requiring product' do
19
+ api_expects_no_call
20
+ result = run_cmd(%w(repository remove-content --name repo1 --ids 20,21,22))
21
+ assert(result.err[/--product, --product-id is required/], 'Incorrect error message')
22
+ end
23
+
24
+ it 'by product ID' do
25
+ ex = api_expects(:repositories, :index) do |p|
26
+ p['name'] == 'repo1' && p['product_id'] == 3
27
+ end
28
+ ex.returns(index_response([{'id' => 1}]))
29
+
30
+ api_expects(:repositories, :remove_content) do |p|
31
+ p['id'] == 1 && p['ids'] == %w(20 21 22)
32
+ end
33
+
34
+ run_cmd(%w(repository remove-content --name repo1 --product-id 3 --ids 20,21,22))
35
+ end
36
+ end
37
+
38
+ describe 'resolves product ID' do
39
+ it 'by requiring organization options' do
40
+ api_expects_no_call
41
+ result = run_cmd(%w(repository remove-content --name repo1 --product prod1 --ids 20,21,22))
42
+ assert(result.err[/--organization-id, --organization, --organization-label is required/],
43
+ "Organization option requirements must be validated")
44
+ end
45
+
46
+ it 'by organization ID' do
47
+ ex = api_expects(:products, :index) do |p|
48
+ p['name'] == 'prod3' && p['organization_id'] == '5'
49
+ end
50
+ ex.returns(index_response([{'id' => 3}]))
51
+
52
+ ex = api_expects(:repositories, :index) do |p|
53
+ p['name'] == 'repo1' && p['product_id'] == 3
54
+ end
55
+ ex.returns(index_response([{'id' => 1}]))
56
+
57
+ api_expects(:repositories, :remove_content) do |p|
58
+ p['id'] == 1 && p['ids'] == %w(20 21 22)
59
+ end
60
+
61
+ run_cmd(%w(repository remove-content --name repo1 --product prod3 --organization-id 5
62
+ --ids 20,21,22))
63
+ end
64
+
65
+ it 'by organization name' do
66
+ expect_organization_search('org5', 5)
67
+
68
+ ex = api_expects(:products, :index) do |p|
69
+ p['name'] == 'prod3' && p['organization_id'] == 5
70
+ end
71
+ ex.returns(index_response([{'id' => 3}]))
72
+
73
+ ex = api_expects(:repositories, :index) do |p|
74
+ p['name'] == 'repo1' && p['product_id'] == 3
75
+ end
76
+ ex.returns(index_response([{'id' => 1}]))
77
+
78
+ api_expects(:repositories, :remove_content) do |p|
79
+ p['id'] == 1 && p['ids'] == %w(20 21 22)
80
+ end
81
+
82
+ run_cmd(%w(repository remove-content --name repo1 --product prod3 --organization org5
83
+ --ids 20,21,22))
84
+ end
85
+
86
+ it 'by organization label' do
87
+ expect_organization_search('org5', 5, field: 'label')
88
+
89
+ ex = api_expects(:products, :index) do |p|
90
+ p['name'] == 'prod3' && p['organization_id'] == 5
91
+ end
92
+ ex.returns(index_response([{'id' => 3}]))
93
+
94
+ ex = api_expects(:repositories, :index) do |p|
95
+ p['name'] == 'repo1' && p['product_id'] == 3
96
+ end
97
+ ex.returns(index_response([{'id' => 1}]))
98
+
99
+ api_expects(:repositories, :remove_content) do |p|
100
+ p['id'] == 1 && p['ids'] == %w(20 21 22)
101
+ end
102
+
103
+ run_cmd(%w(repository remove-content --name repo1 --product prod3 --organization-label org5
104
+ --ids 20,21,22))
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,18 @@
1
+ module RepositoryHelpers
2
+ def expect_repository_search(product_id, name, id)
3
+ api_expects(:repositories, :index, 'Find a repository')
4
+ .with_params('name' => name, 'product_id' => product_id)
5
+ .returns(index_response([{'id' => id}]))
6
+ end
7
+
8
+ def expect_repositories_search(org_id, names, ids)
9
+ expect_generic_repositories_search({'names' => names, 'organization_id' => org_id},
10
+ ids.zip(names).map { |id, name| { 'id' => id, 'name' => name } })
11
+ end
12
+
13
+ def expect_generic_repositories_search(params = {}, returns = [])
14
+ api_expects(:repositories, :index, 'Find repositories')
15
+ .with_params(params)
16
+ .returns(index_response(returns))
17
+ end
18
+ end
@@ -0,0 +1,57 @@
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
+
5
+ describe 'Synchronize a repository' do
6
+ include ForemanTaskHelpers
7
+ include ProductHelpers
8
+ include RepositoryHelpers
9
+
10
+ before do
11
+ @cmd = %w(repository synchronize)
12
+ end
13
+
14
+ let(:org_id) { 1 }
15
+ let(:repo_id) { 2 }
16
+ let(:product_id) { 3 }
17
+ let(:sync_response) do
18
+ {
19
+ 'id' => repo_id.to_s,
20
+ 'state' => 'planned'
21
+ }
22
+ end
23
+
24
+ it "synchronizes a repository" do
25
+ params = ["--id=#{repo_id}"]
26
+
27
+ ex = api_expects(:repositories, :sync, 'Repository is synced') do |par|
28
+ par['id'] == repo_id
29
+ end
30
+
31
+ ex.returns(sync_response)
32
+
33
+ expect_foreman_task('3')
34
+
35
+ result = run_cmd(@cmd + params)
36
+ assert_equal(result.exit_code, 0)
37
+ end
38
+
39
+ it "synchronizes a repository with a repository name" do
40
+ params = ["--name=test_repo", "--product=test_product", "--organization-id=#{org_id}"]
41
+
42
+ expect_product_search(org_id, "test_product", product_id)
43
+
44
+ expect_repository_search(product_id, "test_repo", repo_id)
45
+
46
+ ex = api_expects(:repositories, :sync, 'Repository is synced') do |par|
47
+ par['id'] == repo_id
48
+ end
49
+
50
+ ex.returns(sync_response)
51
+
52
+ expect_foreman_task('3')
53
+
54
+ result = run_cmd(@cmd + params)
55
+ assert_equal(result.exit_code, 0)
56
+ end
57
+ end
@@ -0,0 +1,149 @@
1
+ require_relative '../test_helper'
2
+ require_relative '../organization/organization_helpers'
3
+ require 'hammer_cli_katello/repository'
4
+
5
+ module HammerCLIKatello # rubocop:disable Metrics/ModuleLength
6
+ describe Repository::UpdateCommand do
7
+ include OrganizationHelpers
8
+
9
+ it 'allows minimal options' do
10
+ api_expects(:repositories, :update) do |p|
11
+ p['id'] == 1 && p['name'] == 'rep1'
12
+ end
13
+
14
+ run_cmd(%w(repository update --id 1 --new-name rep1))
15
+ end
16
+
17
+ describe 'tags docker images' do
18
+ let(:repo_id) { 3 }
19
+ let(:tag_name) { "latest" }
20
+ let(:digest) { "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }
21
+ let(:upload_id) { "1234" }
22
+ let(:_href) { "/pulp/api/v2/content/uploads/#{upload_id}" }
23
+ let(:upload_response) do
24
+ {
25
+ "upload_id" => upload_id,
26
+ "_href" => _href
27
+ }
28
+ end
29
+ it "adds a tag to an image" do
30
+ ex = api_expects(:content_uploads, :create)
31
+ .with_params('repository_id' => repo_id, :size => 0)
32
+
33
+ ex.returns(upload_response)
34
+ ex2 = api_expects(:repositories, :import_uploads, 'Take in an upload')
35
+ .with_params(:id => repo_id, :sync_capsule => true, :publish_repository => true,
36
+ :uploads => [{
37
+ :id => '1234',
38
+ :name => tag_name,
39
+ :digest => digest
40
+ }],
41
+ :content_type => "docker_tag"
42
+ )
43
+
44
+ ex2.returns("")
45
+
46
+ ex3 = api_expects(:content_uploads, :destroy, "Delete the upload")
47
+ .with_params('id' => upload_id, 'repository_id' => repo_id)
48
+
49
+ ex3.returns("")
50
+ # rubocop:disable LineLength
51
+ result = run_cmd(%W(repository update --id #{repo_id} --docker-tag #{tag_name} --docker-digest #{digest}))
52
+ # rubocop:enable LineLength
53
+ assert_equal(result.exit_code, 0)
54
+ end
55
+ end
56
+
57
+ describe 'resolves repository ID' do
58
+ it 'by requiring product' do
59
+ api_expects_no_call
60
+ result = run_cmd(%w(repository update --name repo1 --new-name rep1))
61
+ assert(result.err[/--product, --product-id is required/], 'Incorrect error message')
62
+ end
63
+
64
+ it 'by product ID' do
65
+ ex = api_expects(:repositories, :index) do |p|
66
+ p['name'] == 'repo1' && p['product_id'] == 3
67
+ end
68
+ ex.returns(index_response([{'id' => 1}]))
69
+
70
+ api_expects(:repositories, :update) do |p|
71
+ p['id'] == 1 && p['name'] == 'rep1'
72
+ end
73
+
74
+ run_cmd(%w(repository update --name repo1 --product-id 3 --new-name rep1))
75
+ end
76
+ end
77
+
78
+ describe 'resolves product ID' do
79
+ it 'by requiring organization options' do
80
+ api_expects_no_call
81
+ result = run_cmd(%w(repository update --name repo1 --product prod1 --new-name rep1))
82
+ assert(result.err[/--organization-id, --organization, --organization-label is required/],
83
+ "Organization option requirements must be validated")
84
+ end
85
+
86
+ it 'by organization ID' do
87
+ ex = api_expects(:products, :index) do |p|
88
+ p['name'] == 'prod3' && p['organization_id'] == '5'
89
+ end
90
+ ex.returns(index_response([{'id' => 3}]))
91
+
92
+ ex = api_expects(:repositories, :index) do |p|
93
+ p['name'] == 'repo1' && p['product_id'] == 3
94
+ end
95
+ ex.returns(index_response([{'id' => 1}]))
96
+
97
+ api_expects(:repositories, :update) do |p|
98
+ p['id'] == 1 && p['name'] == 'rep1'
99
+ end
100
+
101
+ run_cmd(%w(repository update --name repo1 --product prod3 --organization-id 5
102
+ --new-name rep1))
103
+ end
104
+
105
+ it 'by organization name' do
106
+ expect_organization_search('org5', 5)
107
+
108
+ ex = api_expects(:products, :index) do |p|
109
+ p['name'] == 'prod3' && p['organization_id'] == 5
110
+ end
111
+ ex.returns(index_response([{'id' => 3}]))
112
+
113
+ ex = api_expects(:repositories, :index) do |p|
114
+ p['name'] == 'repo1' && p['product_id'] == 3
115
+ end
116
+ ex.returns(index_response([{'id' => 1}]))
117
+
118
+ api_expects(:repositories, :update) do |p|
119
+ p['id'] == 1 && p['name'] == 'rep1'
120
+ end
121
+
122
+ run_cmd(%w(repository update --name repo1 --product prod3 --organization org5
123
+ --new-name rep1))
124
+ end
125
+
126
+ it 'by organization label' do
127
+ expect_organization_search('org5', 5, field: 'label')
128
+
129
+ ex = api_expects(:products, :index) do |p|
130
+ p['name'] == 'prod3' && p['organization_id'] == 5
131
+ end
132
+ ex.returns(index_response([{'id' => 3}]))
133
+
134
+ ex = api_expects(:repositories, :index) do |p|
135
+ p['name'] == 'repo1' && p['product_id'] == 3
136
+ end
137
+ ex.returns(index_response([{'id' => 1}]))
138
+
139
+ api_expects(:repositories, :update) do |p|
140
+ p['id'] == 1 && p['name'] == 'rep1'
141
+ end
142
+
143
+ run_cmd(%w(repository update --name repo1 --product prod3 --organization-label org5
144
+ --new-name rep1))
145
+ end
146
+ end
147
+ end
148
+ end
149
+ # rubocop:enable ModuleLength