hammer_cli_katello 0.1.3 → 0.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 (31) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hammer_cli_katello.rb +1 -0
  3. data/lib/hammer_cli_katello/content_view.rb +1 -1
  4. data/lib/hammer_cli_katello/filter.rb +19 -0
  5. data/lib/hammer_cli_katello/filter_rule.rb +0 -10
  6. data/lib/hammer_cli_katello/host_extensions.rb +2 -0
  7. data/lib/hammer_cli_katello/id_name_options_validator.rb +73 -0
  8. data/lib/hammer_cli_katello/package.rb +2 -0
  9. data/lib/hammer_cli_katello/repository.rb +17 -5
  10. data/lib/hammer_cli_katello/version.rb +1 -1
  11. data/test/functional/content_view/create_test.rb +0 -3
  12. data/test/functional/content_view/filter/delete_test.rb +93 -0
  13. data/test/functional/content_view/filter/info_test.rb +92 -0
  14. data/test/functional/content_view/filter/list_test.rb +98 -0
  15. data/test/functional/content_view/filter/update_test.rb +93 -0
  16. data/test/functional/filter_rule/create_test.rb +0 -79
  17. data/test/functional/host/extensions/data/host.json +4 -2
  18. data/test/functional/host/extensions/info_test.rb +3 -1
  19. data/test/functional/lifecycle_environment/create_test.rb +14 -0
  20. data/test/functional/lifecycle_environment/list_test.rb +38 -0
  21. data/test/functional/lifecycle_environment/update_test.rb +14 -0
  22. data/test/functional/organization/organization_helpers.rb +2 -2
  23. data/test/functional/package/list_test.rb +48 -0
  24. data/test/functional/repository/delete_test.rb +101 -0
  25. data/test/functional/repository/upload_test.rb +43 -0
  26. data/test/unit/id_name_options_validator_test.rb +96 -0
  27. metadata +26 -13
  28. data/test/functional/filter_rule/delete_test.rb +0 -104
  29. data/test/functional/filter_rule/info_test.rb +0 -104
  30. data/test/functional/filter_rule/list_test.rb +0 -91
  31. data/test/functional/filter_rule/update_test.rb +0 -104
