wavefront-cli 4.2.1 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +1 -0
  3. data/.rubocop.yml +1 -14
  4. data/.travis.yml +4 -4
  5. data/Gemfile +2 -0
  6. data/HISTORY.md +82 -60
  7. data/Rakefile +2 -0
  8. data/bin/wf +1 -0
  9. data/lib/wavefront-cli/alert.rb +13 -5
  10. data/lib/wavefront-cli/apitoken.rb +2 -0
  11. data/lib/wavefront-cli/base.rb +95 -47
  12. data/lib/wavefront-cli/cloudintegration.rb +6 -0
  13. data/lib/wavefront-cli/command_mixins/acl.rb +6 -1
  14. data/lib/wavefront-cli/command_mixins/tag.rb +2 -0
  15. data/lib/wavefront-cli/commands/.rubocop.yml +3 -4
  16. data/lib/wavefront-cli/commands/alert.rb +2 -1
  17. data/lib/wavefront-cli/commands/apitoken.rb +6 -0
  18. data/lib/wavefront-cli/commands/base.rb +30 -21
  19. data/lib/wavefront-cli/commands/cloudintegration.rb +2 -0
  20. data/lib/wavefront-cli/commands/config.rb +2 -0
  21. data/lib/wavefront-cli/commands/dashboard.rb +2 -0
  22. data/lib/wavefront-cli/commands/derivedmetric.rb +2 -0
  23. data/lib/wavefront-cli/commands/event.rb +3 -1
  24. data/lib/wavefront-cli/commands/integration.rb +2 -1
  25. data/lib/wavefront-cli/commands/link.rb +2 -0
  26. data/lib/wavefront-cli/commands/message.rb +2 -0
  27. data/lib/wavefront-cli/commands/metric.rb +2 -0
  28. data/lib/wavefront-cli/commands/notificant.rb +2 -0
  29. data/lib/wavefront-cli/commands/proxy.rb +2 -0
  30. data/lib/wavefront-cli/commands/query.rb +2 -0
  31. data/lib/wavefront-cli/commands/savedsearch.rb +2 -0
  32. data/lib/wavefront-cli/commands/serviceaccount.rb +58 -0
  33. data/lib/wavefront-cli/commands/settings.rb +2 -0
  34. data/lib/wavefront-cli/commands/source.rb +3 -1
  35. data/lib/wavefront-cli/commands/user.rb +4 -1
  36. data/lib/wavefront-cli/commands/usergroup.rb +3 -0
  37. data/lib/wavefront-cli/commands/webhook.rb +2 -0
  38. data/lib/wavefront-cli/commands/window.rb +2 -0
  39. data/lib/wavefront-cli/commands/write.rb +2 -0
  40. data/lib/wavefront-cli/config.rb +23 -12
  41. data/lib/wavefront-cli/constants.rb +10 -4
  42. data/lib/wavefront-cli/controller.rb +53 -22
  43. data/lib/wavefront-cli/dashboard.rb +3 -0
  44. data/lib/wavefront-cli/derivedmetric.rb +12 -11
  45. data/lib/wavefront-cli/display/alert.rb +7 -4
  46. data/lib/wavefront-cli/display/apitoken.rb +2 -0
  47. data/lib/wavefront-cli/display/base.rb +34 -8
  48. data/lib/wavefront-cli/display/cloudintegration.rb +4 -2
  49. data/lib/wavefront-cli/display/dashboard.rb +2 -0
  50. data/lib/wavefront-cli/display/derivedmetric.rb +2 -0
  51. data/lib/wavefront-cli/display/distribution.rb +2 -0
  52. data/lib/wavefront-cli/display/event.rb +2 -0
  53. data/lib/wavefront-cli/display/externallink.rb +2 -0
  54. data/lib/wavefront-cli/display/integration.rb +2 -0
  55. data/lib/wavefront-cli/display/maintenancewindow.rb +2 -0
  56. data/lib/wavefront-cli/display/message.rb +7 -3
  57. data/lib/wavefront-cli/display/metric.rb +3 -1
  58. data/lib/wavefront-cli/display/notificant.rb +3 -1
  59. data/lib/wavefront-cli/display/printer/long.rb +36 -11
  60. data/lib/wavefront-cli/display/printer/sparkline.rb +3 -0
  61. data/lib/wavefront-cli/display/printer/terse.rb +6 -1
  62. data/lib/wavefront-cli/display/proxy.rb +2 -0
  63. data/lib/wavefront-cli/display/query.rb +35 -24
  64. data/lib/wavefront-cli/display/savedsearch.rb +2 -0
  65. data/lib/wavefront-cli/display/serviceaccount.rb +60 -0
  66. data/lib/wavefront-cli/display/settings.rb +2 -0
  67. data/lib/wavefront-cli/display/source.rb +18 -4
  68. data/lib/wavefront-cli/display/user.rb +56 -10
  69. data/lib/wavefront-cli/display/usergroup.rb +25 -19
  70. data/lib/wavefront-cli/display/webhook.rb +2 -0
  71. data/lib/wavefront-cli/display/write.rb +6 -2
  72. data/lib/wavefront-cli/event.rb +83 -62
  73. data/lib/wavefront-cli/exception.rb +3 -0
  74. data/lib/wavefront-cli/externallink.rb +6 -4
  75. data/lib/wavefront-cli/integration.rb +2 -0
  76. data/lib/wavefront-cli/maintenancewindow.rb +28 -17
  77. data/lib/wavefront-cli/message.rb +4 -0
  78. data/lib/wavefront-cli/metric.rb +4 -1
  79. data/lib/wavefront-cli/notificant.rb +2 -0
  80. data/lib/wavefront-cli/opt_handler.rb +2 -0
  81. data/lib/wavefront-cli/output/base.rb +8 -3
  82. data/lib/wavefront-cli/output/csv.rb +2 -0
  83. data/lib/wavefront-cli/output/csv/base.rb +2 -0
  84. data/lib/wavefront-cli/output/csv/query.rb +14 -7
  85. data/lib/wavefront-cli/output/hcl.rb +2 -0
  86. data/lib/wavefront-cli/output/hcl/alert.rb +2 -0
  87. data/lib/wavefront-cli/output/hcl/base.rb +10 -4
  88. data/lib/wavefront-cli/output/hcl/dashboard.rb +17 -8
  89. data/lib/wavefront-cli/output/hcl/notificant.rb +2 -0
  90. data/lib/wavefront-cli/output/hcl/stdlib/array.rb +2 -0
  91. data/lib/wavefront-cli/output/hcl/stdlib/string.rb +2 -0
  92. data/lib/wavefront-cli/output/json.rb +2 -0
  93. data/lib/wavefront-cli/output/ruby.rb +2 -0
  94. data/lib/wavefront-cli/output/wavefront.rb +2 -0
  95. data/lib/wavefront-cli/output/wavefront/query.rb +7 -4
  96. data/lib/wavefront-cli/output/yaml.rb +2 -0
  97. data/lib/wavefront-cli/proxy.rb +15 -3
  98. data/lib/wavefront-cli/query.rb +14 -12
  99. data/lib/wavefront-cli/savedsearch.rb +2 -0
  100. data/lib/wavefront-cli/serviceaccount.rb +179 -0
  101. data/lib/wavefront-cli/settings.rb +2 -0
  102. data/lib/wavefront-cli/source.rb +2 -0
  103. data/lib/wavefront-cli/stdlib/array.rb +3 -0
  104. data/lib/wavefront-cli/stdlib/string.rb +17 -11
  105. data/lib/wavefront-cli/user.rb +10 -4
  106. data/lib/wavefront-cli/usergroup.rb +4 -2
  107. data/lib/wavefront-cli/version.rb +3 -1
  108. data/lib/wavefront-cli/webhook.rb +2 -0
  109. data/lib/wavefront-cli/write.rb +80 -46
  110. data/spec/.rubocop.yml +3 -16
  111. data/spec/constants.rb +21 -0
  112. data/spec/spec_helper.rb +8 -422
  113. data/spec/support/command_base.rb +82 -0
  114. data/spec/support/minitest_assertions.rb +262 -0
  115. data/spec/support/output_tester.rb +32 -0
  116. data/spec/support/supported_commands.rb +19 -0
  117. data/spec/test_mixins/acl.rb +169 -0
  118. data/spec/test_mixins/delete.rb +25 -0
  119. data/spec/test_mixins/deleteundelete.rb +106 -0
  120. data/spec/test_mixins/describe.rb +24 -0
  121. data/spec/test_mixins/dump.rb +43 -0
  122. data/spec/test_mixins/general.rb +11 -0
  123. data/spec/test_mixins/history.rb +35 -0
  124. data/spec/test_mixins/import.rb +65 -0
  125. data/spec/test_mixins/list.rb +29 -0
  126. data/spec/test_mixins/search.rb +98 -0
  127. data/spec/test_mixins/set.rb +47 -0
  128. data/spec/test_mixins/tag.rb +99 -0
  129. data/spec/wavefront-cli/alert_spec.rb +288 -111
  130. data/spec/wavefront-cli/apitoken_spec.rb +53 -24
  131. data/spec/wavefront-cli/base_spec.rb +9 -27
  132. data/spec/wavefront-cli/cloudintegration_spec.rb +65 -29
  133. data/spec/wavefront-cli/commands/alert_spec.rb +1 -0
  134. data/spec/wavefront-cli/commands/base_spec.rb +15 -13
  135. data/spec/wavefront-cli/commands/cloudintegration_spec.rb +1 -0
  136. data/spec/wavefront-cli/commands/config_spec.rb +3 -0
  137. data/spec/wavefront-cli/commands/dashboard_spec.rb +1 -0
  138. data/spec/wavefront-cli/commands/derivedmetric_spec.rb +1 -0
  139. data/spec/wavefront-cli/commands/event_spec.rb +1 -0
  140. data/spec/wavefront-cli/commands/link_spec.rb +1 -0
  141. data/spec/wavefront-cli/commands/message_spec.rb +1 -0
  142. data/spec/wavefront-cli/commands/metric_spec.rb +1 -0
  143. data/spec/wavefront-cli/commands/proxy_spec.rb +1 -0
  144. data/spec/wavefront-cli/commands/query_spec.rb +1 -0
  145. data/spec/wavefront-cli/commands/webhook_spec.rb +1 -0
  146. data/spec/wavefront-cli/commands/window_spec.rb +1 -0
  147. data/spec/wavefront-cli/commands/write_spec.rb +1 -0
  148. data/spec/wavefront-cli/config_spec.rb +25 -14
  149. data/spec/wavefront-cli/controller_spec.rb +13 -3
  150. data/spec/wavefront-cli/dashboard_spec.rb +125 -76
  151. data/spec/wavefront-cli/derivedmetric_spec.rb +83 -67
  152. data/spec/wavefront-cli/display/base_spec.rb +5 -7
  153. data/spec/wavefront-cli/display/printer/long_spec.rb +20 -16
  154. data/spec/wavefront-cli/display/printer/terse_spec.rb +5 -4
  155. data/spec/wavefront-cli/event_spec.rb +360 -18
  156. data/spec/wavefront-cli/externallink_spec.rb +92 -58
  157. data/spec/wavefront-cli/integration_spec.rb +129 -31
  158. data/spec/wavefront-cli/maintenancewindow_spec.rb +270 -32
  159. data/spec/wavefront-cli/message_spec.rb +73 -30
  160. data/spec/wavefront-cli/metric_spec.rb +60 -22
  161. data/spec/wavefront-cli/notificant_spec.rb +45 -32
  162. data/spec/wavefront-cli/opt_handler_spec.rb +4 -1
  163. data/spec/wavefront-cli/output/csv/query_spec.rb +21 -19
  164. data/spec/wavefront-cli/output/csv_spec.rb +5 -2
  165. data/spec/wavefront-cli/output/hcl_spec.rb +5 -2
  166. data/spec/wavefront-cli/output/helpers.rb +18 -0
  167. data/spec/wavefront-cli/output/json_spec.rb +3 -1
  168. data/spec/wavefront-cli/output/ruby_spec.rb +3 -1
  169. data/spec/wavefront-cli/output/wavefront/query_spec.rb +3 -1
  170. data/spec/wavefront-cli/output/wavefront_spec.rb +6 -4
  171. data/spec/wavefront-cli/output/yaml_spec.rb +3 -1
  172. data/spec/wavefront-cli/proxy_spec.rb +49 -27
  173. data/spec/wavefront-cli/query_spec.rb +174 -92
  174. data/spec/wavefront-cli/resources/responses/query.json +1 -0
  175. data/spec/wavefront-cli/resources/updates/alert.json +15 -0
  176. data/spec/wavefront-cli/resources/updates/dashboard.json +1 -0
  177. data/spec/wavefront-cli/savedsearch_spec.rb +35 -18
  178. data/spec/wavefront-cli/serviceaccount_spec.rb +399 -0
  179. data/spec/wavefront-cli/settings_spec.rb +42 -11
  180. data/spec/wavefront-cli/source_spec.rb +120 -23
  181. data/spec/wavefront-cli/stdlib/array_spec.rb +2 -1
  182. data/spec/wavefront-cli/stdlib/string_spec.rb +9 -6
  183. data/spec/wavefront-cli/user_spec.rb +278 -108
  184. data/spec/wavefront-cli/usergroup_spec.rb +152 -102
  185. data/spec/wavefront-cli/webhook_spec.rb +30 -15
  186. data/spec/wavefront-cli/write_spec.rb +25 -1
  187. data/wavefront-cli.gemspec +5 -3
  188. metadata +65 -21
  189. data/spec/wavefront-cli/commands/spec_helper.rb +0 -3
  190. data/spec/wavefront-cli/display/spec_helper.rb +0 -3
