hammer_cli_katello 1.4.0 → 1.5.1

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 (33) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hammer_cli_katello/acs.rb +79 -0
  3. data/lib/hammer_cli_katello/content_export_complete.rb +8 -0
  4. data/lib/hammer_cli_katello/content_export_helper.rb +55 -3
  5. data/lib/hammer_cli_katello/content_export_incremental.rb +8 -0
  6. data/lib/hammer_cli_katello/content_import.rb +9 -0
  7. data/lib/hammer_cli_katello/host_collection.rb +2 -0
  8. data/lib/hammer_cli_katello/id_resolver.rb +3 -2
  9. data/lib/hammer_cli_katello/organization.rb +11 -0
  10. data/lib/hammer_cli_katello/repository.rb +65 -3
  11. data/lib/hammer_cli_katello/version.rb +1 -1
  12. data/lib/hammer_cli_katello.rb +5 -0
  13. data/test/data/4.4/foreman_api.json +1 -0
  14. data/test/data/4.5/foreman_api.json +1 -0
  15. data/test/data/4.6/foreman_api.json +1 -0
  16. data/test/functional/acs/create_test.rb +27 -0
  17. data/test/functional/acs/delete_test.rb +13 -0
  18. data/test/functional/acs/info_test.rb +55 -0
  19. data/test/functional/acs/list_test.rb +62 -0
  20. data/test/functional/acs/update_test.rb +23 -0
  21. data/test/functional/content_export/complete/repository_test.rb +226 -0
  22. data/test/functional/content_export/content_export_helpers.rb +7 -0
  23. data/test/functional/content_export/incremental/repository_test.rb +212 -0
  24. data/test/functional/module_stream/info_test.rb +2 -2
  25. data/test/functional/organization/cdn_configuration_test.rb +5 -2
  26. data/test/functional/organization/info_test.rb +8 -2
  27. data/test/functional/repository/info_test.rb +4 -4
  28. data/test/functional/repository/reclaim_space_test.rb +105 -0
  29. data/test/functional/repository/republish_test.rb +37 -0
  30. data/test/functional/repository/update_test.rb +1 -0
  31. data/test/functional/repository_set/disable_test.rb +7 -1
  32. data/test/test_helper.rb +1 -1
  33. metadata +27 -2
