hammer_cli_katello 1.4.1 → 1.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +5 -5
  2. data/lib/hammer_cli_katello/acs.rb +79 -0
  3. data/lib/hammer_cli_katello/activation_key.rb +8 -2
  4. data/lib/hammer_cli_katello/content_export_complete.rb +8 -0
  5. data/lib/hammer_cli_katello/content_export_helper.rb +55 -3
  6. data/lib/hammer_cli_katello/content_export_incremental.rb +8 -0
  7. data/lib/hammer_cli_katello/content_import.rb +9 -0
  8. data/lib/hammer_cli_katello/host_collection.rb +2 -0
  9. data/lib/hammer_cli_katello/id_resolver.rb +3 -2
  10. data/lib/hammer_cli_katello/organization.rb +15 -0
  11. data/lib/hammer_cli_katello/repository.rb +40 -3
  12. data/lib/hammer_cli_katello/version.rb +1 -1
  13. data/lib/hammer_cli_katello.rb +5 -0
  14. data/test/data/4.4/foreman_api.json +1 -1
  15. data/test/data/4.5/foreman_api.json +1 -0
  16. data/test/data/4.6/foreman_api.json +1 -0
  17. data/test/functional/acs/create_test.rb +27 -0
  18. data/test/functional/acs/delete_test.rb +13 -0
  19. data/test/functional/acs/info_test.rb +55 -0
  20. data/test/functional/acs/list_test.rb +62 -0
  21. data/test/functional/acs/update_test.rb +23 -0
  22. data/test/functional/content_export/complete/repository_test.rb +226 -0
  23. data/test/functional/content_export/content_export_helpers.rb +7 -0
  24. data/test/functional/content_export/incremental/repository_test.rb +212 -0
  25. data/test/functional/module_stream/info_test.rb +2 -2
  26. data/test/functional/organization/cdn_configuration_test.rb +1 -1
  27. data/test/functional/organization/info_test.rb +8 -2
  28. data/test/functional/repository/info_test.rb +4 -10
  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 +45 -23
@@ -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,7 +16,7 @@ describe HammerCLIKatello::Organization::ConfigureCdnCommand do
16
16
  username = "foo"
17
17
  url = "https://goo.com"
18
18
  upstream_label = "GreatOrg"
19
- type = 'upstream_server'
19
+ type = 'network_sync'
20
20
  params = ["--label=#{org_label}",
21
21
  "--url=#{url}",
22
22
  "--username=#{username}",
@@ -7,6 +7,10 @@ describe HammerCLIKatello::Organization::InfoCommand do
7
7
  @cmd = %w(organization info)
8
8
  end
9
9
 
10
+ let(:cdn_configuration) do
11
+ { "type" => 'network_sync' }
12
+ end
13
+
10
14
  it "includes simple content access attributes" do
11
15
  org_id = 2
12
16
  params = ["--id=#{org_id}"]
@@ -14,7 +18,8 @@ describe HammerCLIKatello::Organization::InfoCommand do
14
18
 
15
19
  api_expects(:organizations, :show)
16
20
  .with_params('id' => org_id.to_s)
17
- .returns("simple_content_access" => true, "id" => org_id)
21
+ .returns("simple_content_access" => true, "id" => org_id,
22
+ "cdn_configuration" => cdn_configuration)
18
23
  result = run_cmd(@cmd + params)
19
24
  expected = success_result(FieldMatcher.new('Simple Content Access', 'Enabled'))
20
25
  assert_cmd(expected, result)
@@ -26,7 +31,8 @@ describe HammerCLIKatello::Organization::InfoCommand do
26
31
  api_expects(:organizations, :index).returns(index_response([{'id' => org_id}]))
27
32
 
28
33
  cdn_configuration = {
29
- "url" => "https://cdn.redhat.com"
34
+ "url" => "https://cdn.redhat.com",
35
+ "type" => "redhat_cdn"
30
36
  }
31
37
 
32
38
  api_expects(:organizations, :show)