wavefront-cli 4.2.1 → 4.3.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 (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