hammer_cli_foreman 2.1.3 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/doc/release_notes.md +8 -7
  3. data/doc/testing.md +13 -0
  4. data/lib/hammer_cli_foreman/associating_commands.rb +2 -3
  5. data/lib/hammer_cli_foreman/auth.rb +4 -4
  6. data/lib/hammer_cli_foreman/output/fields.rb +1 -1
  7. data/lib/hammer_cli_foreman/output/formatters.rb +1 -1
  8. data/lib/hammer_cli_foreman/testing/api_expectations.rb +10 -0
  9. data/lib/hammer_cli_foreman/version.rb +1 -1
  10. data/lib/minitest/coverage_reporter.rb +94 -0
  11. data/lib/minitest/hammer_coverage_plugin.rb +19 -0
  12. data/locale/ca/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  13. data/locale/de/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  14. data/locale/en/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  15. data/locale/en_GB/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  16. data/locale/es/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  17. data/locale/fr/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  18. data/locale/it/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  19. data/locale/ja/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  20. data/locale/ko/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  21. data/locale/pt_BR/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  22. data/locale/ru/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  23. data/locale/zh_CN/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  24. data/locale/zh_TW/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
  25. data/test/functional/commands/list_test.rb +11 -11
  26. data/test/functional/host_test.rb +3 -3
  27. data/test/functional/realm_test.rb +104 -0
  28. data/test/functional/trend_test.rb +63 -2
  29. data/test/reports/TEST-Minitest-Result.xml +4344 -0
  30. data/test/test_helper.rb +5 -2
  31. data/test/unit/api/interactive_basic_auth_test.rb +3 -1
  32. data/test/unit/api/oauth/oauth_authentication_code_grant_test.rb +2 -2
  33. data/test/unit/api/oauth/oauth_password_grant_test.rb +2 -2
  34. data/test/unit/api_test.rb +3 -4
  35. data/test/unit/apipie_resource_mock.rb +4 -4
  36. data/test/unit/commands_test.rb +19 -19
  37. data/test/unit/common_parameter_test.rb +1 -1
  38. data/test/unit/dependency_resolver_test.rb +4 -4
  39. data/test/unit/exception_handler_test.rb +13 -13
  40. data/test/unit/helpers/command.rb +5 -5
  41. data/test/unit/helpers/resource_disabled.rb +2 -2
  42. data/test/unit/host_test.rb +2 -2
  43. data/test/unit/id_resolver_test.rb +23 -23
  44. data/test/unit/option_builders_test.rb +49 -49
  45. data/test/unit/option_sources/id_params_test.rb +2 -2
  46. data/test/unit/option_sources/ids_params_test.rb +2 -2
  47. data/test/unit/output/formatters_test.rb +21 -21
  48. data/test/unit/param_filters_test.rb +17 -17
  49. data/test/unit/sessions_test.rb +24 -24
  50. data/test/unit/template_test.rb +1 -1
  51. metadata +105 -99
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67582a7a91083bfc42e83382188653feb0f869c311eb99d0471562c2e528c0d4
4
- data.tar.gz: aaecc05bc2d6100a135f02fad79d76f89da7ba3520f87ba90566382165abc97b
3
+ metadata.gz: c478d3535da7a22a10907ad8838baedd0dd1ad9cd3f5168cadab57ef5cc61e53
4
+ data.tar.gz: d362b8e3e44db4ec092ea2451363be8875cbd1576aaa14e4f8b3652b19ae483f
5
5
  SHA512:
6
- metadata.gz: 95d9f3c0ad3bf6109f3b7b3abf6879c844db0b6d94991cea9a033400b86aad077b682893b6f1b92227f3470ba926cc6093ee9701d17d527a125c9c23c08597da
7
- data.tar.gz: 0d27c46e8c93ca33c3e0c5228a8a9255dea918d5ca49c99bfeedb448394bbc5eac850a77913a8e6a4a161d9470c7946620dc5d6c8521c3607a23925c6f2861fb
6
+ metadata.gz: 1bebff2d84aacc7ed3053a64920ff86b1420f10d98fc2cfba91a627d69722d5d9866afbf31131c25868ecdf705161ec0401aeaa338f26a5f2f97476664fd1704
7
+ data.tar.gz: 5dd93dbc8bfff2308ee1768c80ed545dd452278fa0753d2b7016d80ba659741b4c39c1f1b99aa27149e546bc2628b08bcc84419ab5f85cb8ab2ef673952c2581
@@ -1,18 +1,19 @@
1
1
  Release notes
