hammer_cli_katello 0.24.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hammer_cli_katello.rb +24 -15
  3. data/lib/hammer_cli_katello/activation_key.rb +5 -5
  4. data/lib/hammer_cli_katello/capsule.rb +2 -3
  5. data/lib/hammer_cli_katello/command_extensions/lifecycle_environment.rb +10 -7
  6. data/lib/hammer_cli_katello/command_extensions/lifecycle_environments.rb +11 -8
  7. data/lib/hammer_cli_katello/content_credential.rb +20 -19
  8. data/lib/hammer_cli_katello/content_export.rb +73 -0
  9. data/lib/hammer_cli_katello/content_export_complete.rb +25 -0
  10. data/lib/hammer_cli_katello/content_export_helper.rb +181 -0
  11. data/lib/hammer_cli_katello/content_export_incremental.rb +25 -0
  12. data/lib/hammer_cli_katello/content_import.rb +78 -0
  13. data/lib/hammer_cli_katello/content_view.rb +19 -32
  14. data/lib/hammer_cli_katello/content_view_version.rb +4 -290
  15. data/lib/hammer_cli_katello/deb_package.rb +3 -3
  16. data/lib/hammer_cli_katello/docker.rb +13 -0
  17. data/lib/hammer_cli_katello/docker_manifest.rb +53 -0
  18. data/lib/hammer_cli_katello/docker_tag.rb +40 -0
  19. data/lib/hammer_cli_katello/erratum.rb +1 -1
  20. data/lib/hammer_cli_katello/erratum_info_command.rb +1 -1
  21. data/lib/hammer_cli_katello/file.rb +3 -3
  22. data/lib/hammer_cli_katello/filter.rb +2 -2
  23. data/lib/hammer_cli_katello/foreman_search_options_creators.rb +0 -12
  24. data/lib/hammer_cli_katello/host_collection.rb +2 -2
  25. data/lib/hammer_cli_katello/host_deb.rb +1 -1
  26. data/lib/hammer_cli_katello/host_errata.rb +1 -1
  27. data/lib/hammer_cli_katello/host_extensions.rb +5 -5
  28. data/lib/hammer_cli_katello/host_package.rb +1 -1
  29. data/lib/hammer_cli_katello/hostgroup_extensions.rb +4 -4
  30. data/lib/hammer_cli_katello/id_resolver.rb +8 -7
  31. data/lib/hammer_cli_katello/lifecycle_environment.rb +2 -2
  32. data/lib/hammer_cli_katello/module_stream.rb +8 -8
  33. data/lib/hammer_cli_katello/organization.rb +10 -0
  34. data/lib/hammer_cli_katello/organization_options.rb +8 -6
  35. data/lib/hammer_cli_katello/ostree_branch.rb +2 -2
  36. data/lib/hammer_cli_katello/package.rb +5 -5
  37. data/lib/hammer_cli_katello/package_group.rb +4 -4
  38. data/lib/hammer_cli_katello/ping.rb +13 -19
  39. data/lib/hammer_cli_katello/product.rb +3 -3
  40. data/lib/hammer_cli_katello/product_content.rb +2 -2
  41. data/lib/hammer_cli_katello/repository.rb +27 -37
  42. data/lib/hammer_cli_katello/repository_set.rb +4 -4
  43. data/lib/hammer_cli_katello/simple_content_access.rb +42 -0
  44. data/lib/hammer_cli_katello/srpm.rb +2 -2
  45. data/lib/hammer_cli_katello/subscription.rb +2 -3
  46. data/lib/hammer_cli_katello/sync_plan.rb +2 -2
  47. data/lib/hammer_cli_katello/version.rb +1 -1
  48. data/locale/hammer-cli-katello.pot +0 -25
  49. data/test/data/3.19/foreman_api.json +1 -0
  50. data/test/data/4.0/foreman_api.json +1 -0
  51. data/test/data/4.1/foreman_api.json +1 -0
  52. data/test/functional/activation_key/subscriptions_test.rb +5 -2
  53. data/test/functional/capsule/content/info_test.rb +1 -2
  54. data/test/functional/content_credentials/create_test.rb +32 -0
  55. data/test/functional/{repository → content_credentials}/data/test_cert.json +0 -0
  56. data/test/functional/content_credentials/list_test.rb +6 -8
  57. data/test/functional/content_export/complete/library_test.rb +155 -0
  58. data/test/functional/content_export/complete/version_test.rb +217 -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/content_view_helpers.rb +3 -1
  69. data/test/functional/content_view/list_test.rb +0 -2
  70. data/test/functional/content_view/publish_test.rb +0 -21
  71. data/test/functional/content_view/version/promote_test.rb +1 -2
  72. data/test/functional/content_view/version/republish_repositories_test.rb +1 -2
  73. data/test/functional/host/errata/apply_test.rb +0 -2
  74. data/test/functional/host/errata/recalculate_test.rb +0 -2
  75. data/test/functional/lifecycle_environment/lifecycle_environment_helpers.rb +1 -1
  76. data/test/functional/organization/info_test.rb +22 -0
  77. data/test/functional/ping_test.rb +52 -15
  78. data/test/functional/repository/create_test.rb +0 -30
  79. data/test/functional/repository/info_test.rb +4 -4
  80. data/test/functional/repository/list_test.rb +0 -2
  81. data/test/functional/search_helpers.rb +11 -0
  82. data/test/functional/simple_content_access/disable_test.rb +48 -0
  83. data/test/functional/simple_content_access/enable_test.rb +46 -0
  84. data/test/test_helper.rb +1 -1
  85. metadata +50 -56
  86. data/lib/hammer_cli_katello/content_view_puppet_module.rb +0 -60
  87. data/lib/hammer_cli_katello/cv_import_export_helper.rb +0 -166
  88. data/lib/hammer_cli_katello/gpg_key.rb +0 -67
  89. data/lib/hammer_cli_katello/puppet_module.rb +0 -59
  90. data/test/functional/content_view/puppet_module/add_test.rb +0 -24
  91. data/test/functional/content_view/puppet_module/remove_test.rb +0 -54
  92. data/test/functional/content_view/version/default_export_test.rb +0 -40
  93. data/test/functional/content_view/version/export_histories_test.rb +0 -34
  94. data/test/functional/content_view/version/export_test.rb +0 -136
  95. data/test/functional/content_view/version/import_test.rb +0 -318
  96. data/test/functional/gpg_test.rb +0 -39
  97. data/test/functional/repository/data/test_ca.json +0 -43
  98. data/test/functional/repository/data/test_key.json +0 -43