@@ -0,0 +1,399 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../support/command_base'
5
+ require_relative '../../lib/wavefront-cli/serviceaccount'
6
+
7
+ # Ensure 'serviceaccount' commands produce the correct API calls.
8
+ #
9
+ # rubocop:disable Metrics/ClassLength
10
+ class ServiceAccountEndToEndTest < EndToEndTest
11
+ include WavefrontCliTest::Describe
12
+ # include WavefrontCliTest::Import
13
+ include WavefrontCliTest::Set
14
+ include WavefrontCliTest::Search
15
+
16
+ def test_list
17
+ quietly do
18
+ assert_cmd_gets('list', '/api/v2/account/serviceaccount')
19
+ end
20
+
21
+ assert_noop(
22
+ 'list',
23
+ 'uri: GET https://default.wavefront.com/api/v2/account/serviceaccount'
24
+ )
25
+ assert_abort_on_missing_creds('list')
26
+ end
27
+
28
+ def test_groups
29
+ quietly do
30
+ assert_cmd_gets("groups #{id}", "/api/v2/#{api_path}/#{id}")
31
+ end
32
+
33
+ assert_invalid_id("groups #{invalid_id}")
34
+ assert_usage('groups')
35
+
36
+ assert_noop(
37
+ "groups #{id}",
38
+ "uri: GET https://default.wavefront.com/api/v2/#{api_path}/#{id}"
39
+ )
40
+
41
+ assert_abort_on_missing_creds("groups #{id}")
42
+ end
43
+
44
+ def test_privileges
45
+ quietly do
46
+ assert_cmd_gets("privileges #{id}", "/api/v2/#{api_path}/#{id}")
47
+ end
48
+
49
+ assert_invalid_id("privileges #{invalid_id}")
50
+ assert_usage('privileges')
51
+
52
+ assert_noop(
53
+ "privileges #{id}",
54
+ "uri: GET https://default.wavefront.com/api/v2/#{api_path}/#{id}"
55
+ )
56
+
57
+ assert_abort_on_missing_creds("privileges #{id}")
58
+ end
59
+
60
+ def test_activate
61
+ assert_repeated_output("Activated service account 'sa::test-id'.") do
62
+ assert_cmd_posts("activate #{id}",
63
+ "/api/v2/account/serviceaccount/#{id}/activate")
64
+ end
65
+
66
+ assert_invalid_id("activate #{invalid_id}")
67
+ assert_abort_on_missing_creds("activate #{id}")
68
+ assert_usage('activate')
69
+ end
70
+
71
+ def test_deactivate
72
+ assert_repeated_output("Deactivated service account 'sa::test-id'.") do
73
+ assert_cmd_posts("deactivate #{id}",
74
+ "/api/v2/account/serviceaccount/#{id}/deactivate")
75
+ end
76
+
77
+ assert_invalid_id("deactivate #{invalid_id}")
78
+ assert_abort_on_missing_creds("deactivate #{id}")
79
+ assert_usage('deactivate')
80
+ end
81
+
82
+ def test_create_without_options
83
+ quietly do
84
+ assert_cmd_posts("create #{id}",
85
+ '/api/v2/account/serviceaccount',
86
+ identifier: id,
87
+ active: true,
88
+ groups: [],
89
+ tokens: [],
90
+ userGroups: [])
91
+ end
92
+
93
+ assert_noop(
94
+ "create #{id}",
95
+ 'uri: POST https://default.wavefront.com/api/v2/account/serviceaccount',
96
+ 'body: ' + { identifier: id,
97
+ active: true,
98
+ groups: [],
99
+ tokens: [],
100
+ userGroups: [] }.to_json
101
+ )
102
+
103
+ assert_abort_on_missing_creds("create #{id}")
104
+ assert_usage('create')
105
+ end
106
+
107
+ def test_create_inactive_account_with_description
108
+ quietly do
109
+ assert_cmd_posts("create -d words -I #{id}",
110
+ '/api/v2/account/serviceaccount',
111
+ identifier: id,
112
+ description: 'words',
113
+ active: false,
114
+ groups: [],
115
+ tokens: [],
116
+ userGroups: [])
117
+ end
118
+ end
119
+
120
+ def test_create_account_in_usergroups
121
+ quietly do
122
+ assert_cmd_posts("create -g #{usergroups[0]} -g #{usergroups[1]} #{id}",
123
+ '/api/v2/account/serviceaccount',
124
+ identifier: id,
125
+ active: true,
126
+ groups: [],
127
+ tokens: [],
128
+ userGroups: usergroups)
129
+ end
130
+ end
131
+
132
+ def test_create_account_with_tokens
133
+ quietly do
134
+ assert_cmd_posts("create -k #{tokens[0]} -k #{tokens[1]} #{id}",
135
+ '/api/v2/account/serviceaccount',
136
+ identifier: id,
137
+ active: true,
138
+ groups: [],
139
+ tokens: tokens,
140
+ userGroups: [])
141
+ end
142
+ end
143
+
144
+ def test_create_account_with_permissions
145
+ quietly do
146
+ assert_cmd_posts("create -m #{permissions[0]} -m #{permissions[1]} #{id}",
147
+ '/api/v2/account/serviceaccount',
148
+ identifier: id,
149
+ active: true,
150
+ groups: permissions,
151
+ tokens: [],
152
+ userGroups: [])
153
+ end
154
+ end
155
+
156
+ def test_create_invalid_usergroup
157
+ assert_exits_with('Unable to run command. Invalid usergroup ID.',
158
+ "create -g abcdefg #{id}")
159
+ end
160
+
161
+ def test_create_invalid_permission
162
+ assert_exits_with('Unable to run command. Invalid permission.',
163
+ "create -m 123456 #{id}")
164
+ end
165
+
166
+ def test_create_invalid_token
167
+ assert_exits_with('Unable to run command. Invalid API token.',
168
+ "create -k abcdefg #{id}")
169
+ end
170
+
171
+ def test_dump
172
+ _out = capture_io do
173
+ assert_raises(SystemExit) do
174
+ assert_cmd_gets('dump --format=json', '/api/v2/account/serviceaccount')
175
+ end
176
+ end
177
+
178
+ assert_cannot_noop('dump --format=json')
179
+ end
180
+
181
+ def test_join
182
+ assert_repeated_output(
183
+ '2659191e-aad4-4302-a94e-9667e1517127 (Everyone)'
184
+ ) do
185
+ all_permutations do |p|
186
+ get_stub = stub_request(
187
+ :get,
188
+ "https://#{p[:endpoint]}/api/v2/account/serviceaccount/#{id}"
189
+ ).to_return(body: canned_response.to_json, status: 200)
190
+
191
+ put_stub = stub_request(
192
+ :put,
193
+ "https://#{p[:endpoint]}/api/v2/account/serviceaccount/#{id}"
194
+ ).with(body: { tokens: [],
195
+ userGroups: usergroups,
196
+ groups: %w[events_management dashboard_management],
197
+ description: 'some information',
198
+ active: true,
199
+ identifier: 'sa::test' })
200
+ .to_return(body: canned_response.to_json, status: 200)
201
+
202
+ wf.new("serviceaccount join #{id} #{usergroups[1]} " \
203
+ "#{p[:cmdline]}".split)
204
+
205
+ assert_requested(get_stub, times: 2)
206
+ assert_requested(put_stub)
207
+ end
208
+ end
209
+ end
210
+
211
+ # rubocop:disable Metrics/MethodLength
212
+ # rubocop:disable Metrics/BlockLength
213
+ def test_leave
214
+ assert_repeated_output(
215
+ '2659191e-aad4-4302-a94e-9667e1517127 (Everyone)'
216
+ ) do
217
+ all_permutations do |p|
218
+ get_stub = stub_request(
219
+ :get,
220
+ "https://#{p[:endpoint]}/api/v2/account/serviceaccount/#{id}"
221
+ ).to_return(
222
+ body: { tokens: [],
223
+ userGroups: [{ id: usergroups[0],
224
+ name: 'Everyone',
225
+ permissions: [],
226
+ customer: 'sysdef',
227
+ properties: { nameEditable: false,
228
+ permissionsEditable: true,
229
+ usersEditable: false },
230
+ description: 'System group' },
231
+ { id: usergroups[1],
232
+ name: 'newgroup',
233
+ permissions: [],
234
+ customer: 'sysdef' }],
235
+ active: true,
236
+ groups: %w[events_management dashboard_management],
237
+ description: 'some information',
238
+ identifier: 'sa::test' }.to_json, status: 200
239
+ )
240
+
241
+ put_stub = stub_request(
242
+ :put,
243
+ "https://#{p[:endpoint]}/api/v2/account/serviceaccount/#{id}"
244
+ ).with(body: { tokens: [],
245
+ userGroups: [usergroups[0]],
246
+ groups: %w[events_management dashboard_management],
247
+ description: 'some information',
248
+ active: true,
249
+ identifier: 'sa::test' })
250
+ .to_return(body: canned_response.to_json, status: 200)
251
+
252
+ wf.new("serviceaccount leave #{id} #{usergroups[1]} " \
253
+ "#{p[:cmdline]}".split)
254
+
255
+ assert_requested(get_stub, times: 2)
256
+ assert_requested(put_stub)
257
+ end
258
+ end
259
+ end
260
+ # rubocop:enable Metrics/BlockLength
261
+ # rubocop:enable Metrics/MethodLength
262
+
263
+ def test_grant_to
264
+ quietly do
265
+ all_permutations do |p|
266
+ get_stub = stub_request(
267
+ :get,
268
+ "https://#{p[:endpoint]}/api/v2/account/serviceaccount/#{id}"
269
+ ).to_return(body: canned_response.to_json, status: 200)
270
+
271
+ put_stub = stub_request(
272
+ :put,
273
+ "https://#{p[:endpoint]}/api/v2/account/serviceaccount/#{id}"
274
+ ).with(body: { tokens: [],
275
+ userGroups: [usergroups[0]],
276
+ groups: %w[events_management
277
+ dashboard_management
278
+ alerts_management],
279
+ description: 'some information',
280
+ active: true,
281
+ identifier: 'sa::test' })
282
+ .to_return(body: canned_response.to_json, status: 200)
283
+
284
+ wf.new("serviceaccount grant alerts_management to #{id} " \
285
+ "#{p[:cmdline]}".split)
286
+
287
+ assert_requested(get_stub, times: 2)
288
+ assert_requested(put_stub)
289
+ end
290
+ end
291
+ end
292
+
293
+ def test_revoke_from
294
+ quietly do
295
+ all_permutations do |p|
296
+ get_stub = stub_request(
297
+ :get,
298
+ "https://#{p[:endpoint]}/api/v2/account/serviceaccount/#{id}"
299
+ ).to_return(body: canned_response.to_json, status: 200)
300
+
301
+ put_stub = stub_request(
302
+ :put,
303
+ "https://#{p[:endpoint]}/api/v2/account/serviceaccount/#{id}"
304
+ ).with(body: { tokens: [],
305
+ userGroups: [usergroups[0]],
306
+ groups: %w[events_management],
307
+ description: 'some information',
308
+ active: true,
309
+ identifier: 'sa::test' })
310
+ .to_return(body: canned_response.to_json, status: 200)
311
+
312
+ wf.new("serviceaccount revoke dashboard_management from #{id} " \
313
+ "#{p[:cmdline]}".split)
314
+
315
+ assert_requested(get_stub, times: 2)
316
+ assert_requested(put_stub)
317
+ end
318
+ end
319
+ end
320
+
321
+ # Override this method from the set helper: we don't pass an ID with service
322
+ # accounts
323
+
324
+ def _set_put_stub(perm)
325
+ stub_request(:put, "https://#{perm[:endpoint]}/api/v2/#{api_path}/#{id}")
326
+ .with(body: { set_key => 'new_value' },
327
+ headers: mk_headers(perm[:token]))
328
+ .to_return(status: 200, body: '', headers: {})
329
+ end
330
+
331
+ private
332
+
333
+ def id
334
+ 'sa::test-id'
335
+ end
336
+
337
+ def invalid_id
338
+ '__BAD__'
339
+ end
340
+
341
+ def cmd_word
342
+ 'serviceaccount'
343
+ end
344
+
345
+ def api_path
346
+ 'account/serviceaccount'
347
+ end
348
+
349
+ def search_api_path
350
+ 'serviceaccount'
351
+ end
352
+
353
+ def sdk_class_name
354
+ 'ServiceAccount'
355
+ end
356
+
357
+ def friendly_name
358
+ 'service account'
359
+ end
360
+
361
+ def permissions
362
+ %w[alerts_management events_management]
363
+ end
364
+
365
+ def tokens
366
+ %w[3d986e9e-9ab7-492b-89d5-15bb38d95674
367
+ 30cac18a-4ebc-4204-ae09-34270d9f50e5]
368
+ end
369
+
370
+ def usergroups
371
+ %w[2659191e-aad4-4302-a94e-9667e1517127
372
+ abcdef12-1234-abcd-1234-abcdef012345]
373
+ end
374
+
375
+ def import_fields
376
+ %i[identifier description active tokens groups userGroups]
377
+ end
378
+
379
+ def set_key
380
+ 'description'
381
+ end
382
+
383
+ def canned_response
384
+ { tokens: [],
385
+ userGroups: [{ id: usergroups[0],
386
+ name: 'Everyone',
387
+ permissions: [],
388
+ customer: 'sysdef',
389
+ properties: { nameEditable: false,
390
+ permissionsEditable: true,
391
+ usersEditable: false },
392
+ description: 'System group which contains all users' }],
393
+ active: true,
394
+ groups: %w[events_management dashboard_management],
395
+ description: 'some information',
396
+ identifier: 'sa::test' }
397
+ end
398
+ end
399
+ # rubocop:enable Metrics/ClassLength
@@ -1,19 +1,50 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require_relative '../spec_helper'
4
+ require_relative '../support/command_base'
4
5
  require_relative '../../lib/wavefront-cli/settings'