@@ -0,0 +1,98 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../content_view_helpers')
3
+ require File.join(File.dirname(__FILE__), '../../organization/organization_helpers')
4
+
5
+ describe 'listing content view filters' do
6
+ include ContentViewHelpers
7
+ include OrganizationHelpers
8
+
9
+ before do
10
+ @cmd = %w(content-view filter list)
11
+ end
12
+
13
+ let(:org_id) { 1 }
14
+ let(:org_label) { 'Ubik' }
15
+ let(:cv_name) { "Trystero" }
16
+ let(:empty_response) do
17
+ {
18
+ "total" => 0,
19
+ "subtotal" => 0,
20
+ "page" => "1",
21
+ "per_page" => "1000",
22
+ "error" => nil,
23
+ "search" => nil,
24
+ "sort" => {
25
+ "by" => nil,
26
+ "order" => nil
27
+ },
28
+ "results" => []
29
+ }
30
+ end
31
+
32
+ it "lists content view filters" do
33
+ params = ["--content-view-id=1"]
34
+
35
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
36
+ par['content_view_id'] == 1 && par['page'] == 1 && par['per_page'] == 1000
37
+ end
38
+ ex.returns(empty_response)
39
+
40
+ expected_result = success_result("----------|------|------|----------
41
+ FILTER ID | NAME | TYPE | INCLUSION
42
+ ----------|------|------|----------
43
+ ")
44
+
45
+ result = run_cmd(@cmd + params)
46
+ assert_cmd(expected_result, result)
47
+ end
48
+
49
+ it "lists content view filters for a content view name and org id" do
50
+ params = ["--organization-id=#{org_id}", "--content-view=#{cv_name}"]
51
+
52
+ expect_content_view_search(org_id.to_s, cv_name, 1)
53
+
54
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
55
+ par['content_view_id'] == 1 && par['page'] == 1 && par['per_page'] == 1000
56
+ end
57
+ ex.returns(empty_response)
58
+
59
+ expected_result = success_result("----------|------|------|----------
60
+ FILTER ID | NAME | TYPE | INCLUSION
61
+ ----------|------|------|----------
62
+ ")
63
+
64
+ result = run_cmd(@cmd + params)
65
+ assert_cmd(expected_result, result)
66
+ end
67
+
68
+ it "lists content view filters for a content view name and org label" do
69
+ params = ["--organization-label=#{org_label}", "--content-view=#{cv_name}"]
70
+
71
+ expect_organization_search(org_label, org_id, field: 'label')
72
+ expect_content_view_search(org_id, cv_name, 1)
73
+
74
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
75
+ par['content_view_id'] == 1 && par['page'] == 1 && par['per_page'] == 1000
76
+ end
77
+ ex.returns(empty_response)
78
+
79
+ expected_result = success_result("----------|------|------|----------
80
+ FILTER ID | NAME | TYPE | INCLUSION
81
+ ----------|------|------|----------
82
+ ")
83
+
84
+ result = run_cmd(@cmd + params)
85
+ assert_cmd(expected_result, result)
86
+ end
87
+
88
+ it 'requires org name, label, or id if content view name is supplied' do
89
+ params = ["--content-view=#{cv_name}"]
90
+ expected_result = usage_error_result(
91
+ @cmd,
92
+ 'At least one of options --organization-id, --organization, --organization-label is required'
93
+ )
94
+ api_expects_no_call
95
+ result = run_cmd(@cmd + params)
96
+ assert_cmd(expected_result, result)
97
+ end
98
+ end
@@ -0,0 +1,93 @@
1
+ require File.join(File.dirname(__FILE__), '../../test_helper')
2
+ require File.join(File.dirname(__FILE__), '../content_view_helpers')
3
+ require File.join(File.dirname(__FILE__), '../../organization/organization_helpers')
4
+
5
+ module HammerCLIForeman
6
+ describe UpdateCommand do
7
+ include ContentViewHelpers
8
+ include OrganizationHelpers
9
+
10
+ before do
11
+ @cmd = %w(content-view filter update)
12
+ end
13
+
14
+ it 'accepts filter id' do
15
+ params = ['--id=1', '--new-name=valis']
16
+
17
+ api_expects(:content_view_filters, :update) do |par|
18
+ par['id'] == '1' && par['name'] == 'valis'
19
+ end
20
+
21
+ run_cmd(@cmd + params)
22
+ end
23
+
24
+ it 'accepts filter name, content view name, and org name' do
25
+ params = ['--name=scanner', '--content-view=darkly', '--organization=pkd', '--new-name=ubik']
26
+
27
+ expect_organization_search('pkd', 1)
28
+ expect_content_view_search(1, 'darkly', 1)
29
+ expect_content_view_search(1, 'darkly', 1) # redmine #15930
30
+
31
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
32
+ par['content_view_id'] == 1 && par['name'] == 'scanner'
33
+ end
34
+ ex.returns(index_response([{'id' => '1'}]))
35
+
36
+ api_expects(:content_view_filters, :update) do |par|
37
+ par['id'] == '1' && par['name'] == 'ubik'
38
+ end
39
+
40
+ run_cmd(@cmd + params)
41
+ end
42
+
43
+ it 'accepts filter name, content view name, and org label' do
44
+ params = ['--name=scanner', '--content-view=darkly',
45
+ '--organization-label=pkd', '--new-name=ubik']
46
+
47
+ expect_organization_search('pkd', 1, field: 'label')
48
+ expect_content_view_search(1, 'darkly', 1)
49
+ expect_content_view_search(1, 'darkly', 1) # redmine #15930
50
+
51
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
52
+ par['content_view_id'] == 1 && par['name'] == 'scanner'
53
+ end
54
+ ex.returns(index_response([{'id' => '1'}]))
55
+
56
+ api_expects(:content_view_filters, :update) do |par|
57
+ par['id'] == '1' && par['name'] == 'ubik'
58
+ end
59
+
60
+ run_cmd(@cmd + params)
61
+ end
62
+
63
+ it 'accepts filter name, content view name, and org id' do
64
+ params = ['--name=scanner', '--content-view=darkly', '--organization-id=1', '--new-name=ubik']
65
+
66
+ expect_content_view_search('1', 'darkly', 1)
67
+ expect_content_view_search('1', 'darkly', 1) # redmine #15930
68
+
69
+ ex = api_expects(:content_view_filters, :index, 'Content view filters list') do |par|
70
+ par['content_view_id'] == 1 && par['name'] == 'scanner'
71
+ end
72
+ ex.returns(index_response([{'id' => '1'}]))
73
+
74
+ api_expects(:content_view_filters, :update) do |par|
75
+ par['id'] == '1' && par['name'] == 'ubik'
76
+ end
77
+
78
+ run_cmd(@cmd + params)
79
+ end
80
+
81
+ it 'requires content view name or id if name is supplied' do
82
+ params = ["--name=high-castle"]
83
+ expected_result = usage_error_result(
84
+ @cmd,
85
+ 'At least one of options --content-view-id, --content-view is required',
86
+ 'Could not update the filter'
87
+ )
88
+ api_expects_no_call
89
+ result = run_cmd(@cmd + params)
90
+ assert_cmd(expected_result, result)
91
+ end
92
+ end
93
+ end
@@ -16,84 +16,5 @@ module HammerCLIKatello
16
16
  end
17
17
  run_cmd(%w(content-view filter rule create --content-view-filter-id 1 --names rpm1,rpm2))
18
18
  end
19
-
20
- it 'allows name resolution of filter with content-view-id' do
21
- ex = api_expects(:content_view_filters, :index) do |p|
22
- p['name'] == 'cvf1' && p['content_view_id'] == 3
23
- end
24
- ex.returns(index_response([{'id' => 1}]))
25
-
26
- api_expects(:content_view_filter_rules, :create) do |p|
27
- p['content_view_filter_id'] == 1 && p['name'] == %w(rule9)
28
- end
29
- run_cmd(%w(content-view filter rule create --content-view-filter cvf1 --content-view-id 3
30
- --name rule9))
31
- end
32
-
33
- describe 'organization' do
34
- it 'ID can be specified to resolve content view name' do
35
- ex = api_expects(:content_views, :index) do |p|
36
- p['name'] == 'cv3' && p['organization_id'] == '6'
37
- end
38
- ex.returns(index_response([{'id' => 3}]))
39
-
40
- ex = api_expects(:content_view_filters, :index) do |p|
41
- p['name'] == 'cvf1' && p['content_view_id'] == 3
42
- end
43
- ex.returns(index_response([{'id' => 1}]))
44
-
45
- api_expects(:content_view_filter_rules, :create) do |p|
46
- p['content_view_filter_id'] == 1 && p['name'] == %w(rule9)
47
- end
48
- run_cmd(%w(content-view filter rule create --content-view-filter cvf1 --organization-id 6
49
- --content-view cv3 --name rule9))
50
- end
51
-
52
- it 'name can be specified to resolve content view name' do
53
- ex = api_expects(:organizations, :index) do |p|
54
- p[:search] == "name = \"org6\""
55
- end
56
- ex.returns(index_response([{'id' => 6}]))
57
-
58
- ex = api_expects(:content_views, :index) do |p|
59
- p['name'] == 'cv3' && p['organization_id'] == 6
60
- end
61
- ex.returns(index_response([{'id' => 3}]))
62
-
63
- ex = api_expects(:content_view_filters, :index) do |p|
64
- p['name'] == 'cvf1' && p['content_view_id'] == 3
65
- end
66
- ex.returns(index_response([{'id' => 1}]))
67
-
68
- api_expects(:content_view_filter_rules, :create) do |p|
69
- p['content_view_filter_id'] == 1 && p['name'] == %w(rule9)
70
- end
71
- run_cmd(%w(content-view filter rule create --content-view-filter cvf1 --organization org6
72
- --content-view cv3 --name rule9))
73
- end
74
-
75
- it 'label can be specified to resolve content view name' do
76
- ex = api_expects(:organizations, :index) do |p|
77
- p[:search] == "label = \"org6\""
78
- end
79
- ex.returns(index_response([{'id' => 6}]))
80
-
81
- ex = api_expects(:content_views, :index) do |p|
82
- p['name'] == 'cv3' && p['organization_id'] == 6
83
- end
84
- ex.returns(index_response([{'id' => 3}]))
85
-
86
- ex = api_expects(:content_view_filters, :index) do |p|
87
- p['name'] == 'cvf1' && p['content_view_id'] == 3
88
- end
89
- ex.returns(index_response([{'id' => 1}]))
90
-
91
- api_expects(:content_view_filter_rules, :create) do |p|
92
- p['content_view_filter_id'] == 1 && p['name'] == %w(rule9)
93
- end
94
- run_cmd(%w(content-view filter rule create --content-view-filter cvf1 --organization-label
95
- org6 --content-view cv3 --name rule9))
96
- end
97
- end
98
19
  end
99
20
  end
@@ -92,7 +92,9 @@
92
92
  "content_view_version_id":1,
93
93
  "content_view_default?":true,
94
94
  "lifecycle_environment_library?":true,
95
- "katello_agent_installed":true
95
+ "katello_agent_installed":true,
96
+ "applicable_package_count": 5,
97
+ "upgradable_package_count": 4
96
98
  },
97
99
  "subscription_facet_attributes":{
98
100
  "id":2,
@@ -307,4 +309,4 @@
307
309
  "ipmi_boot":true,
308
310
  "puppetrun_hosts":true
309
311
  }
310
- }
312
+ }
@@ -20,7 +20,9 @@ describe 'host info' do
20
20
  ['Content View', 'Default Organization View'],