@@ -0,0 +1,26 @@
1
+ require_relative '../search_helpers'
2
+
3
+ module ContentExportHelpers
4
+ include SearchHelpers
5
+ def expects_repositories_in_library(organization_id, returns = [])
6
+ expect_lenient_search(:repositories,
7
+ params: {
8
+ organization_id: organization_id,
9
+ library: true,
10
+ search: "download_policy != immediate",
11
+ content_type: 'yum'
12
+ },
13
+ returns: returns)
14
+ end
15
+
16
+ def expects_repositories_in_version(version_id, returns = [])
17
+ expect_lenient_search(:repositories,
18
+ params: {
19
+ content_view_version_id: version_id,
20
+ library: true,
21
+ search: "download_policy != immediate",
22
+ content_type: 'yum'
23
+ },
24
+ returns: returns)
25
+ end
26
+ end
@@ -0,0 +1,64 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require 'hammer_cli_katello/content_export'
3
+
4
+ describe('content-export generate-metadata') do
5
+ include ForemanTaskHelpers
6
+
7
+ before do
8
+ @cmd = %w(content-export generate-metadata)
9
+ @params = []
10
+ @export_history_id = 100
11
+ @export_history = {
12
+ 'id' => @export_history_id,
13
+ 'path' => '/tmp',
14
+ 'metadata' => {}
15
+ }
16
+ @task_id = SecureRandom.uuid
17
+ end
18
+
19
+ let(:cmd) { @cmd + @params }
20
+ let(:result) { run_cmd(cmd) }
21
+
22
+ describe('given an export history id') do
23
+ it('loads export history by id') do
24
+ @params = ["--id=#{@export_history_id}"]
25
+
26
+ HammerCLIKatello::ContentExport::GenerateMetadataCommand.
27
+ any_instance.
28
+ expects(:fetch_export_history).
29
+ returns(@export_history)
30
+
31
+ expected = success_result("Generated /tmp/metadata.json\n")
32
+
33
+ assert_cmd(expected, result)
34
+ end
35
+ end
36
+
37
+ describe('given a task id') do
38
+ it('loads export history based on the task') do
39
+ @params = ["--task-id=#{@task_id}"]
40
+
41
+ HammerCLIKatello::ContentExport::GenerateMetadataCommand.
42
+ any_instance.
43
+ expects(:reload_task).
44
+ returns('id' => 'taskid')
45
+
46
+ HammerCLIKatello::ContentExport::GenerateMetadataCommand.
47
+ any_instance.
48
+ expects(:fetch_export_history).
49
+ returns(@export_history)
50
+
51
+ expected = success_result("Generated /tmp/metadata.json\n")
52
+
53
+ assert_cmd(expected, result)
54
+ end
55
+ end
56
+
57
+ describe('given no arguments') do
58
+ it('tells the user to verify the arguments') do
59
+ expected = "Error: No export history was found. Verify the value given for "\
60
+ + "--task-id or --id\n"
61
+ assert_equal(expected, result.err)
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,172 @@
1
+ require File.join(File.dirname(__FILE__), '../../../test_helper')
2
+ require_relative '../../organization/organization_helpers'
3
+ require_relative '../content_export_helpers'
4
+ require 'hammer_cli_katello/content_export'
5
+
6
+ describe 'content-export incremental library' do
7
+ include ForemanTaskHelpers
8
+ include OrganizationHelpers
9
+ include ContentExportHelpers
10
+
11
+ before do
12
+ @cmd = %w(content-export incremental library)
13
+ end
14
+
15
+ let(:task_id) { '5' }
16
+ let(:response) do
17
+ {
18
+ 'id' => task_id,
19
+ 'state' => 'planned',
20
+ 'output' => {
21
+ 'export_history_id' => 2
22
+ }
23
+ }
24
+ end
25
+
26
+ let(:export_history_id) { 1000 }
27
+
28
+ let(:export_history) do
29
+ {
30
+ "id": export_history_id,
31
+ "path": "/tmp",
32
+ "metadata": {}
33
+ }
34
+ end
35
+
36
+ let(:organization_id) { 77 }
37
+ let(:organization_name) { 'Foo' }
38
+ let(:destination_server) { "dream.example.com" }
39
+
40
+ it "performs export with required options and async" do
41
+ params = [
42
+ "--organization-id=#{organization_id}",
43
+ '--destination-server=foo',
44
+ '--async'
45
+ ]
46
+ expects_repositories_in_library(organization_id)
47
+ ex = api_expects(:content_export_incrementals, :library)
48
+ ex.returns(response)
49
+
50
+ result = run_cmd(@cmd + params)
51
+
52
+ assert_equal("Library environment is being exported in task #{task_id}.\n"\
53
+ + "Once the task completes the export metadata must be generated with the "\
54
+ + "command:\n hammer content-export generate-metadata --task-id #{task_id}\n", result.out)
55
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
56
+ end
57
+
58
+ it "performs export with required options" do
59
+ params = [
60
+ "--organization-id=#{organization_id}"
61
+ ]
62
+ expects_repositories_in_library(organization_id)
63
+ ex = api_expects(:content_export_incrementals, :library)
64
+ ex.returns(response)
65
+
66
+ expect_foreman_task(task_id).at_least_once
67
+
68
+ HammerCLIKatello::ContentExportIncremental::LibraryCommand.
69
+ any_instance.
70
+ expects(:fetch_export_history).
71
+ returns(export_history)
72
+
73
+ result = run_cmd(@cmd + params)
74
+ assert_match(/Generated .*metadata.*json/, result.out)
75
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
76
+ end
77
+
78
+ it "performs export with history id" do
79
+ params = [
80
+ "--organization-id=#{organization_id}",
81
+ "--destination-server=#{destination_server}",
82
+ "--from-history-id=#{export_history_id}"
83
+ ]
84
+ expects_repositories_in_library(organization_id)
85
+ api_expects(:content_export_incrementals, :library)
86
+ .with_params('organization_id' => organization_id,
87
+ 'destination_server' => destination_server,
88
+ 'from_history_id' => export_history_id)
89
+ .returns(response)
90
+
91
+ expect_foreman_task(task_id).at_least_once
92
+
93
+ HammerCLIKatello::ContentExportIncremental::LibraryCommand.
94
+ any_instance.
95
+ expects(:fetch_export_history).
96
+ returns(export_history)
97
+
98
+ result = run_cmd(@cmd + params)
99
+ assert_match(/Generated .*metadata.*json/, result.out)
100
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
101
+ end
102
+
103
+ it 'fails on missing required params' do
104
+ params = [
105
+ '--id=2'
106
+ ]
107
+
108
+ result = run_cmd(@cmd + params)
109
+ expected_error = "Could not export the library:\n"
110
+
111
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
112
+ assert_equal(result.err[/#{expected_error}/], expected_error)
113
+ end
114
+
115
+ it 'correctly resolves organization id from name' do
116
+ params = ["--organization=#{organization_name}",
117
+ "--async"]
118
+ expects_repositories_in_library(organization_id)
119
+ expect_organization_search(organization_name, organization_id)
120
+
121
+ ex = api_expects(:content_export_incrementals, :library) do |p|
122
+ assert_equal p['organization_id'].to_s, organization_id.to_s
123
+ end
124
+ ex.returns(response)
125
+
126
+ run_cmd(@cmd + params)
127
+ end
128
+
129
+ it 'warns of lazy repositories' do
130
+ params = ["--organization-id=#{organization_id}"]
131
+ expects_repositories_in_library(organization_id, [{id: 200}])
132
+
133
+ ex = api_expects(:content_export_incrementals, :library)
134
+ ex.returns(response)
135
+
136
+ expect_foreman_task(task_id).at_least_once
137
+
138
+ HammerCLIKatello::ContentExportIncremental::LibraryCommand.
139
+ any_instance.
140
+ expects(:fetch_export_history).
141
+ returns(export_history)
142
+
143
+ result = run_cmd(@cmd + params)
144
+ assert_match(/Unable to fully export this organization's library/, result.out)
145
+ assert_match(/200/, result.out)
146
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
147
+ end
148
+
149
+ it 'Errors out on lazy repositories if --fail-on-missing-content' do
150
+ params = ["--organization-id=#{organization_id}",
151
+ "--fail-on-missing-content"]
152
+ expects_repositories_in_library(organization_id, [{id: 200}])
153
+
154
+ ex = api_expects(:content_export_incrementals, :library)
155
+ ex.returns(response)
156
+
157
+ expect_foreman_task(task_id).at_least_once
158
+
159
+ HammerCLIKatello::ContentExportIncremental::LibraryCommand.
160
+ any_instance.
161
+ expects(:fetch_export_history).
162
+ returns(export_history)
163
+
164
+ HammerCLIKatello::ContentExportIncremental::LibraryCommand.
165
+ any_instance.
166
+ expects(:exit).with(HammerCLI::EX_SOFTWARE)
167
+
168
+ result = run_cmd(@cmd + params)
169
+ assert_match(/Unable to fully export this organization's library/, result.out)
170
+ assert_match(/200/, result.out)
171
+ end
172
+ end
@@ -0,0 +1,268 @@
1
+ require_relative '../../test_helper'
2
+ require 'hammer_cli_katello/content_export'
3
+ require_relative '../../lifecycle_environment/lifecycle_environment_helpers'
4
+ require_relative '../../content_view/content_view_helpers'
5
+ require_relative '../content_export_helpers'
6
+
7
+ describe 'content-export incremental version' do
8
+ include ForemanTaskHelpers
9
+ include ContentExportHelpers
10
+ include ContentViewHelpers
11
+ include LifecycleEnvironmentHelpers
12
+
13
+ before do
14
+ @cmd = %w(content-export incremental version)
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(:content_view_id) { '77' }
39
+ let(:content_view_version_id) { 100 }
40
+
41
+ let(:version) { '10.0' }
42
+ let(:destination_server) { "dream.example.com" }
43
+
44
+ it "performs export with required options and async" do
45
+ params = [
46
+ "--id=#{content_view_version_id}",
47
+ '--destination-server=foo',
48
+ '--async'
49
+ ]
50
+ expects_repositories_in_version(content_view_version_id)
51
+
52
+ ex = api_expects(:content_export_incrementals, :version)
53
+ ex.returns(response)
54
+
55
+ result = run_cmd(@cmd + params)
56
+
57
+ assert_equal("Content view version is being exported in task #{task_id}.\n"\
58
+ + "Once the task completes the export metadata must be generated with the "\
59
+ + "command:\n hammer content-export generate-metadata --task-id #{task_id}\n", result.out)
60
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
61
+ end
62
+
63
+ it "performs export with required options" do
64
+ params = [
65
+ "--id=#{content_view_version_id}",
66
+ '--destination-server=foo'
67
+ ]
68
+
69
+ expects_repositories_in_version(content_view_version_id)
70
+ ex = api_expects(:content_export_incrementals, :version)
71
+ ex.returns(response)
72
+
73
+ expect_foreman_task(task_id).at_least_once
74
+
75
+ HammerCLIKatello::ContentExportIncremental::VersionCommand.
76
+ any_instance.
77
+ expects(:fetch_export_history).
78
+ returns(export_history)
79
+
80
+ result = run_cmd(@cmd + params)
81
+ assert_match(/Generated .*metadata.*json/, result.out)
82
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
83
+ end
84
+
85
+ it "performs export with history id" do
86
+ params = [
87
+ "--id=#{content_view_version_id}",
88
+ "--destination-server=#{destination_server}",
89
+ "--from-history-id=#{export_history_id}"
90
+ ]
91
+ expects_repositories_in_version(content_view_version_id)
92
+ api_expects(:content_export_incrementals, :version)
93
+ .with_params('id' => content_view_version_id,
94
+ 'destination_server' => destination_server,
95
+ 'from_history_id' => export_history_id)
96
+ .returns(response)
97
+
98
+ expect_foreman_task(task_id).at_least_once
99
+
100
+ HammerCLIKatello::ContentExportIncremental::VersionCommand.
101
+ any_instance.
102
+ expects(:fetch_export_history).
103
+ returns(export_history)
104
+
105
+ result = run_cmd(@cmd + params)
106
+ assert_match(/Generated .*metadata.*json/, result.out)
107
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
108
+ end
109
+
110
+ it 'fails on missing required params' do
111
+ params = [
112
+ '--boo-id=2'
113
+ ]
114
+
115
+ result = run_cmd(@cmd + params)
116
+ expected_error = "Could not export the content view version:\n"
117
+
118
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
119
+ assert_equal(result.err[/#{expected_error}/], expected_error)
120
+ end
121
+
122
+ it 'correctly resolves content-view-id and content view version number' do
123
+ params = ["--content-view-id=#{content_view_id}",
124
+ "--version=#{version}",
125
+ "--destination-server=#{destination_server}",
126
+ "--async"]
127
+ expects_repositories_in_version(content_view_version_id)
128
+ cvv_expect = api_expects(:content_view_versions, :index) do |p|
129
+ assert_equal p['content_view_id'].to_s, content_view_id.to_s
130
+ assert_equal p["version"], version
131
+ end
132
+
133
+ cvv_expect.at_least_once.
134
+ returns(index_response([{'id' => content_view_version_id}]))
135
+
136
+ ex = api_expects(:content_export_incrementals, :version) do |p|
137
+ assert_equal p['id'], content_view_version_id
138
+ assert_equal p["destination_server"], destination_server
139
+ end
140
+ ex.returns(response)
141
+
142
+ run_cmd(@cmd + params)
143
+ end
144
+
145
+ it 'fails on missing content-view name/id' do
146
+ params = []
147
+
148
+ result = run_cmd(@cmd + params)
149
+ expected_error = " At least one of options --id, --content-view, --content-view-id is required"
150
+
151
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
152
+ assert_match(/#{expected_error}/, result.err)
153
+ end
154
+
155
+ it 'fails on missing content-view version' do
156
+ params = ["--content-view-id=2"]
157
+ result = run_cmd(@cmd + params)
158
+
159
+ expected_error = "--version, --lifecycle-environment-id, --lifecycle-environment is required."
160
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
161
+ assert_match(/#{expected_error}/, result.err)
162
+ end
163
+
164
+ it 'fails on missing content-view missing org' do
165
+ params = ["--content-view=lol", "--version=4.0"]
166
+ result = run_cmd(@cmd + params)
167
+ expected_error = "At least one of options --organization-id, "\
168
+ "--organization, --organization-label is required."
169
+
170
+ assert_equal(result.exit_code, HammerCLI::EX_USAGE)
171
+ assert_match(/#{expected_error}/, result.err)
172
+ end
173
+
174
+ it 'correctly resolves content-view-id and content view version number' do
175
+ params = ["--content-view-id=#{content_view_id}",
176
+ "--version=#{version}",
177
+ "--destination-server=#{destination_server}",
178
+ "--async"]
179
+
180
+ cvv_expect = api_expects(:content_view_versions, :index) do |p|
181
+ assert_equal p['content_view_id'].to_s, content_view_id.to_s
182
+ assert_equal p["version"], version
183
+ end
184
+
185
+ cvv_expect.at_least_once.
186
+ returns(index_response([{'id' => content_view_version_id}]))
187
+
188
+ api_expects(:content_export_incrementals, :version)
189
+ .with_params('id' => content_view_version_id)
190
+ .returns(response)
191
+
192
+ expects_repositories_in_version(content_view_version_id)
193
+ run_cmd(@cmd + params)
194
+ end
195
+
196
+ it 'warns of lazy repositories' do
197
+ params = ["--id=#{content_view_version_id}"]
198
+ expects_repositories_in_version(content_view_version_id, [{id: 200}])
199
+
200
+ api_expects(:content_export_incrementals, :version)
201
+ .with_params('id' => content_view_version_id)
202
+ .returns(response)
203
+
204
+ expect_foreman_task(task_id).at_least_once
205
+
206
+ HammerCLIKatello::ContentExportIncremental::VersionCommand.
207
+ any_instance.
208
+ expects(:fetch_export_history).
209
+ returns(export_history)
210
+
211
+ result = run_cmd(@cmd + params)
212
+ assert_match(/Unable to fully export this version because/, result.out)
213
+ assert_match(/200/, result.out)
214
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
215
+ end
216
+
217
+ it 'Errors out on lazy repositories if --fail-on-missing-content' do
218
+ params = ["--id=#{content_view_version_id}",
219
+ "--fail-on-missing-content"]
220
+ expects_repositories_in_version(content_view_version_id, [{id: 200}])
221
+
222
+ ex = api_expects(:content_export_incrementals, :version)
223
+ ex.returns(response)
224
+
225
+ expect_foreman_task(task_id).at_least_once
226
+
227
+ HammerCLIKatello::ContentExportIncremental::VersionCommand.
228
+ any_instance.
229
+ expects(:fetch_export_history).
230
+ returns(export_history)
231
+
232
+ HammerCLIKatello::ContentExportIncremental::VersionCommand.
233
+ any_instance.
234
+ expects(:exit).with(HammerCLI::EX_SOFTWARE)
235
+
236
+ result = run_cmd(@cmd + params)
237
+ assert_match(/Unable to fully export this version because/, result.out)
238
+ assert_match(/200/, result.out)
239
+ end
240
+
241
+ it 'should accept content view and lifecycle environment and get the right version' do
242
+ env = "foo"
243
+ org_id = '100'
244
+ env_id = '223'
245
+ params = ["--content-view-id=#{content_view_id}",
246
+ "--lifecycle-environment=#{env}",
247
+ "--organization-id=#{org_id}"]
248
+ expect_lifecycle_environment_search(org_id, env, env_id)
249
+ expect_content_view_version_search({'environment_id' => env_id,
250
+ 'content_view_id' => content_view_id},
251
+ 'id' => content_view_version_id).at_least_once
252
+
253
+ expects_repositories_in_version(content_view_version_id)
254
+ ex = api_expects(:content_export_incrementals, :version)
255
+ ex.returns(response)
256
+
257
+ expect_foreman_task(task_id).at_least_once
258
+
259
+ HammerCLIKatello::ContentExportIncremental::VersionCommand.
260
+ any_instance.
261
+ expects(:fetch_export_history).
262
+ returns(export_history)
263
+
264
+ result = run_cmd(@cmd + params)
265
+ assert_match(/Generated .*metadata.*json/, result.out)
266
+ assert_equal(HammerCLI::EX_OK, result.exit_code)
267
+ end
268
+ end