hammer_cli_katello 0.0.24 → 0.0.25
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.
- checksums.yaml +4 -4
- data/lib/hammer_cli_katello.rb +1 -0
- data/lib/hammer_cli_katello/activation_key.rb +8 -6
- data/lib/hammer_cli_katello/capsule.rb +2 -21
- data/lib/hammer_cli_katello/commands.rb +2 -2
- data/lib/hammer_cli_katello/content_host.rb +3 -49
- data/lib/hammer_cli_katello/content_view.rb +19 -4
- data/lib/hammer_cli_katello/content_view_puppet_module.rb +8 -0
- data/lib/hammer_cli_katello/content_view_version.rb +69 -20
- data/lib/hammer_cli_katello/host.rb +4 -0
- data/lib/hammer_cli_katello/host_collection.rb +3 -22
- data/lib/hammer_cli_katello/host_errata.rb +1 -1
- data/lib/hammer_cli_katello/host_subscription.rb +31 -0
- data/lib/hammer_cli_katello/id_resolver.rb +45 -65
- data/lib/hammer_cli_katello/katello_environment_name_resolvable.rb +33 -0
- data/lib/hammer_cli_katello/lifecycle_environment_name_resolvable.rb +1 -13
- data/lib/hammer_cli_katello/ping.rb +4 -0
- data/lib/hammer_cli_katello/repository.rb +10 -8
- data/lib/hammer_cli_katello/search_options_creators.rb +70 -0
- data/lib/hammer_cli_katello/version.rb +1 -1
- data/test/data/3.0/foreman_api.json +1 -0
- data/test/functional/activaton_key/list_test.rb +69 -0
- data/test/functional/content_view/content_view_helpers.rb +10 -0
- data/test/functional/content_view/create_test.rb +119 -0
- data/test/functional/content_view/list_test.rb +67 -0
- data/test/functional/content_view/version/incremental_update_test.rb +91 -0
- data/test/functional/host/errata/apply_test.rb +46 -0
- data/test/functional/host/host_helpers.rb +10 -0
- data/test/functional/host/subscription/register_test.rb +53 -0
- data/test/functional/host/subscription/unregister_test.rb +37 -0
- data/test/functional/lifecycle_environment/lifecycle_environment_helpers.rb +17 -0
- data/test/functional/organization/organization_helpers.rb +10 -0
- data/test/functional/ping_test.rb +19 -0
- data/test/functional/product/product_helpers.rb +8 -0
- data/test/functional/repository/info_test.rb +46 -0
- data/test/functional/repository/list_test.rb +69 -0
- data/test/functional/repository/repository_helpers.rb +9 -0
- data/test/functional/repository/synchronize_test.rb +57 -0
- data/test/functional/repository/upload_test.rb +86 -0
- data/test/task_helper.rb +7 -0
- data/test/test_helper.rb +16 -3
- data/test/unit/id_resolver_test.rb +32 -0
- data/test/unit/search_options_creators_test.rb +107 -0
- metadata +53 -3
@@ -0,0 +1,10 @@
|
|
1
|
+
module ContentViewHelpers
|
2
|
+
|
3
|
+
def expect_content_view_search(org_id, name, id)
|
4
|
+
ex = api_expects(:content_views, :index, 'Find the content view') do |par|
|
5
|
+
par['name'] == name && par['organization_id'] == org_id
|
6
|
+
end
|
7
|
+
ex.returns(index_response([{'id' => id}]))
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
|
3
|
+
# Workaround for issue #14289
|
4
|
+
require 'hammer_cli_katello/content_view_puppet_module'
|
5
|
+
|
6
|
+
describe 'content-view create' do
|
7
|
+
before do
|
8
|
+
@cmd = %w(content-view create)
|
9
|
+
@base_params = ["--organization-id=#{org_id}", "--name=#{name}"]
|
10
|
+
end
|
11
|
+
let(:error_heading) { "Could not create the content view" }
|
12
|
+
let(:name) { 'test-cv' }
|
13
|
+
let(:org_id) { 1 }
|
14
|
+
let(:product) do
|
15
|
+
{ 'name' => 'product-1', 'id' => 1 }
|
16
|
+
end
|
17
|
+
let(:repositories) do
|
18
|
+
[
|
19
|
+
{'name' => 'repo-1', 'id' => '1'},
|
20
|
+
{'name' => 'repo-2', 'id' => '2'},
|
21
|
+
{'name' => 'repo-3', 'id' => '3'}
|
22
|
+
]
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'creates the content view with repositories specified by ids' do
|
26
|
+
wanted = repositories.take(2)
|
27
|
+
ids = wanted.map { |repo| repo['id'] }
|
28
|
+
params = %W(--repository-ids=#{ids.join(',')})
|
29
|
+
|
30
|
+
api_expects(:content_views, :create, 'Create content view') do |par|
|
31
|
+
par['name'] == name &&
|
32
|
+
par['repository_ids'] == ids &&
|
33
|
+
par['organization_id'] == org_id
|
34
|
+
end
|
35
|
+
|
36
|
+
expected_result = success_result("Content view created\n")
|
37
|
+
result = run_cmd(@cmd + @base_params + params)
|
38
|
+
assert_cmd(expected_result, result)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'create the content view with repositories specified by product id and names' do
|
42
|
+
wanted = repositories.take(2)
|
43
|
+
ids = wanted.map { |repo| repo['id'] }
|
44
|
+
names = wanted.map { |repo| repo['name'] }
|
45
|
+
params = %W(--product-id=#{product['id']} --repositories=#{names.join(',')})
|
46
|
+
|
47
|
+
api_repositories = api_expects(:repositories, :index,
|
48
|
+
'Find repositories belonging to product') do |par|
|
49
|
+
par['product_id'] == product['id'] && par['organization_id'] == org_id
|
50
|
+
end
|
51
|
+
api_repositories.returns(repositories)
|
52
|
+
|
53
|
+
api_expects(:content_views, :create, 'Create content view') do |par|
|
54
|
+
par['organization_id'] == org_id &&
|
55
|
+
par['name'] == name &&
|
56
|
+
par['repository_ids'] == ids
|
57
|
+
end
|
58
|
+
|
59
|
+
expected_result = success_result("Content view created\n")
|
60
|
+
result = run_cmd(@cmd + @base_params + params)
|
61
|
+
assert_cmd(expected_result, result)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'create the content view with repositories specified by product name and names' do
|
65
|
+
wanted = repositories.take(2)
|
66
|
+
ids = wanted.map { |repo| repo['id'] }
|
67
|
+
names = wanted.map { |repo| repo['name'] }
|
68
|
+
params = %W(--product=#{product['name']} --repositories=#{names.join(',')})
|
69
|
+
|
70
|
+
api_products = api_expects(:products, :index, 'Find ID of product') do |par|
|
71
|
+
par['organization_id'] == org_id && par['name'] == product['name']
|
72
|
+
end
|
73
|
+
api_products.returns(product)
|
74
|
+
|
75
|
+
api_repositories = api_expects(:repositories, :index,
|
76
|
+
'Find repositories belonging to product') do |par|
|
77
|
+
par['product_id'] == product['id'] && par['organization_id'] == org_id
|
78
|
+
end
|
79
|
+
api_repositories.returns(repositories)
|
80
|
+
|
81
|
+
api_expects(:content_views, :create, 'Create content view') do |par|
|
82
|
+
par['organization_id'] == org_id &&
|
83
|
+
par['name'] == name &&
|
84
|
+
par['repository_ids'] == ids
|
85
|
+
end
|
86
|
+
|
87
|
+
expected_result = success_result("Content view created\n")
|
88
|
+
result = run_cmd(@cmd + @base_params + params)
|
89
|
+
assert_cmd(expected_result, result)
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'fails on providing repository names without product' do
|
93
|
+
params = %w(--repositories=repo-1,repo-2)
|
94
|
+
|
95
|
+
expected_result = usage_error_result(
|
96
|
+
@cmd,
|
97
|
+
'At least one of options --product-id, --product is required',
|
98
|
+
error_heading
|
99
|
+
)
|
100
|
+
|
101
|
+
api_expects_no_call
|
102
|
+
result = run_cmd(@cmd + @base_params + params)
|
103
|
+
assert_cmd(expected_result, result)
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'fails on providing product and repository ids' do
|
107
|
+
params = %w(--product=testproduct --repository-ids=1,2,3,4,5)
|
108
|
+
|
109
|
+
expected_result = usage_error_result(
|
110
|
+
@cmd,
|
111
|
+
"You can't set any of options --product-id, --product",
|
112
|
+
error_heading
|
113
|
+
)
|
114
|
+
|
115
|
+
api_expects_no_call
|
116
|
+
result = run_cmd(@cmd + params)
|
117
|
+
assert_cmd(expected_result, result)
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../test_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), '../lifecycle_environment/lifecycle_environment_helpers')
|
3
|
+
|
4
|
+
require 'hammer_cli_katello/content_view_puppet_module'
|
5
|
+
|
6
|
+
describe 'listing content-views' do
|
7
|
+
include LifecycleEnvironmentHelpers
|
8
|
+
|
9
|
+
before do
|
10
|
+
@cmd = %w(content-view list)
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:org_id) { 1 }
|
14
|
+
let(:lifecycle_env_id) { 1 }
|
15
|
+
let(:empty_response) do {
|
16
|
+
"total" => 0,
|
17
|
+
"subtotal" => 0,
|
18
|
+
"page" => "1",
|
19
|
+
"per_page" => "1000",
|
20
|
+
"error" => nil,
|
21
|
+
"search" => nil,
|
22
|
+
"sort" => {
|
23
|
+
"by" => nil,
|
24
|
+
"order" => nil
|
25
|
+
},
|
26
|
+
"results" => []
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
it "lists an organizations content-views" do
|
31
|
+
params = ["--organization-id=#{org_id}"]
|
32
|
+
|
33
|
+
ex = api_expects(:content_views, :index, 'Organizations content-views list') do |par|
|
34
|
+
par['organization_id'] == org_id && par['page'] == 1 &&
|
35
|
+
par['per_page'] == 1000
|
36
|
+
end
|
37
|
+
|
38
|
+
ex.returns(empty_response)
|
39
|
+
expected_result = success_result("----------------|------|-------|-----------|---------------
|
40
|
+
CONTENT VIEW ID | NAME | LABEL | COMPOSITE | REPOSITORY IDS
|
41
|
+
----------------|------|-------|-----------|---------------
|
42
|
+
")
|
43
|
+
|
44
|
+
result = run_cmd(@cmd + params)
|
45
|
+
assert_cmd(expected_result, result)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "lists the content-views belonging to a lifecycle-environment by name" do
|
49
|
+
params = ["--organization-id=#{org_id}", '--lifecycle-environment=test']
|
50
|
+
|
51
|
+
expect_lifecycle_environment_search(org_id, 'test', lifecycle_env_id).at_least_once
|
52
|
+
|
53
|
+
ex = api_expects(:content_views, :index, 'lifecycles content-views 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
|
+
expected_result = success_result("----------------|------|-------|-----------|---------------
|
60
|
+
CONTENT VIEW ID | NAME | LABEL | COMPOSITE | REPOSITORY IDS
|
61
|
+
----------------|------|-------|-----------|---------------
|
62
|
+
")
|
63
|
+
|
64
|
+
result = run_cmd(@cmd + params)
|
65
|
+
assert_cmd(expected_result, result)
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../../test_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), '../../organization/organization_helpers')
|
3
|
+
require File.join(File.dirname(__FILE__),
|
4
|
+
'../../lifecycle_environment/lifecycle_environment_helpers')
|
5
|
+
|
6
|
+
describe 'content-view version incremental-update' do
|
7
|
+
include OrganizationHelpers
|
8
|
+
include LifecycleEnvironmentHelpers
|
9
|
+
include ForemanTaskHelpers
|
10
|
+
|
11
|
+
before do
|
12
|
+
@cmd = %w(content-view version incremental-update)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "performs incremental update with no updates" do
|
16
|
+
params = ['--errata-ids=FOO2012', '--lifecycle-environment-ids=1,2,3',
|
17
|
+
'--content-view-version-id=5']
|
18
|
+
|
19
|
+
ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
|
20
|
+
par['update_hosts'].nil? &&
|
21
|
+
par[:content_view_version_environments][0][:environment_ids] == %w(1 2 3) &&
|
22
|
+
par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
|
23
|
+
par['add_content']['errata_ids'] == ['FOO2012']
|
24
|
+
end
|
25
|
+
ex.returns('id' => '3', 'state' => 'stopped')
|
26
|
+
|
27
|
+
expect_foreman_task('3')
|
28
|
+
|
29
|
+
result = run_cmd(@cmd + params)
|
30
|
+
assert(result.exit_code, 0)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "performs incremental update with update all hosts" do
|
34
|
+
params = ['--update-all-hosts=true', '--errata-ids=FOO2012',
|
35
|
+
'--lifecycle-environment-ids=1,2,3', '--content-view-version-id=5']
|
36
|
+
|
37
|
+
ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
|
38
|
+
par['update_hosts']['included'][:search] == '' &&
|
39
|
+
par[:content_view_version_environments][0][:environment_ids] == %w(1 2 3) &&
|
40
|
+
par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
|
41
|
+
par['add_content']['errata_ids'] == ['FOO2012']
|
42
|
+
end
|
43
|
+
ex.returns('id' => '3', 'state' => 'stopped')
|
44
|
+
|
45
|
+
expect_foreman_task('3')
|
46
|
+
|
47
|
+
result = run_cmd(@cmd + params)
|
48
|
+
assert(result.exit_code, 0)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "performs incremental update with no environment" do
|
52
|
+
params = ['--update-all-hosts=true', '--errata-ids=FOO2012', '--content-view-version-id=5']
|
53
|
+
|
54
|
+
ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
|
55
|
+
par['update_hosts']['included'][:search] == '' &&
|
56
|
+
par[:content_view_version_environments][0][:environment_ids].nil? &&
|
57
|
+
par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
|
58
|
+
par['add_content']['errata_ids'] == ['FOO2012']
|
59
|
+
end
|
60
|
+
ex.returns('id' => '3', 'state' => 'stopped')
|
61
|
+
|
62
|
+
expect_foreman_task('3')
|
63
|
+
|
64
|
+
result = run_cmd(@cmd + params)
|
65
|
+
assert(result.exit_code, 0)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "performs incremental update with names" do
|
69
|
+
params = ['--update-all-hosts=true', '--errata-ids=FOO2012',
|
70
|
+
'--lifecycle-environments=trump,cruz,bernie',
|
71
|
+
'--content-view-version-id=5', '--organization=USA']
|
72
|
+
|
73
|
+
expect_organization_search('USA', 5)
|
74
|
+
expect_lifecycle_environments_request(5, [{'name' => 'trump', 'id' => 1},
|
75
|
+
{'name' => 'cruz', 'id' => 2},
|
76
|
+
{'name' => 'bernie', 'id' => 3}])
|
77
|
+
|
78
|
+
ex = api_expects(:content_view_versions, :incremental_update, 'Incremental Update') do |par|
|
79
|
+
par['update_hosts']['included'][:search] == '' &&
|
80
|
+
par[:content_view_version_environments][0][:environment_ids] == [1, 2, 3] &&
|
81
|
+
par[:content_view_version_environments][0][:content_view_version_id] == 5 &&
|
82
|
+
par['add_content']['errata_ids'] == ['FOO2012']
|
83
|
+
end
|
84
|
+
ex.returns('id' => '3', 'state' => 'stopped')
|
85
|
+
|
86
|
+
expect_foreman_task('3')
|
87
|
+
|
88
|
+
result = run_cmd(@cmd + params)
|
89
|
+
assert(result.exit_code, 0)
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../../test_helper')
|
2
|
+
|
3
|
+
require 'hammer_cli_katello/content_view_puppet_module'
|
4
|
+
|
5
|
+
describe 'apply an errata' do
|
6
|
+
include ForemanTaskHelpers
|
7
|
+
|
8
|
+
before do
|
9
|
+
@cmd = %w(host errata apply)
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:errata_id) { "RHEA-1111:1111" }
|
13
|
+
let(:host_id) { 1 }
|
14
|
+
let(:task_id) { 5 }
|
15
|
+
let(:response) do {
|
16
|
+
'id' => task_id,
|
17
|
+
'state' => 'stopped'
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
it "applies an errata to a host" do
|
22
|
+
params = ["--errata-ids=#{errata_id}", "--host-id=#{host_id}"]
|
23
|
+
|
24
|
+
ex = api_expects(:host_errata, :apply, 'Host errata apply') do |par|
|
25
|
+
par['errata_ids'] == [errata_id] && par['host_id'] == host_id
|
26
|
+
end
|
27
|
+
|
28
|
+
ex.returns(response)
|
29
|
+
|
30
|
+
expect_foreman_task(task_id)
|
31
|
+
|
32
|
+
run_cmd(@cmd + params)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "applies an errata to a host with async flag" do
|
36
|
+
params = ["--errata-ids=#{errata_id}", "--host-id=#{host_id}", "--async"]
|
37
|
+
|
38
|
+
ex = api_expects(:host_errata, :apply, 'Host errata apply') do |par|
|
39
|
+
par['errata_ids'] == [errata_id] && par['host_id'] == host_id
|
40
|
+
end
|
41
|
+
|
42
|
+
ex.returns(response)
|
43
|
+
|
44
|
+
run_cmd(@cmd + params)
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../../test_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), '../../content_view/content_view_helpers')
|
3
|
+
require File.join(File.dirname(__FILE__), '../../organization/organization_helpers')
|
4
|
+
require File.join(File.dirname(__FILE__),
|
5
|
+
'../../lifecycle_environment/lifecycle_environment_helpers')
|
6
|
+
|
7
|
+
describe 'host subscription register' do
|
8
|
+
include OrganizationHelpers
|
9
|
+
include ContentViewHelpers
|
10
|
+
include LifecycleEnvironmentHelpers
|
11
|
+
|
12
|
+
before do
|
13
|
+
@cmd = %w(host subscription register)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "subscribe a host" do
|
17
|
+
params = ['--name=trump.wall.com', '--content-view-id=1', '--lifecycle-environment-id=2']
|
18
|
+
ex = api_expects(:host_subscriptions, :create, 'Host subscription register') do |par|
|
19
|
+
par['name'] == 'trump.wall.com' && par['content_view_id'] == 1 &&
|
20
|
+
par['lifecycle_environment_id'] == 2
|
21
|
+
end
|
22
|
+
ex.returns({})
|
23
|
+
|
24
|
+
expected_result = success_result(
|
25
|
+
'Host successfully registered
|
26
|
+
'
|
27
|
+
)
|
28
|
+
|
29
|
+
result = run_cmd(@cmd + params)
|
30
|
+
assert_cmd(expected_result, result)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "resolves ids from names" do
|
34
|
+
params = ['--name=trump.wall.com', '--content-view=someview', '--lifecycle-environment=someenv',
|
35
|
+
'--organization=trumporg']
|
36
|
+
|
37
|
+
api_expects(:host_subscriptions, :create, 'Host subscription register') do |par|
|
38
|
+
par['name'] == 'trump.wall.com' && par['content_view_id'] == 1 &&
|
39
|
+
par['lifecycle_environment_id'] == 2
|
40
|
+
end
|
41
|
+
|
42
|
+
expect_organization_search('trumporg', 3)
|
43
|
+
expect_content_view_search(3, 'someview', 1)
|
44
|
+
expect_lifecycle_environment_search(3, 'someenv', 2)
|
45
|
+
|
46
|
+
expected_result = success_result(
|
47
|
+
'Host successfully registered
|
48
|
+
'
|
49
|
+
)
|
50
|
+
result = run_cmd(@cmd + params)
|
51
|
+
assert_cmd(expected_result, result)
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '../../test_helper')
|
2
|
+
require File.join(File.dirname(__FILE__), '../host_helpers')
|
3
|
+
|
4
|
+
describe 'host subscription unregister' do
|
5
|
+
include HostHelpers
|
6
|
+
|
7
|
+
before do
|
8
|
+
@cmd = %w(host subscription unregister)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "unregisters the host" do
|
12
|
+
params = ['--host-id=3']
|
13
|
+
ex = api_expects(:host_subscriptions, :destroy, 'Host unregister') do |par|
|
14
|
+
par['host_id'] == 3
|
15
|
+
end
|
16
|
+
ex.returns({})
|
17
|
+
|
18
|
+
expected_result = success_result(
|
19
|
+
'Host unregistered
|
20
|
+
'
|
21
|
+
)
|
22
|
+
|
23
|
+
result = run_cmd(@cmd + params)
|
24
|
+
assert_cmd(expected_result, result)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "resolves id from name" do
|
28
|
+
params = ['--host=host1']
|
29
|
+
|
30
|
+
api_expects(:host_subscriptions, :destroy, 'Host unregister') do |par|
|
31
|
+
par['host_id'].to_i == 3
|
32
|
+
end
|
33
|
+
expect_host_search('host1', '3')
|
34
|
+
|
35
|
+
run_cmd(@cmd + params)
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module LifecycleEnvironmentHelpers
|
2
|
+
|
3
|
+
def expect_lifecycle_environment_search(org_id, name, id)
|
4
|
+
ex = api_expects(:lifecycle_environments, :index, 'Find the lifecycle environment') do |par|
|
5
|
+
par['name'] == name && par['organization_id'] == org_id
|
6
|
+
end
|
7
|
+
ex.returns(index_response([{'id' => id}]))
|
8
|
+
end
|
9
|
+
|
10
|
+
def expect_lifecycle_environments_request(org_id, results)
|
11
|
+
ex = api_expects(:lifecycle_environments, :index, 'List the lifecycle environments') do |par|
|
12
|
+
par['organization_id'] == org_id
|
13
|
+
end
|
14
|
+
ex.returns(index_response(results))
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|