5
6
 
6
- word = 'settings'
7
+ # Tests for the settings command
8
+ #
9
+ class SettingsEndToEndTest < EndToEndTest
10
+ def test_list_permissions
11
+ quietly do
12
+ assert_cmd_gets('list permissions', '/api/v2/customer/permissions')
13
+ end
7
14
 
8
- describe "#{word} command" do
9
- missing_creds(word, ['list permissions', 'show preferences',
10
- 'default usergroups'])
11
- cmd_to_call(word, 'list permissions',
12
- path: '/api/v2/customer/permissions')
15
+ assert_abort_on_missing_creds('list permissions')
16
+ assert_usage('list')
17
+ assert_noop('list permissions',
18
+ 'uri: GET https://default.wavefront.com/api/v2/' \
19
+ 'customer/permissions')
20
+ end
13
21
 
14
- cmd_to_call(word, 'show preferences',
15
- path: '/api/v2/customer/preferences')
22
+ def test_show_preferences
23
+ quietly do
24
+ assert_cmd_gets('show preferences', '/api/v2/customer/preferences')
25
+ end
16
26
 
17
- cmd_to_call(word, 'default usergroups',
18
- path: '/api/v2/customer/preferences/defaultUserGroups')
27
+ assert_abort_on_missing_creds('show preferences')
28
+ assert_noop('show preferences',
29
+ 'uri: GET https://default.wavefront.com/api/v2/' \
30
+ 'customer/preferences')
31
+ end
32
+
33
+ def test_default_usergroups
34
+ quietly do
35
+ assert_cmd_gets('default usergroups',
36
+ '/api/v2/customer/preferences/defaultUserGroups')
37
+ end
38
+
39
+ assert_abort_on_missing_creds('default usergroups')
40
+ assert_noop('default usergroups',
41
+ 'uri: GET https://default.wavefront.com/api/v2/' \
42
+ 'customer/preferences/defaultUserGroups')
43
+ end
44
+
45
+ private
46
+
47
+ def cmd_word
48
+ 'settings'
49
+ end
19
50
  end