2
2
  =============
3
- ### 2.1.3 (2020-09-04)
4
- * Use underscores in `login oauth` option values ([PR #536](https://github.com/theforeman/hammer-cli-foreman/pull/536)) ([PR #538](https://github.com/theforeman/hammer-cli-foreman/pull/538)), [#30720](http://projects.theforeman.org/issues/30720)
5
-
6
- ### 2.1.2 (2020-07-14)
3
+ ### 2.2.0 (2020-08-11)
7
4
  * Change config templates to provisioning templates ([PR #531](https://github.com/theforeman/hammer-cli-foreman/pull/531)), [#29971](http://projects.theforeman.org/issues/29971)
5
+ * Fix minitest deprecation ([PR #523](https://github.com/theforeman/hammer-cli-foreman/pull/523))
6
+ * Add a coverage test ([PR #522](https://github.com/theforeman/hammer-cli-foreman/pull/522))
8
7
  * Return 'set current context for request' to help ([PR #530](https://github.com/theforeman/hammer-cli-foreman/pull/530)), [#30182](http://projects.theforeman.org/issues/30182)
9
- * Display request uuid for audit ([PR #528](https://github.com/theforeman/hammer-cli-foreman/pull/528)) ([PR #529](https://github.com/theforeman/hammer-cli-foreman/pull/529)), [#30130](http://projects.theforeman.org/issues/30130)
10
-
11
- ### 2.1.1 (2020-05-29)
8
+ * Display request uuid for audit ([PR #528](https://github.com/theforeman/hammer-cli-foreman/pull/528)), [#30130](http://projects.theforeman.org/issues/30130)
9
+ * Use parent resource instead of hardcoded one ([PR #527](https://github.com/theforeman/hammer-cli-foreman/pull/527)), [#30125](http://projects.theforeman.org/issues/30125)
10
+ * Added missing tests to realm command ([PR #526](https://github.com/theforeman/hammer-cli-foreman/pull/526)), [#30096](http://projects.theforeman.org/issues/30096)
11
+ * Added missing tests to trend test ([PR #525](https://github.com/theforeman/hammer-cli-foreman/pull/525)), [#30070](http://projects.theforeman.org/issues/30070)
12
12
  * Revert "skip one test on ruby 2.7" ([PR #520](https://github.com/theforeman/hammer-cli-foreman/pull/520)), [#28601](http://projects.theforeman.org/issues/28601)
13
13
  * Eliminate auth_type from sessions file ([PR #521](https://github.com/theforeman/hammer-cli-foreman/pull/521)), [#29876](http://projects.theforeman.org/issues/29876)
14
14
  * Add disable option for user ([PR #497](https://github.com/theforeman/hammer-cli-foreman/pull/497)), [#28973](http://projects.theforeman.org/issues/28973)
15
15
  * Added manage command to user mail notifications ([PR #513](https://github.com/theforeman/hammer-cli-foreman/pull/513)), [#7665](http://projects.theforeman.org/issues/7665)
16
+ * Bump to 2.2.0-develop
16
17
 
17
18
  ### 2.1.0 (2020-05-14)
18
19
  * Bump hammer_cli to 2.1.0 ([PR #519](https://github.com/theforeman/hammer-cli-foreman/pull/519))
@@ -131,3 +131,16 @@ connection = api_connection
131
131
  api = APIExpectationsDecorator.new(connection.api)
132
132
  api.expects_search(:users, 'login=admin')
133
133
  ```
134
+ ## Checking the coverage against the API
135
+ You can check how many API endpoints are covered by Hammer, this test runs all hammer tests,
136
+ and check which API actions run, therefore there could be two reasons for an endpoint to not be covered:
137
+ 1. there is no test for this action
138
+ 2. there is no hammer command for the API endpoint.
139
+ ### running the coverage test
140
+ ```bash
141
+
142
+ rake test TESTOPTS="-c"
143
+
144
+ TEST_API_VERSION=2.0 rake test TESTOPTS="-c"
145
+
146
+ ```
@@ -244,8 +244,7 @@ module HammerCLIForeman
244
244
 
245
245
  def request_params
246
246
  params = super
247
-
248
- template_ids = params['operatingsystem']['provisioning_template_ids']
247
+ template_ids = params[resource.singular_name]['provisioning_template_ids']
249
248
  if options['option_provisioning_template_search']
250
249
  templates = HammerCLIForeman.collection_to_common_format(
251
250
  associated_resource.call(
@@ -259,7 +258,7 @@ module HammerCLIForeman
259
258
  template_ids << template_id.to_s
260
259
  end
261
260
  end
262
- params['operatingsystem']['provisioning_template_ids'] = template_ids.uniq
261
+ params[resource.singular_name]['provisioning_template_ids'] = template_ids.uniq
263
262
  params
264
263
  end
265
264
 
@@ -36,11 +36,11 @@ module HammerCLIForeman
36
36
 
37
37
  option ["-u", "--username"], "USERNAME", _("Username to access the remote system")
38
38
  option ["-p", "--password"], "PASSWORD", _("Password to access the remote system")
39
- option ["-t", "--oidc-token-endpoint"], "OPENIDC_TOKEN_ENDPOINT", _("Openidc provider URL which issues access token")
40
- option ["-a", "--oidc-authorization-endpoint"], "OPENIDC_AUTHORIZATION_ENDPOINT", _("Openidc provider URL which issues authentication code (two factor only)")
41
- option ["-c", "--oidc-client-id"], "OPENIDC_CLIENT_ID", _("Client id used in the Openidc provider")
39
+ option ["-t", "--oidc-token-endpoint"], "OPENIDC-TOKEN-ENDPOINT", _("Openidc provider URL which issues access token")
40
+ option ["-a", "--oidc-authorization-endpoint"], "OPENIDC-AUTHORIZATION-ENDPOINT", _("Openidc provider URL which issues authentication code (two factor only)")
41
+ option ["-c", "--oidc-client-id"], "OPENIDC-CLIENT-ID", _("Client id used in the Openidc provider")
42
42
  option ["-f", "--two-factor"], :flag, _("Authenticate with two factor")
43
- option ["-r", "--oidc-redirect-uri"], "OPENIDC_REDIRECT_URI", _("Redirect URI for the authentication code grant flow")
43
+ option ["-r", "--oidc-redirect-uri"], "OPENIDC-REDIRECT-URI", _("Redirect URI for the authentication code grant flow")
44
44
 
45
45
  def execute
46
46
  if option_two_factor?
@@ -19,7 +19,7 @@ module Fields
19
19
 
20
20
  def id_detail
21
21
  {
22
- :label => _('id'),
22
+ :label => {:target => _('id')},
23
23
  :structured_label => _('Id'),
24
24
  :key => @options[:id_key] || :id,
25
25
  :id => true
@@ -35,7 +35,7 @@ module HammerCLIForeman::Output
35
35
  if detail.is_a?(Hash)
36
36
  next if detail[:id] && !show_ids
37
37
  if detail[:label]
38
- "#{detail[:label]}: #{get_value(data, detail[:key])}"
38
+ "#{detail[:label][:target]}: #{get_value(data, detail[:key])}"
39
39
  else
40
40
  get_value(data, detail[:key])
41
41
  end
@@ -1,6 +1,11 @@
1
1
  module HammerCLIForeman
2
2
  module Testing
3
3
  module APIExpectations
4
+
5
+ def self.api_calls
6
+ @api_calls ||= []
7
+ end
8
+
4
9
  class APICallMatcher < Mocha::ParameterMatchers::Base
5
10
  attr_accessor :expected_params, :expected_resource, :expected_action, :block
6
11
 
@@ -160,7 +165,12 @@ module HammerCLIForeman
160
165
  }.merge(options))
161
166
  end
162
167
 
168
+ def api_calls
169
+ HammerCLIForeman::Testing::APIExpectations.api_calls
170
+ end
171
+
163
172
  def api_expects(resource=nil, action=nil, note=nil, &block)
173
+ api_calls << [resource, action]
164
174
  APIExpectationsDecorator.new.expects_call(resource, action, note, &block)
165
175
  end
166
176
 
@@ -1,5 +1,5 @@
1
1
  module HammerCLIForeman
2
2
  def self.version
3
- @version ||= Gem::Version.new "2.1.3"
3
+ @version ||= Gem::Version.new "2.2.0"
4
4
  end
5
5
  end
@@ -0,0 +1,94 @@
1
+ require "json"
2
+
3
+ module Minitest
4
+ class CoverageRunner
5
+
6
+ RESOURCE_BLACK_LIST = ['tasks','home','config_groups','statistics','table_preferences','autosign','puppet_hosts']
7
+ attr_reader :raw_data, :api_endpoints, :covered_resources, :uncovered_resources, :partially_covered_resources
8
+ def initialize(file_path)
9
+ @raw_data = JSON.load(File.open(file_path))
10
+ @api_endpoints = {}
11
+ @covered_resources = []
12
+ @uncovered_resources = []
13
+ @partially_covered_resources = {}
14
+ end
15
+
16
+ def filtered_endpoints(covered)
17
+ api_endpoints.select { |_k, v| v == covered }.keys
18
+ end
19
+
20
+ def get_endpoints_by_resource(endpoints)
21
+ endpoints_by_resource = {}
22
+ endpoints.each do |url|
23
+ resource,action = url.split("/")
24
+ endpoints_by_resource[resource] ||= []
25
+ endpoints_by_resource[resource] << action
26
+ end
27
+ endpoints_by_resource
28
+ end
29
+
30
+ def uncovered_endpoints_by_resource
31
+ get_endpoints_by_resource(filtered_endpoints(false))
32
+ end
33
+
34
+ def covered_endpoints_by_resource
35
+ get_endpoints_by_resource(filtered_endpoints(true))
36
+ end
37
+
38
+ def get_coverage
39
+ get_endpoints_by_resource(api_endpoints.keys).each do |resource, actions|
40
+ if covered_endpoints_by_resource[resource] == actions
41
+ @covered_resources << resource
42
+ elsif uncovered_endpoints_by_resource[resource] == actions
43
+ @uncovered_resources << resource
44
+ else
45
+ @partially_covered_resources[resource] = uncovered_endpoints_by_resource[resource]
46
+ end
47
+ end
48
+ end
49
+
50
+ def endpoints_percentage(endpoints)
51
+ "#{(endpoints.count / api_endpoints.count.to_f * 100 ).to_i}%"
52
+ end
53
+
54
+ def uncovered_endpoints_percentage
55
+ endpoints_percentage(filtered_endpoints(false))
56
+ end
57
+
58
+ def covered_endpoints_percentage
59
+ endpoints_percentage(filtered_endpoints(true))
60
+ end
61
+
62
+ def run_tests
63
+ raw_data["docs"]["resources"].each do |resource|
64
+ resource[1]["methods"].each do | method |
65
+ @api_endpoints[method["doc_url"].delete_prefix!("../apidoc/v2/")] = false
66
+ end unless RESOURCE_BLACK_LIST.include? resource[0]
67
+ end
68
+ HammerCLIForeman::Testing::APIExpectations.api_calls.each do |api_call|
69
+ resource, action = api_call
70
+ url = "#{resource}/#{action}"
71
+ @api_endpoints[url] = true
72
+ end
73
+ get_coverage
74
+ output_coverage
75
+ end
76
+
77
+ def color(str, code)
78
+ puts "\e[#{code}m#{str}\e[0m"
79
+ end
80
+
81
+ def output_coverage
82
+ covered_resources
83
+ color("COVERED RESOURCES" , 32)
84
+ puts covered_resources
85
+ color("NOT COVERED AT ALL", 31)
86
+ puts uncovered_resources
87
+ color("PARTIALLY COVERED RESOURCES", 33)
88
+ partially_covered_resources.each do |resource, endpoints|
89
+ puts "#{resource}: #{endpoints.join(' ')}"
90
+ end
91
+ color("covered endpoints #{covered_endpoints_percentage} uncovered endpoints #{uncovered_endpoints_percentage}", 35)
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,19 @@
1
+ require 'coverage_reporter'
2
+ require "json"
3
+
4
+ module Minitest
5
+ def self.plugin_hammer_coverage_options(opts, options)
6
+ opts.on "-c", "--coverage", "Generate coverage reports for API endpoints" do
7
+ options[:coverage] = true
8
+ end
9
+ end
10
+
11
+ def self.plugin_hammer_coverage_init(options)
12
+ if options[:coverage]
13
+ Minitest.reporter.reporters.clear
14
+ Minitest.after_run do
15
+ Minitest::CoverageRunner.new("test/data/#{ FOREMAN_VERSION }/foreman_api.json").run_tests
16
+ end
17
+ end
18
+ end
19
+ end
@@ -39,12 +39,12 @@ describe HammerCLIForeman::ListCommand do
39
39
 
40
40
  it 'shows search fields in help' do
41
41
  result = run_cmd(cmd + params)
42
- result.out.must_match(/.*Search \/ Order fields:\s+(\S+\s+\S+)*\s+name\s+string/)
42
+ _(result.out).must_match(/.*Search \/ Order fields:\s+(\S+\s+\S+)*\s+name\s+string/)
43
43
  end
44
44
 
45
45
  it 'formats enum values' do
46
46
  result = run_cmd(cmd + params)
47
- result.out.must_match(/.*Search \/ Order fields:\s+(\S+\s+\S+)*\s+managed\s+Values: true, false/)
47
+ _(result.out).must_match(/.*Search \/ Order fields:\s+(\S+\s+\S+)*\s+managed\s+Values: true, false/)
48
48
  end
49
49
  end
50
50
 
@@ -53,7 +53,7 @@ describe HammerCLIForeman::ListCommand do
53
53
  it "fetches only first page when there's not enough records" do
54
54
  expect_paged_call(1, 1000, 10)
55
55
  result = run_cmd([], {}, TestList)
56
- result.exit_code.must_equal HammerCLI::EX_OK
56
+ _(result.exit_code).must_equal HammerCLI::EX_OK
57
57
  end
58
58
 
59
59
  it "fetches all records" do
@@ -62,27 +62,27 @@ describe HammerCLIForeman::ListCommand do
62
62
  expect_paged_call(3, per_page_all, 10)
63
63
 
64
64
  result = run_cmd([], {}, TestList)
65
- result.exit_code.must_equal HammerCLI::EX_OK
65
+ _(result.exit_code).must_equal HammerCLI::EX_OK
66
66
  end
67
67
 
68
68
  it "uses --per-page value" do
69
69
  per_page = 10
70
70
  expect_paged_call(1, per_page, 10)
71
71
  result = run_cmd(["--per-page=#{per_page}"], {}, TestList)
72
- result.exit_code.must_equal HammerCLI::EX_OK
72
+ _(result.exit_code).must_equal HammerCLI::EX_OK
73
73
  end
74
74
 
75
75
  it "uses both --per-page and --page value" do
76
76
  per_page = 10
77
77
  expect_paged_call(2, per_page, 10)
78
78
  result = run_cmd(["--per-page=#{per_page}", '--page=2'], {}, TestList)
79
- result.exit_code.must_equal HammerCLI::EX_OK
79
+ _(result.exit_code).must_equal HammerCLI::EX_OK
80
80
  end
81
81
 
82
82
  it "sets per_page to 20 when only --page is used" do
83
83
  expect_paged_call(2, 20, 10)
84
84
  result = run_cmd(['--page=2'], {}, TestList)
85
- result.exit_code.must_equal HammerCLI::EX_OK
85
+ _(result.exit_code).must_equal HammerCLI::EX_OK
86
86
  end
87
87
  end
88
88
 
@@ -96,20 +96,20 @@ describe HammerCLIForeman::ListCommand do
96
96
  per_page = 10
97
97
  expect_paged_call(1, per_page, 10)
98
98
  result = run_cmd(["--per-page=#{per_page}"], {}, TestList)
99
- result.exit_code.must_equal HammerCLI::EX_OK
99
+ _(result.exit_code).must_equal HammerCLI::EX_OK
100
100
  end
101
101
 
102
102
  it "respects per_page setting when the adapter allows pagination by default" do
103
103
  expect_paged_call(1, per_page_in_settings, 30)
104
104
  result = run_cmd([], { :adapter => :base, :interactive => false }, TestList)
105
- result.exit_code.must_equal HammerCLI::EX_OK
105
+ _(result.exit_code).must_equal HammerCLI::EX_OK
106
106
  end
107
107
 
108
108
  it "fetches all records when the adapter doesn't allow pagination by default" do
109
109
  expect_paged_call(1, per_page_all, 1000)
110
110
  expect_paged_call(2, per_page_all, 10)
111
111
  result = run_cmd([], { :adapter => :csv, :interactive => false }, TestList)
112
- result.exit_code.must_equal HammerCLI::EX_OK
112
+ _(result.exit_code).must_equal HammerCLI::EX_OK
113
113
  end
114
114
  end
115
115
  end
@@ -128,7 +128,7 @@ describe HammerCLIForeman::ListCommand do
128
128
 
129
129
  result = run_cmd([], {}, TestListWithOutput)
130
130
  assert_cmd(expected_result, result)
131
- result.out.wont_match pagination_line_re
131
+ _(result.out).wont_match pagination_line_re
132
132
  end
133
133
 
134
134
  it 'prints one page when --per-page is used' do
@@ -428,7 +428,7 @@ describe 'host config reports' do
428
428
  end.returns(index_response([report15]))
429
429
 
430
430
  result = run_cmd(['host', 'config-reports', '--id=1'])
431
- result.exit_code.must_equal HammerCLI::EX_OK
431
+ _(result.exit_code).must_equal HammerCLI::EX_OK
432
432
  end
433
433
 
434
434
  it 'filters reports by --name' do
@@ -437,7 +437,7 @@ describe 'host config reports' do
437
437
  end.returns(index_response([report15]))
438
438
 
439
439
  result = run_cmd(['host', 'config-reports', '--name=host.example.com'])
440
- result.exit_code.must_equal HammerCLI::EX_OK
440
+ _(result.exit_code).must_equal HammerCLI::EX_OK
441
441
  end
442
442
 
443
443
  it 'prints error or missing --id and --name' do
@@ -462,7 +462,7 @@ describe 'host config reports' do
462
462
  end.returns(index_response([report15]))
463
463
 
464
464
  result = run_cmd(['host', 'config-reports', '--name=host.example.com', '--search=reported > "2 hour ago"'])
465
- result.exit_code.must_equal HammerCLI::EX_OK
465
+ _(result.exit_code).must_equal HammerCLI::EX_OK
466
466
  end
467
467
  end
468
468
  describe 'disassociate host from vm' do
@@ -0,0 +1,104 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ describe 'realm' do
4
+ describe 'list' do
5
+ before do
6
+ @cmd = %w[realm list]
7
+ @realms =
8
+ [{
9
+ id: 1,
10
+ name: 'test-realm' }]
11
+ end
12
+
13
+ it 'should return a list of realms' do
14
+ api_expects(:realms, :index, 'List realms').returns(@realms)
15
+
16
+ result = run_cmd(@cmd)
17
+ _(result.exit_code).must_equal HammerCLI::EX_OK
18
+ end
19
+ end
20
+
21
+ describe 'info' do
22
+ before do
23
+ @cmd = %w[realm info]
24
+ @realm = {
25
+ id: 1,
26
+ name: 'test-realm'
27
+ }
28
+ end
29
+
30
+ it 'should return a realm' do
31
+ params = ['--id=1']
32
+ api_expects(:realms, :show, 'Show realm').returns(@realm)
33
+
34
+ result = run_cmd(@cmd + params)
35
+ _(result.exit_code).must_equal HammerCLI::EX_OK
36
+ end
37
+ end
38
+
39
+ describe 'create' do
40
+ before do
41
+ @cmd = %w[realm create]
42
+ end
43
+
44
+ it 'should print error on missing --name, --realm-proxy-id, --realm-type' do
45
+ expected_result = "Could not create the realm:\n Missing arguments for '--name', '--realm-proxy-id', '--realm-type'.\n"
46
+
47
+ api_expects_no_call
48
+ result = run_cmd(@cmd)
49
+ assert_match(expected_result, result.err)
50
+ end
51
+
52
+ it 'should create a realm' do
53
+ params = %w[--name=test-realm --realm-proxy-id=12345 --realm-type=FreeIPA]
54
+
55
+ api_expects(:realms, :create, 'Create a realm') do |params|
56
+ (params['realm']['name'] == 'test-realm' &&
57
+ params['realm']['realm_proxy_id'] == 12345 &&
58
+ params['realm']['realm_type'] == 'FreeIPA')
59
+ end
60
+
61
+ result = run_cmd(@cmd + params)
62
+
63
+ assert_cmd(success_result("Realm [%{name}] created.\n"), result)
64
+ end
65
+ end
66
+
67
+ describe 'delete' do
68
+ before do
69
+ @cmd = %w[realm delete]
70
+ end
71
+
72
+ it 'should delete a realm' do
73
+ params = ['--id=1']
74
+
75
+ api_expects(:realms, :destroy, 'Delete realm').with_params(id: '1')
76
+
77
+ result = run_cmd(@cmd + params)
78
+ assert_cmd(success_result("Realm [%{name}] deleted.\n"), result)
79
+ end
80
+ end
81
+
82
+ describe 'update' do
83
+ before do
84
+ @cmd = %w[realm update]
85
+ @realm = {
86
+ id: 1,
87
+ name: 'test-realm-update'
88
+ }
89
+ end
90
+
91
+ it 'should update a realm' do
92
+ params = %w[--id=1 --new-name=test-realm-update]
93
+
94
+ api_expects(:realms, :update, 'Update a realm') do |params|
95
+ (params['id'] == '1' &&
96
+ params['name'] == 'test-realm-update')
97
+ end
98
+
99
+ result = run_cmd(@cmd + params)
100
+ assert_cmd(success_result("Realm [%{name}] updated.\n"), result)
101
+ end
102
+ end
103
+ end
104
+