@@ -0,0 +1,27 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+
3
+ describe 'create content-credentials' do
4
+ before do
5
+ @cmd = %w(alternate-content-sources create)
6
+ end
7
+
8
+ let(:name) { 'pizza' }
9
+ let(:url) { 'http://proxy.example.com' }
10
+ let(:acs_type) { 'custom' }
11
+ let(:acs_content) { 'yum' }
12
+ let(:verify_ssl) { false }
13
+ let(:proxy_id) { 1 }
14
+ let(:subpaths) { ['test/repo1/'] }
15
+
16
+ it 'Creates an ACS' do
17
+ params = ["--name=#{name}", "--alternate-content-source-type=#{acs_type}",
18
+ "--base-url=#{url}", "--content-type=#{acs_content}", "--verify-ssl=#{verify_ssl}",
19
+ "--smart-proxy-ids=#{proxy_id}", "--subpaths=#{subpaths}"]
20
+
21
+ api_expects(:alternate_content_sources, :create, 'Create an ACS')
22
+
23
+ expected_result = success_result("Alternate Content Source created.\n")
24
+ result = run_cmd(@cmd + params)
25
+ assert_cmd(expected_result, result)
26
+ end
27
+ end
@@ -0,0 +1,13 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+
3
+ describe 'delete an acs' do
4
+ let(:id) { 1 }
5
+
6
+ it 'by id' do
7
+ api_expects(:alternate_content_sources, :destroy, 'delete acs').
8
+ with_params('id' => id)
9
+
10
+ command = %W(alternate-content-sources delete --id #{id})
11
+ assert_equal(0, run_cmd(command).exit_code)
12
+ end
13
+ end
@@ -0,0 +1,55 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+ require 'hammer_cli_katello/associating_commands'
3
+
4
+ describe 'get acs info' do
5
+ before do
6
+ @cmd = %w(alternate-content-sources info)
7
+ end
8
+
9
+ it 'shows acs info by id' do
10
+ params = ['--id=1']
11
+ ex = api_expects(:alternate_content_sources, :show, 'Get info')
12
+ ex.returns(
13
+ 'id' => 1,
14
+ 'name' => 'Pizza ACS',
15
+ 'label' => 'Pizza ACS',
16
+ 'base_url' => 'https://proxy.example.com',
17
+ 'alternate_content_source_type' => 'custom',
18
+ 'content_type' => 'yum',
19
+ 'smart_proxies' => {
20
+ 'id' => 1,
21
+ 'name' => 'centos7.example.com',
22
+ 'url' => 'https://centos7.example.com:9090',
23
+ 'created_at' => '2022-05-09T17:40:21.007Z',
24
+ 'updated_at' => '2022-05-09T17:40:21.007Z',
25
+ 'expired_logs' => 0,
26
+ 'download_policy' => 'on_demand'
27
+ },
28
+ 'subpaths' => [
29
+ 'test/repo1'
30
+ ]
31
+ )
32
+ result = run_cmd(@cmd + params)
33
+ # rubocop:disable Style/WordArray
34
+ expected_fields = [['ID', '1'],
35
+ ['Name', 'Pizza ACS'],
36
+ ['Label', 'Pizza ACS'],
37
+ ['Base URL', 'https://proxy.example.com'],
38
+ ['Alternate content source type', 'custom'],
39
+ ['Content type', 'yum'],
40
+ ['Smart proxies', ''],
41
+ ['Id', '1'],
42
+ ['Name', 'centos7.example.com'],
43
+ ['URL', 'https://centos7.example.com:9090'],
44
+ ['Created at', '2022-05-09T17:40:21.007Z'],
45
+ ['Updated at', '2022-05-09T17:40:21.007Z'],
46
+ ['Expired logs', '0'],
47
+ ['Download policy', 'on_demand'],
48
+ ['Subpaths', ''],
49
+ ['', 'test/repo1']]
50
+
51
+ # rubocop:enable Style/WordArray
52
+ expected_results = expected_fields.map { |field| success_result(FieldMatcher.new(*field)) }
53
+ expected_results.each { |expected| assert_cmd(expected, result) }
54
+ end
55
+ end
@@ -0,0 +1,62 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+
3
+ describe 'listing acs' do
4
+ before do
5
+ @cmd = %w(alternate-content-sources list)
6
+ end
7
+
8
+ let(:empty_response) do
9
+ {
10
+ "total" => 0,
11
+ "subtotal" => 0,
12
+ "page" => "1",
13
+ "per_page" => "1000",
14
+ "error" => nil,
15
+ "search" => nil,
16
+ "sort" => {
17
+ "by" => nil,
18
+ "order" => nil
19
+ },
20
+ "results" => []
21
+ }
22
+ end
23
+
24
+ let(:acs_response) do
25
+ {
26
+ 'id' => 1,
27
+ 'name' => 'pizza',
28
+ 'alternate_content_source_type' => 'custom'
29
+ }
30
+ end
31
+
32
+ it "lists acs and returns empty response" do
33
+ ex = api_expects(:alternate_content_sources, :index, 'acs list') do |par|
34
+ par['page'] == 1 && par['per_page'] == 1000
35
+ end
36
+
37
+ ex.returns(empty_response)
38
+
39
+ expected_result = success_result("---|------|-----
40
+ ID | NAME | TYPE
41
+ ---|------|-----
42
+ ")
43
+
44
+ result = run_cmd(@cmd)
45
+ assert_cmd(expected_result, result)
46
+ end
47
+
48
+ it "lists acs and returns response" do
49
+ ex = api_expects(:alternate_content_sources, :index, 'acs list') do |par|
50
+ par['page'] == 1 && par['per_page'] == 1000
51
+ end
52
+
53
+ ex.returns(acs_response)
54
+
55
+ expected_result = success_result("1 | pizza | custom
56
+ ---|-------|-------
57
+ ")
58
+
59
+ result = run_cmd(@cmd)
60
+ assert_cmd(expected_result, result)
61
+ end
62
+ end
@@ -0,0 +1,23 @@
1
+ require File.join(File.dirname(__FILE__), '../test_helper')
2
+
3
+ describe 'listing acs' do
4
+ before do
5
+ @cmd = %w(alternate-content-sources update)
6
+ end
7
+
8
+ let(:id) { 1 }
9
+ let(:desc) { 'pizza' }
10
+
11
+ it 'update acs' do
12
+ params = ["--id=#{id}", "--description=#{desc}"]
13
+
14
+ ex = api_expects(:alternate_content_sources, :update, 'acs update') do |par|
15
+ par['id'] == 1 && par['description'] == 'pizza'
16
+ end
17
+
18
+ ex.returns({})
19
+
20
+ result = run_cmd(@cmd + params)
21
+ assert_equal(result.exit_code, 0)
22
+ end
23
+ end
@@ -0,0 +1,226 @@
1
+ require File.join(File.dirname(__FILE__), '../../../test_helper')
2
+ require 'hammer_cli_katello/content_export_complete'
3
+ require_relative '../../product/product_helpers'
4
+ require_relative '../../repository/repository_helpers'
5
+ require_relative '../content_export_helpers'
6
+
7
+ describe 'content-export complete repository' do
8
+ include ForemanTaskHelpers
9
+ include ContentExportHelpers
10
+ include ProductHelpers
11
+ include RepositoryHelpers
12
+
13
+ before do
14
+ @cmd = %w(content-export complete repository)
15
+ end
16
+
17
+ let(:task_id) { '5' }
18
+ let(:response) do
19
+ {
20
+ 'id' => task_id,
21
+ 'state' => 'planned',
22
+ 'output' => {
23
+ 'export_history_id' => 2
24
+ }
25
+ }
26
+ end
27
+
28
+ let(:export_history) do
29
+ {
30
+ "id": 1000,
31
+ "path": "/tmp",
32
+ "metadata": {}
33
+ }
34
+ end
35
+
36
+ let(:default_repository_options) do
37
+ {"download_policy" => "immediate", "id" => repository_id}
38
+ end
39
+
40
+ let(:product_id) { '77' }
41
+ let(:repository_id) { '1001' }
42
+
43
+ let(:name) { 'repo' }
44
+
45
+ it "performs export with required options and async" do
46
+ params = [
47
+ "--id=#{repository_id}",
48
+ '--async'
49
+ ]
50
+ expects_repository(repository_id, default_repository_options)
51
+ ex = api_expects(:content_exports, :repository)
52
+ ex.returns(response)
53
+
54
+ result = run_cmd(@cmd + params)
55
+
56
+ assert_equal("Repository is being exported in task #{task_id}.\n"\
57
+ + "Once the task completes the export metadata must be generated with the "\
58
+ + "command:\n hammer content-export generate-metadata --task-id #{task_id}\n", result.out)
59
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
60
+ end
61
+
62
+ it "performs export with required options" do
63
+ params = [
64
+ "--id=#{repository_id}"
65
+ ]
66
+ expects_repository(repository_id, default_repository_options)
67
+ ex = api_expects(:content_exports, :repository)
68
+ ex.returns(response)
69
+
70
+ expect_foreman_task(task_id).at_least_once
71
+
72
+ HammerCLIKatello::ContentExportComplete::RepositoryCommand.
73
+ any_instance.
74
+ expects(:fetch_export_history).
75
+ returns(export_history)
76
+
77
+ result = run_cmd(@cmd + params)
78
+ assert_match(/Generated .*metadata.*json/, result.out)
79
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
80
+ end
81
+
82
+ it 'fails on missing required params' do
83
+ params = [
84
+ '--boo-id=2'
85
+ ]
86
+
87
+ result = run_cmd(@cmd + params)
88
+ expected_error = "Could not export the repository:\n"
89
+
90
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
91
+ assert_equal(result.err[/#{expected_error}/], expected_error)
92
+ end
93
+
94
+ it 'fails on missing product name/id' do
95
+ params = ["--name=foo"]
96
+
97
+ result = run_cmd(@cmd + params)
98
+ expected_error = "At least one of options --product-id, --product is required"
99
+
100
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
101
+ assert_match(/#{expected_error}/, result.err)
102
+ end
103
+
104
+ it 'fails on missing repository' do
105
+ params = ["--product-id=2"]
106
+ result = run_cmd(@cmd + params)
107
+ expected_error = "--name is required."
108
+
109
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
110
+ assert_match(/#{expected_error}/, result.err)
111
+ end
112
+
113
+ it 'fails on missing product missing org' do
114
+ params = ["--product=lol", "--name=#{name}"]
115
+ result = run_cmd(@cmd + params)
116
+ expected_error = "At least one of options --organization-id,"\
117
+ " --organization, --organization-label is required"
118
+
119
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
120
+ assert_match(/#{expected_error}/, result.err)
121
+ end
122
+
123
+ it 'correctly resolves product_id and repository name' do
124
+ params = ["--product-id=#{product_id}",
125
+ "--name=#{name}",
126
+ "--async"]
127
+ expects_repository(repository_id, default_repository_options)
128
+
129
+ cvv_expect = api_expects(:repositories, :index) do |p|
130
+ assert_equal p['product_id'].to_s, product_id.to_s
131
+ assert_equal p["name"], name
132
+ end
133
+
134
+ cvv_expect.at_least_once.
135
+ returns(index_response([{'id' => repository_id}]))
136
+
137
+ ex = api_expects(:content_exports, :repository) do |p|
138
+ assert_equal p['id'], repository_id
139
+ end
140
+ ex.returns(response)
141
+ run_cmd(@cmd + params)
142
+ end
143
+
144
+ it 'correctly resolves chunk-size-gb' do
145
+ chunk_size = 1000
146
+ params = ["--id=#{repository_id}",
147
+ "--chunk-size-gb=#{chunk_size}",
148
+ "--organization-id=99"]
149
+
150
+ expects_repository(repository_id, default_repository_options)
151
+
152
+ ex = api_expects(:content_exports, :repository) do |p|
153
+ assert_equal p["chunk_size_gb"], chunk_size
154
+ end
155
+ ex.returns(response)
156
+
157
+ expect_foreman_task(task_id).at_least_once
158
+
159
+ HammerCLIKatello::ContentExportComplete::RepositoryCommand.
160
+ any_instance.
161
+ expects(:fetch_export_history).
162
+ returns(export_history)
163
+
164
+ result = run_cmd(@cmd + params)
165
+ assert_match(/Generated .*metadata.*json/, result.out)
166
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
167
+ end
168
+
169
+ it 'fails on invalid chunk-size-gb value' do
170
+ params = ["--id=#{repository_id}",
171
+ "--chunk-size-gb=0.5",
172
+ "--organization-id=99"]
173
+
174
+ result = run_cmd(@cmd + params)
175
+ assert_match(/Error: Option '--chunk-size-gb': Numeric value is required/, result.err)
176
+ assert_equal(HammerCLI::EX_USAGE, result.exit_code)
177
+ end
178
+
179
+ it 'Errors out on lazy repositories' do
180
+ params = ["--id=#{repository_id}"]
181
+ expects_repository(repository_id, "download_policy" => "on_demand", "id" => repository_id)
182
+
183
+ ex = api_expects(:content_exports, :repository)
184
+ ex.returns(response)
185
+
186
+ expect_foreman_task(task_id).at_least_once
187
+
188
+ HammerCLIKatello::ContentExportComplete::RepositoryCommand.
189
+ any_instance.
190
+ expects(:fetch_export_history).
191
+ returns(export_history)
192
+
193
+ HammerCLIKatello::ContentExportComplete::RepositoryCommand.
194
+ any_instance.
195
+ expects(:exit).with(HammerCLI::EX_SOFTWARE)
196
+
197
+ result = run_cmd(@cmd + params)
198
+ assert_match(/Unable to fully export this repository because/, result.out)
199
+ assert_match(/#{repository_id}/, result.out)
200
+ end
201
+
202
+ it 'should accept product and get the right repository' do
203
+ params = ["--product-id=#{product_id}",
204
+ "--name=#{name}"]
205
+ expect_repository_search(product_id.to_i, name, repository_id).at_least_once
206
+ repo_search = api_expects(:repositories, :index, 'Find a repository') do |p|
207
+ assert_equal p["product_id"].to_s, product_id.to_s
208
+ assert_equal p["name"], name
209
+ end
210
+ repo_search.returns(index_response([{'id' => repository_id}]))
211
+
212
+ expects_repository(repository_id, default_repository_options)
213
+ ex = api_expects(:content_exports, :repository)
214
+ ex.returns(response)
215
+
216
+ expect_foreman_task(task_id).at_least_once
217
+
218
+ HammerCLIKatello::ContentExportComplete::RepositoryCommand.
219
+ any_instance.
220
+ expects(:fetch_export_history).
221
+ returns(export_history)
222
+ result = run_cmd(@cmd + params)
223
+ assert_match(/Generated .*metadata.*json/, result.out)
224
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
225
+ end
226
+ end
@@ -2,6 +2,13 @@ require_relative '../search_helpers'
2
2
 
3
3
  module ContentExportHelpers
4
4
  include SearchHelpers
5
+ def expects_repository(repository_id, returns = {})
6
+ ex = api_expects(:repositories, :show, "Find Repo #{repository_id}") do |p|
7
+ assert_equal p[:id].to_s, repository_id.to_s
8
+ end
9
+ ex.returns(returns)
10
+ end
11
+
5
12
  def expects_repositories_in_library(organization_id, returns = [])
6
13
  expect_lenient_search(:repositories,
7
14
  params: {
@@ -0,0 +1,212 @@
1
+ require_relative '../../test_helper'
2
+ require 'hammer_cli_katello/content_export'
3
+ require_relative '../../product/product_helpers'
4
+ require_relative '../../repository/repository_helpers'
5
+ require_relative '../content_export_helpers'
6
+
7
+ describe 'content-export incremental version' do
8
+ include ForemanTaskHelpers
9
+ include ContentExportHelpers
10
+ include ProductHelpers
11
+ include RepositoryHelpers
12
+
13
+ before do
14
+ @cmd = %w(content-export incremental repository)
15
+ end
16
+
17
+ let(:task_id) { '5' }
18
+ let(:response) do
19
+ {
20
+ 'id' => task_id,
21
+ 'state' => 'planned',
22
+ 'output' => {
23
+ 'export_history_id' => 2
24
+ }
25
+ }
26
+ end
27
+
28
+ let(:export_history_id) { 1000 }
29
+
30
+ let(:export_history) do
31
+ {
32
+ "id": export_history_id,
33
+ "path": "/tmp",
34
+ "metadata": {}
35
+ }
36
+ end
37
+
38
+ let(:default_repository_options) do
39
+ {"download_policy" => "immediate", "id" => repository_id}
40
+ end
41
+
42
+ let(:product_id) { '77' }
43
+ let(:repository_id) { 100 }
44
+
45
+ let(:name) { 'great' }
46
+
47
+ it "performs export with required options and async" do
48
+ params = [
49
+ "--id=#{repository_id}",
50
+ '--async'
51
+ ]
52
+ expects_repository(repository_id, default_repository_options)
53
+
54
+ ex = api_expects(:content_export_incrementals, :repository)
55
+ ex.returns(response)
56
+
57
+ result = run_cmd(@cmd + params)
58
+
59
+ assert_equal("Repository is being exported in task #{task_id}.\n"\
60
+ + "Once the task completes the export metadata must be generated with the "\
61
+ + "command:\n hammer content-export generate-metadata --task-id #{task_id}\n", result.out)
62
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
63
+ end
64
+
65
+ it "performs export with required options" do
66
+ params = [
67
+ "--id=#{repository_id}"
68
+ ]
69
+
70
+ expects_repository(repository_id, default_repository_options)
71
+ ex = api_expects(:content_export_incrementals, :repository)
72
+ ex.returns(response)
73
+
74
+ expect_foreman_task(task_id).at_least_once
75
+
76
+ HammerCLIKatello::ContentExportIncremental::RepositoryCommand.
77
+ any_instance.
78
+ expects(:fetch_export_history).
79
+ returns(export_history)
80
+
81
+ result = run_cmd(@cmd + params)
82
+ assert_match(/Generated .*metadata.*json/, result.out)
83
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
84
+ end
85
+
86
+ it "performs export with history id" do
87
+ params = [
88
+ "--id=#{repository_id}",
89
+ "--from-history-id=#{export_history_id}"
90
+ ]
91
+ expects_repository(repository_id, default_repository_options)
92
+ api_expects(:content_export_incrementals, :repository)
93
+ .with_params('id' => repository_id,
94
+ 'from_history_id' => export_history_id)
95
+ .returns(response)
96
+
97
+ expect_foreman_task(task_id).at_least_once
98
+
99
+ HammerCLIKatello::ContentExportIncremental::RepositoryCommand.
100
+ any_instance.
101
+ expects(:fetch_export_history).
102
+ returns(export_history)
103
+
104
+ result = run_cmd(@cmd + params)
105
+ assert_match(/Generated .*metadata.*json/, result.out)
106
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
107
+ end
108
+
109
+ it 'fails on missing required params' do
110
+ params = [
111
+ '--boo-id=2'
112
+ ]
113
+
114
+ result = run_cmd(@cmd + params)
115
+ expected_error = "Could not export the repository:\n"
116
+
117
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
118
+ assert_equal(result.err[/#{expected_error}/], expected_error)
119
+ end
120
+
121
+ it 'correctly resolves product_id and repository name' do
122
+ params = ["--product-id=#{product_id}",
123
+ "--name=#{name}",
124
+ "--async"]
125
+ expects_repository(repository_id, default_repository_options)
126
+
127
+ cvv_expect = api_expects(:repositories, :index) do |p|
128
+ assert_equal p['product_id'].to_s, product_id.to_s
129
+ assert_equal p["name"], name
130
+ end
131
+
132
+ cvv_expect.at_least_once.
133
+ returns(index_response([{'id' => repository_id}]))
134
+
135
+ ex = api_expects(:content_export_incrementals, :repository) do |p|
136
+ assert_equal p['id'], repository_id
137
+ end
138
+ ex.returns(response)
139
+ run_cmd(@cmd + params)
140
+ end
141
+
142
+ it 'fails on missing product name/id' do
143
+ params = ["--name=foo"]
144
+ result = run_cmd(@cmd + params)
145
+ expected_error = "At least one of options --product-id, --product is required"
146
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
147
+ assert_match(/#{expected_error}/, result.err)
148
+ end
149
+
150
+ it 'fails on missing repository' do
151
+ params = ["--product-id=2"]
152
+ result = run_cmd(@cmd + params)
153
+ expected_error = "--name is required."
154
+
155
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
156
+ assert_match(/#{expected_error}/, result.err)
157
+ end
158
+
159
+ it 'fails on missing product missing org' do
160
+ params = ["--product=lol", "--name=#{name}"]
161
+ result = run_cmd(@cmd + params)
162
+ expected_error = "At least one of options --organization-id,"\
163
+ " --organization, --organization-label is required"
164
+
165
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
166
+ assert_match(/#{expected_error}/, result.err)
167
+ end
168
+
169
+ it 'correctly resolves product_id and repository name' do
170
+ params = ["--product-id=#{product_id}",
171
+ "--name=#{name}",
172
+ "--async"]
173
+ expects_repository(repository_id, default_repository_options)
174
+
175
+ cvv_expect = api_expects(:repositories, :index) do |p|
176
+ assert_equal p['product_id'].to_s, product_id.to_s
177
+ assert_equal p["name"], name
178
+ end
179
+
180
+ cvv_expect.at_least_once.
181
+ returns(index_response([{'id' => repository_id}]))
182
+
183
+ ex = api_expects(:content_export_incrementals, :repository) do |p|
184
+ assert_equal p['id'], repository_id
185
+ end
186
+ ex.returns(response)
187
+ run_cmd(@cmd + params)
188
+ end
189
+
190
+ it 'Errors out on lazy repositories' do
191
+ params = ["--id=#{repository_id}"]
192
+ expects_repository(repository_id, "download_policy" => "on_demand", "id" => repository_id)
193
+
194
+ ex = api_expects(:content_export_incrementals, :repository)
195
+ ex.returns(response)
196
+
197
+ expect_foreman_task(task_id).at_least_once
198
+
199
+ HammerCLIKatello::ContentExportIncremental::RepositoryCommand.
200
+ any_instance.
201
+ expects(:fetch_export_history).
202
+ returns(export_history)
203
+
204
+ HammerCLIKatello::ContentExportIncremental::RepositoryCommand.
205
+ any_instance.
206
+ expects(:exit).with(HammerCLI::EX_SOFTWARE)
207
+
208
+ result = run_cmd(@cmd + params)
209
+ assert_match(/Unable to fully export this repository because/, result.out)
210
+ assert_match(/#{repository_id}/, result.out)
211
+ end
212
+ end
@@ -12,10 +12,10 @@ module HammerCLIKatello
12
12
  it 'resolves ID from name and repo id' do
13
13
  api_expects(:module_streams, :index)
14
14
  .with_params(search: "name = \"duck\"", name: "duck", repository_id: "1")
15
- .returns(index_response([{'id' => 1}]))
15
+ .returns(index_response([{'id' => "1"}]))
16
16
 
17
17
  api_expects(:module_streams, :show)
18
- .with_params(repository_id: 1, id: 1)
18
+ .with_params(repository_id: 1, id: "1")
19
19
 
20
20
  run_cmd(%w(module-stream info --name duck --repository-id 1))
21
21
  end
@@ -16,12 +16,14 @@ describe HammerCLIKatello::Organization::ConfigureCdnCommand do
16
16
  username = "foo"
17
17
  url = "https://goo.com"
18
18
  upstream_label = "GreatOrg"
19
+ type = 'network_sync'
19
20
  params = ["--label=#{org_label}",
20
21
  "--url=#{url}",
21
22
  "--username=#{username}",
22
23
  "--upstream-organization-label=#{upstream_label}",
23
24
  "--password=#{password}",
24
- "--ssl-ca-credential-id=#{ssl_cred_id}"
25
+ "--ssl-ca-credential-id=#{ssl_cred_id}",
26
+ "--type=#{type}"
25
27
  ]
26
28
  expect_organization_search(org_label, org_id, field: 'label')
27
29
 
@@ -31,7 +33,8 @@ describe HammerCLIKatello::Organization::ConfigureCdnCommand do
31
33
  par['url'] == url &&
32
34
  par['password'] == password &&
33
35
  par['ssl_ca_credential_id'].to_s == ssl_cred_id &&
34
- par['upstream_organization_label'] == upstream_label
36
+ par['upstream_organization_label'] == upstream_label &&
37
+ par['type'] == type
35
38
  end
36
39
 
37
40
  assert_equal(