21
21
  ['Release Version', '7Server'],
22
22
  ['Bug Fix', '0'],
23
- ['Name', 'my host collection']]
23
+ ['Name', 'my host collection'],
24
+ ['Applicable Packages', '5'],
25
+ ['Upgradable Packages', '4']]
24
26
  expected_results = expected_fields.map { |field| success_result(FieldMatcher.new(*field)) }
25
27
  expected_results.each { |expected| assert_cmd(expected, result) }
26
28
  end
@@ -0,0 +1,14 @@
1
+ require_relative '../test_helper'
2
+ require 'hammer_cli_katello/lifecycle_environment'
3
+
4
+ module HammerCLIKatello
5
+ describe LifecycleEnvironmentCommand::CreateCommand do
6
+ it 'allows minimal options' do
7
+ api_expects(:lifecycle_environments, :create) do |p|
8
+ p['name'] == 'le1' && p['prior_id'] == '3' && p['organization_id'] == 1
9
+ end
10
+
11
+ run_cmd(%w(lifecycle-environment create --name le1 --prior-id 3 --organization-id 1))
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,38 @@
1
+ require_relative '../test_helper'
2
+ require 'hammer_cli_katello/lifecycle_environment'
3
+
4
+ module HammerCLIKatello
5
+ describe LifecycleEnvironmentCommand::ListCommand do
6
+ it 'allows minimal options' do
7
+ api_expects(:lifecycle_environments, :index)
8
+
9
+ run_cmd(%w(lifecycle-environment list))
10
+ end
11
+
12
+ describe 'allows organization' do
13
+ it 'id' do
14
+ api_expects(:lifecycle_environments, :index) { |p| p['organization_id'] == 1 }
15
+
16
+ run_cmd(%w(lifecycle-environment list --organization-id 1))
17
+ end
18
+
19
+ it 'name' do
20
+ api_expects(:organizations, :index) { |par| par[:search] == "name = \"org1\"" }
21
+ .at_least_once.returns(index_response([{'id' => 1}]))
22
+
23
+ api_expects(:lifecycle_environments, :index) { |p| p['organization_id'] == 1 }
24
+
25
+ run_cmd(%w(lifecycle-environment list --organization org1))
26
+ end
27
+
28
+ it 'label' do
29
+ api_expects(:organizations, :index) { |par| par[:search] == "label = \"org1\"" }
30
+ .at_least_once.returns(index_response([{'id' => 1}]))
31
+
32
+ api_expects(:lifecycle_environments, :index) { |p| p['organization_id'] == 1 }
33
+
34
+ run_cmd(%w(lifecycle-environment list --organization-label org1))
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,14 @@
1
+ require_relative '../test_helper'
2
+ require 'hammer_cli_katello/lifecycle_environment'
3
+
4
+ module HammerCLIKatello
5
+ describe LifecycleEnvironmentCommand::UpdateCommand do
6
+ it 'allows minimal options' do
7
+ api_expects(:lifecycle_environments, :update) do |p|
8
+ p['new_name'] == 'le3' && p['id'] == 3
9
+ end
10
+
11
+ run_cmd(%w(lifecycle-environment update --id 3 --new-name le3))
12
+ end
13
+ end
14
+ end
@@ -1,7 +1,7 @@
1
1
  module OrganizationHelpers
2
- def expect_organization_search(name, id)
2
+ def expect_organization_search(name_or_label, id, field: 'name')
3
3
  ex = api_expects(:organizations, :index, 'Find the organization') do |par|
4
- par[:search] == "name = \"#{name}\""
4
+ par[:search] == "#{field} = \"#{name_or_label}\""
5
5
  end
6
6
  ex.at_least_once.returns(index_response([{'id' => id}]))
7
7
  end
@@ -0,0 +1,48 @@
1
+ require_relative '../test_helper'
2
+ require 'hammer_cli_katello/package'
3
+
4
+ module HammerCLIKatello
5
+ describe PackageCommand::ListCommand do
6
+ it 'allows minimal options' do
7
+ api_expects(:packages, :index)
8
+
9
+ run_cmd(%w(package list))
10
+ end
11
+
12
+ describe 'organization options' do
13
+ it 'can be provided by organization ID' do
14
+ api_expects(:packages, :index) do |params|
15
+ params['organization_id'] == 1
16
+ end
17
+
18
+ run_cmd(%w(package list --organization-id 1))
19
+ end
20
+
21
+ it 'can be provided by organization name' do
22
+ ex = api_expects(:organizations, :index) do |params|
23
+ params[:search] == "name = \"org1\""
24
+ end
25
+ ex.at_least_once.returns(index_response([{'id' => 1}]))
26
+
27
+ api_expects(:packages, :index) do |params|
28
+ params['organization_id'] == 1
29
+ end
30
+
31
+ run_cmd(%w(package list --organization org1))
32
+ end
33
+
34
+ it 'can be provided by organization label' do
35
+ ex = api_expects(:organizations, :index) do |params|
36
+ params[:search] == "label = \"org1\""
37
+ end
38
+ ex.at_least_once.returns(index_response([{'id' => 1}]))
39
+
40
+ api_expects(:packages, :index) do |params|
41
+ params['organization_id'] == 1
42
+ end
43
+
44
+ run_cmd(%w(package list --organization-label org1))
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,101 @@
1
+ require_relative '../test_helper'
2
+ require 'hammer_cli_katello/repository'
3
+
4
+ module HammerCLIKatello
5
+ describe Repository::DeleteCommand do
6
+ it 'allows minimal parameters' do
7
+ api_expects(:repositories, :destroy) { |p| p['id'] == '1' }
8
+ run_cmd(%w(repository delete --id 1))
9
+ end
10
+
11
+ describe 'product options' do
12
+ it 'are required to resolve repository name' do
13
+ api_expects_no_call
14
+ result = run_cmd(%w(repository delete --name repo1))
15
+ assert_includes(result.err, 'At least one of options --product, --product-id is required')
16
+ end
17
+
18
+ it 'can be specified via product id' do
19
+ ex = api_expects(:repositories, :index) do |p|
20
+ p['product_id'] == 3 && p['name'] == 'repo1'
21
+ end
22
+ ex.returns(index_response([{'id' => 1}]))
23
+
24
+ api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
25
+
26
+ run_cmd(%w(repository delete --name repo1 --product-id 3))
27
+ end
28
+
29
+ it 'can be specified via product name' do
30
+ ex = api_expects(:products, :index) do |p|
31
+ p['organization_id'] == '6' && p['name'] == 'product3'
32
+ end
33
+ ex.returns(index_response([{'id' => 3}]))
34
+
35
+ ex = api_expects(:repositories, :index) do |p|
36
+ p['product_id'] == 3 && p['name'] == 'repo1' && p['organization_id'] == '6'
37
+ end
38
+ ex.returns(index_response([{'id' => 1}]))
39
+
40
+ api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
41
+
42
+ run_cmd(%w(repository delete --name repo1 --product product3 --organization-id 6))
43
+ end
44
+
45
+ describe 'organization options' do
46
+ it 'can be specified by organization id' do
47
+ ex = api_expects(:repositories, :index) do |p|
48
+ p['product_id'] == 3 && p['name'] == 'repo1' && p['organization_id'] == '6'
49
+ end
50
+ ex.returns(index_response([{'id' => 1}]))
51
+
52
+ api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
53
+
54
+ run_cmd(%w(repository delete --name repo1 --product-id 3 --organization-id 6))
55
+ end
56
+
57
+ it 'can be specified by organization name' do
58
+ ex = api_expects(:organizations, :index) do |p|
59
+ p[:search] == "name = \"org6\""
60
+ end
61
+ ex.returns(index_response([{'id' => 6}]))
62
+
63
+ ex = api_expects(:products, :index) do |p|
64
+ p['organization_id'] == 6 && p['name'] == 'product3'
65
+ end
66
+ ex.returns(index_response([{'id' => 3}]))
67
+
68
+ ex = api_expects(:repositories, :index) do |p|
69
+ p['product_id'] == 3 && p['name'] == 'repo1'
70
+ end
71
+ ex.returns(index_response([{'id' => 1}]))
72
+
73
+ api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
74
+
75
+ run_cmd(%w(repository delete --name repo1 --product product3 --organization org6))
76
+ end
77
+
78
+ it 'can be specified by organization label' do
79
+ ex = api_expects(:organizations, :index) do |p|
80
+ p[:search] == "label = \"org6\""
81
+ end
82
+ ex.returns(index_response([{'id' => 6}]))
83
+
84
+ ex = api_expects(:products, :index) do |p|
85
+ p['organization_id'] == 6 && p['name'] == 'product3'
86
+ end
87
+ ex.returns(index_response([{'id' => 3}]))
88
+
89
+ ex = api_expects(:repositories, :index) do |p|
90
+ p['product_id'] == 3 && p['name'] == 'repo1'
91
+ end
92
+ ex.returns(index_response([{'id' => 1}]))
93
+
94
+ api_expects(:repositories, :destroy) { |p| p['id'] == 1 }
95
+
96
+ run_cmd(%w(repository delete --name repo1 --product product3 --organization-label org6))
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end