wavefront-cli 0.0.5 → 1.0.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 (81) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -1
  3. data/Gemfile +1 -1
  4. data/README.md +21 -21
  5. data/Rakefile +2 -2
  6. data/bin/{wavefront → wf} +6 -2
  7. data/lib/wavefront-cli/alert.rb +7 -6
  8. data/lib/wavefront-cli/base.rb +27 -6
  9. data/lib/wavefront-cli/commands/alert.rb +2 -1
  10. data/lib/wavefront-cli/commands/base.rb +54 -29
  11. data/lib/wavefront-cli/commands/dashboard.rb +1 -0
  12. data/lib/wavefront-cli/commands/event.rb +7 -3
  13. data/lib/wavefront-cli/commands/integration.rb +2 -1
  14. data/lib/wavefront-cli/commands/link.rb +2 -2
  15. data/lib/wavefront-cli/commands/proxy.rb +2 -1
  16. data/lib/wavefront-cli/commands/savedsearch.rb +2 -1
  17. data/lib/wavefront-cli/commands/source.rb +3 -2
  18. data/lib/wavefront-cli/commands/webhook.rb +2 -1
  19. data/lib/wavefront-cli/commands/window.rb +2 -1
  20. data/lib/wavefront-cli/commands/write.rb +10 -6
  21. data/lib/wavefront-cli/constants.rb +1 -1
  22. data/lib/wavefront-cli/controller.rb +6 -4
  23. data/lib/wavefront-cli/dashboard.rb +6 -6
  24. data/lib/wavefront-cli/display/alert.rb +8 -4
  25. data/lib/wavefront-cli/display/base.rb +115 -170
  26. data/lib/wavefront-cli/display/cloudintegration.rb +2 -2
  27. data/lib/wavefront-cli/display/event.rb +1 -1
  28. data/lib/wavefront-cli/display/maintenancewindow.rb +1 -1
  29. data/lib/wavefront-cli/display/metric.rb +6 -7
  30. data/lib/wavefront-cli/display/printer/base.rb +24 -0
  31. data/lib/wavefront-cli/display/printer/long.rb +186 -0
  32. data/lib/wavefront-cli/display/printer/terse.rb +55 -0
  33. data/lib/wavefront-cli/display/query.rb +1 -2
  34. data/lib/wavefront-cli/display/savedsearch.rb +1 -1
  35. data/lib/wavefront-cli/display/source.rb +7 -3
  36. data/lib/wavefront-cli/display/webhook.rb +3 -4
  37. data/lib/wavefront-cli/event.rb +62 -23
  38. data/lib/wavefront-cli/exception.rb +1 -1
  39. data/lib/wavefront-cli/opt_handler.rb +6 -6
  40. data/lib/wavefront-cli/query.rb +5 -6
  41. data/lib/wavefront-cli/source.rb +5 -1
  42. data/lib/wavefront-cli/string.rb +59 -0
  43. data/lib/wavefront-cli/version.rb +1 -1
  44. data/lib/wavefront-cli/write.rb +4 -1
  45. data/spec/spec_helper.rb +1 -1
  46. data/spec/wavefront-cli/alert_spec.rb +16 -5
  47. data/spec/wavefront-cli/base_spec.rb +5 -2
  48. data/spec/wavefront-cli/cli_help_spec.rb +7 -5
  49. data/spec/wavefront-cli/cloudintegration_spec.rb +9 -0
  50. data/spec/wavefront-cli/commands/alert_spec.rb +16 -0
  51. data/spec/wavefront-cli/commands/base_spec.rb +133 -0
  52. data/spec/wavefront-cli/commands/dashboard_spec.rb +16 -0
  53. data/spec/wavefront-cli/commands/event_spec.rb +17 -0
  54. data/spec/wavefront-cli/commands/integration_spec.rb +21 -0
  55. data/spec/wavefront-cli/commands/link_spec.rb +21 -0
  56. data/spec/wavefront-cli/commands/message_spec.rb +16 -0
  57. data/spec/wavefront-cli/commands/metric_spec.rb +16 -0
  58. data/spec/wavefront-cli/commands/proxy_spec.rb +16 -0
  59. data/spec/wavefront-cli/commands/query_spec.rb +16 -0
  60. data/spec/wavefront-cli/commands/spec_helper.rb +4 -0
  61. data/spec/wavefront-cli/commands/webhook_spec.rb +16 -0
  62. data/spec/wavefront-cli/commands/window_spec.rb +21 -0
  63. data/spec/wavefront-cli/commands/write_spec.rb +17 -0
  64. data/spec/wavefront-cli/dashboard_spec.rb +14 -4
  65. data/spec/wavefront-cli/display/base_spec.rb +162 -0
  66. data/spec/wavefront-cli/display/printer/base_spec.rb +20 -0
  67. data/spec/wavefront-cli/display/printer/long_spec.rb +137 -0
  68. data/spec/wavefront-cli/display/printer/terse_spec.rb +46 -0
  69. data/spec/wavefront-cli/display/spec_helper.rb +5 -0
  70. data/spec/wavefront-cli/event_spec.rb +9 -0
  71. data/spec/wavefront-cli/externallink_spec.rb +9 -0
  72. data/spec/wavefront-cli/maintanancewindow_spec.rb +10 -0
  73. data/spec/wavefront-cli/proxy_spec.rb +9 -0
  74. data/spec/wavefront-cli/savedsearch_spec.rb +9 -0
  75. data/spec/wavefront-cli/source_spec.rb +13 -1
  76. data/spec/wavefront-cli/string_spec.rb +51 -0
  77. data/spec/wavefront-cli/user_spec.rb +2 -2
  78. data/spec/wavefront-cli/webhook_spec.rb +9 -0
  79. data/wavefront-cli.gemspec +5 -5
  80. metadata +59 -22
  81. data/Gemfile.lock +0 -65
@@ -26,6 +26,8 @@ DISP_DATA = {
26
26
  b: %w(list_1 list_2)
27
27
  }.freeze
28
28
 
29
+ # Test base class
30
+ #
29
31
  class WavefrontCliBaseTest < MiniTest::Test
30
32
  attr_reader :wf, :wf_cmd
31
33
 
@@ -37,11 +39,12 @@ class WavefrontCliBaseTest < MiniTest::Test
37
39
 
38
40
  def test_mk_creds
39
41
  assert_equal wf.mk_creds, endpoint: 'test.wavefront.com',
40
- token: '0123456789-ABCDEF'
42
+ token: '0123456789-ABCDEF',
43
+ agent: "wavefront-cli-#{WF_CLI_VERSION}"
41
44
  end
42
45
 
43
46
  def test_dispatch
44
47
  assert_raises(WavefrontCli::Exception::UnhandledCommand) { wf.dispatch }
45
- #assert_equal(wf_cmd.dispatch, nil)
48
+ # assert_equal(wf_cmd.dispatch, nil)
46
49
  end
47
50
  end
@@ -11,8 +11,8 @@ class WavefrontCliHelpTest < MiniTest::Test
11
11
  rescue SystemExit => e
12
12
  assert_equal(1, e.status)
13
13
  assert_match(/^Usage/, e.message)
14
- assert_match(/^ wavefront --version$/, e.message)
15
- assert_match(/^ wavefront --help$/, e.message)
14
+ assert_match(/^ \w+ --version$/, e.message)
15
+ assert_match(/^ \w+ --help$/, e.message)
16
16
  end
17
17
 
18
18
  def test_version
@@ -27,20 +27,22 @@ class WavefrontCliHelpTest < MiniTest::Test
27
27
  rescue SystemExit => e
28
28
  assert_equal(1, e.status)
29
29
  assert_match(/^Commands:$/, e.message)
30
- CMDS.each do |cmd|
31
- assert_match(/^ #{cmd} /, e.message)
32
- end
30
+ CMDS.each { |cmd| assert_match(/^ #{cmd} /, e.message) }
33
31
  end
34
32
 
33
+ # rubocop:disable Metrics/AbcSize
34
+ # rubocop:disable Metrics/MethodLength
35
35
  def test_command_help
36
36
  CMDS.each do |cmd|
37
37
  begin
38
38
  WavefrontCliController.new([cmd, '--help'])
39
39
  rescue SystemExit => e
40
+ assert(e.message.split("\n").map(&:size).max <= TW)
40
41
  assert_equal(1, e.status)
41
42
  assert_match(/^Usage:/, e.message)
42
43
  assert_match(/^ #{CMD} #{cmd} /, e.message)
43
44
  assert_match(/^ #{CMD} #{cmd} --help$/, e.message)
45
+ next
44
46
  end
45
47
  end
46
48
  end
@@ -16,6 +16,15 @@ describe 'integration command' do
16
16
  { path: "/api/v2/cloudintegration/#{id}" }, k)
17
17
  cmd_to_call(word, "delete #{id}",
18
18
  { method: :delete, path: "/api/v2/cloudintegration/#{id}" }, k)
19
+ cmd_to_call(word, "search -L 100 id~#{id}",
20
+ { method: :post, path: "/api/v2/search/cloudintegration",
21
+ body: { limit: "100",
22
+ offset: 0,
23
+ query: [{key: 'id',
24
+ value: id,
25
+ matchingMethod: 'CONTAINS'}],
26
+ sort: {field: 'id', ascending: true}},
27
+ headers: JSON_POST_HEADERS }, WavefrontCli::CloudIntegration)
19
28
  cmd_to_call(word, "undelete #{id}",
20
29
  { method: :post,
21
30
  path: "/api/v2/cloudintegration/#{id}/undelete" }, k)
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require_relative(File.join('../../../lib/wavefront-cli/commands',
5
+ Pathname.new(__FILE__).basename
6
+ .to_s.sub('_spec.rb', '')))
7
+ require_relative './base_spec'
8
+
9
+ # Test Alert commands and options
10
+ #
11
+ class WavefrontCommmandAlertTest < WavefrontCommmandBaseTest
12
+ def setup
13
+ @wf = WavefrontCommandAlert.new
14
+ @col_width = 21
15
+ end
16
+ end
@@ -0,0 +1,133 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ CMD = 'test'.freeze
4
+
5
+ require 'pathname'
6
+ require_relative(File.join('../../../lib/wavefront-cli/commands',
7
+ Pathname.new(__FILE__).basename
8
+ .to_s.sub('_spec.rb', '')))
9
+ require_relative './spec_helper'
10
+
11
+ # Test base class for commands
12
+ #
13
+ class WavefrontCommmandBaseTest < MiniTest::Test
14
+ attr_reader :wf, :col_width, :skip_cmd
15
+
16
+ def setup
17
+ @wf = WavefrontCommandBase.new
18
+ @col_width = 18 # has to be manually set for each class
19
+ end
20
+
21
+ def word
22
+ self.class.name[17..-5]
23
+ end
24
+
25
+ def test_global_options
26
+ opts = wf.global_options
27
+ assert_instance_of(Array, opts)
28
+
29
+ opts.each do |o|
30
+ assert_instance_of(String, o)
31
+ assert_match(/^-\w, --\w+/, o)
32
+ refute o.end_with?('.')
33
+ end
34
+ end
35
+
36
+ def test_common_options
37
+ opts = wf.common_options
38
+ assert_instance_of(Array, opts)
39
+
40
+ opts.each do |o|
41
+ assert_instance_of(String, o)
42
+ assert_match(/^-\w, --\w+/, o)
43
+ refute o.end_with?('.')
44
+ end
45
+ end
46
+
47
+ def test_tag_commands
48
+ cmds = wf.tag_commands
49
+ assert_instance_of(Array, cmds)
50
+
51
+ cmds.each do |o|
52
+ assert_instance_of(String, o)
53
+ assert_match(/^tags* .* <id>/, o)
54
+ end
55
+ end
56
+
57
+ def test_word
58
+ assert_equal(wf.word, word.downcase)
59
+ end
60
+
61
+ def test_sdk_class
62
+ assert_equal(wf.sdk_class, word)
63
+ end
64
+
65
+ def test_sdk_file
66
+ assert_equal(wf.sdk_file, word.downcase)
67
+ end
68
+
69
+ # rubocop:disable Metrics/AbcSize
70
+ def test_commands
71
+ assert wf.commands.start_with?("Usage:\n")
72
+ assert wf.commands.match(/ --help$/)
73
+
74
+ wf.commands(600).split("\n")[1..-1].each do |c|
75
+ next if skip_cmd && c.match(skip_cmd)
76
+ assert_match(/^ \w+/, c)
77
+ assert_includes(c, CMN) unless c =~ /--help$/
78
+ end
79
+ end
80
+
81
+ def test_options
82
+ assert wf.options(600).start_with?("Global options:\n")
83
+ assert_match(/\nOptions:\n/, wf.options)
84
+
85
+ wf.options(600).split("\n")[1..-1].each do |o|
86
+ next if o == 'Global options:' || o == 'Options:' || o.empty?
87
+ assert_instance_of(String, o)
88
+ assert_match(/^ -\w, --\w+/, o)
89
+ refute o.end_with?('.')
90
+ end
91
+
92
+ assert_equal(wf.options.split("\n").select(&:empty?).size, 1)
93
+ end
94
+
95
+ # rubocop:disable Metrics/MethodLength
96
+ def test_opt_row
97
+ assert_equal(wf.opt_row('-s, --short short option', 10),
98
+ " -s, --short short option\n")
99
+ assert_equal(wf.opt_row('-s, --short short option', 8),
100
+ " -s, --short short option\n")
101
+ assert_equal(wf.opt_row(
102
+ '-l, --longoption a long option with a quite ' \
103
+ 'long description which needs folding', 15
104
+ ),
105
+ ' -l, --longoption a long option with a quite long ' \
106
+ "description which\n needs folding\n")
107
+ assert_equal(wf.opt_row(
108
+ '-h, --hugeoption an option with a very long, far ' \
109
+ 'too verbose description which is going need folding ' \
110
+ 'more than one time, let me tell you', 12
111
+ ),
112
+ ' -h, --hugeoption an option with a very long, far too ' \
113
+ "verbose description\n which is going " \
114
+ 'need folding more than one time, let me tell' \
115
+ "\n you\n")
116
+ end
117
+
118
+ def test_option_column_width
119
+ assert_equal(wf.option_column_width, col_width)
120
+ end
121
+
122
+ def test_postscript
123
+ assert_instance_of(String, wf.postscript)
124
+ end
125
+
126
+ def test_docopt
127
+ x = wf.docopt
128
+ assert x.start_with?("Usage:\n")
129
+ assert_match("\nGlobal options:\n", x)
130
+ assert_match("--help\n", x)
131
+ assert_instance_of(String, x)
132
+ end
133
+ end
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require_relative(File.join('../../../lib/wavefront-cli/commands',
5
+ Pathname.new(__FILE__).basename
6
+ .to_s.sub('_spec.rb', '')))
7
+ require_relative './base_spec'
8
+
9
+ # Test Dashboard commands and options
10
+ #
11
+ class WavefrontCommmandDashboardTest < WavefrontCommmandBaseTest
12
+ def setup
13
+ @wf = WavefrontCommandDashboard.new
14
+ @col_width = 21
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require_relative(File.join('../../../lib/wavefront-cli/commands',
5
+ Pathname.new(__FILE__).basename
6
+ .to_s.sub('_spec.rb', '')))
7
+ require_relative './base_spec'
8
+
9
+ # Test Event commands and options
10
+ #
11
+ class WavefrontCommmandEventTest < WavefrontCommmandBaseTest
12
+ def setup
13
+ @wf = WavefrontCommandEvent.new
14
+ @col_width = 23
15
+ @skip_cmd = /event show/
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative('../../../lib/wavefront-cli/commands/integration')
4
+ require_relative './base_spec'
5
+
6
+ # Test Cloud Integration commands and options
7
+ #
8
+ class WavefrontCommmandIntegrationTest < WavefrontCommmandBaseTest
9
+ def setup
10
+ @wf = WavefrontCommandIntegration.new
11
+ @col_width = 19
12
+ end
13
+
14
+ def word
15
+ 'CloudIntegration'
16
+ end
17
+
18
+ def test_word
19
+ assert_equal(wf.word, 'integration')
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative('../../../lib/wavefront-cli/commands/link')
4
+ require_relative './base_spec'
5
+
6
+ # Test External Link commands and options
7
+ #
8
+ class WavefrontCommmandLinkTest < WavefrontCommmandBaseTest
9
+ def setup
10
+ @wf = WavefrontCommandLink.new
11
+ @col_width = 19
12
+ end
13
+
14
+ def word
15
+ 'ExternalLink'
16
+ end
17
+
18
+ def test_word
19
+ assert_equal(wf.word, 'link')
20
+ end
21
+ end
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require_relative(File.join('../../../lib/wavefront-cli/commands',
5
+ Pathname.new(__FILE__).basename
6
+ .to_s.sub('_spec.rb', '')))
7
+ require_relative './base_spec'
8
+
9
+ # Test Message commands and options
10
+ #
11
+ class WavefrontCommmandMessageTest < WavefrontCommmandBaseTest
12
+ def setup
13
+ @wf = WavefrontCommandMessage.new
14
+ @col_width = 19
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require_relative(File.join('../../../lib/wavefront-cli/commands',
5
+ Pathname.new(__FILE__).basename
6
+ .to_s.sub('_spec.rb', '')))
7
+ require_relative './base_spec'
8
+
9
+ # Test Metric commands and options
10
+ #
11
+ class WavefrontCommmandMetricTest < WavefrontCommmandBaseTest
12
+ def setup
13
+ @wf = WavefrontCommandMetric.new
14
+ @col_width = 19
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require_relative(File.join('../../../lib/wavefront-cli/commands',
5
+ Pathname.new(__FILE__).basename
6
+ .to_s.sub('_spec.rb', '')))
7
+ require_relative './base_spec'
8
+
9
+ # Test Proxy commands and options
10
+ #
11
+ class WavefrontCommmandProxyTest < WavefrontCommmandBaseTest
12
+ def setup
13
+ @wf = WavefrontCommandProxy.new
14
+ @col_width = 19
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require_relative(File.join('../../../lib/wavefront-cli/commands',
5
+ Pathname.new(__FILE__).basename
6
+ .to_s.sub('_spec.rb', '')))
7
+ require_relative './base_spec'
8
+
9
+ # Test Query commands and options
10
+ #
11
+ class WavefrontCommmandQueryTest < WavefrontCommmandBaseTest
12
+ def setup
13
+ @wf = WavefrontCommandQuery.new
14
+ @col_width = 24
15
+ end
16
+ end
@@ -0,0 +1,4 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/spec'
3
+
4
+ TW = 80
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require_relative(File.join('../../../lib/wavefront-cli/commands',
5
+ Pathname.new(__FILE__).basename
6
+ .to_s.sub('_spec.rb', '')))
7
+ require_relative './base_spec'
8
+
9
+ # Test Webhook commands and options
10
+ #
11
+ class WavefrontCommmandWebhookTest < WavefrontCommmandBaseTest
12
+ def setup
13
+ @wf = WavefrontCommandWebhook.new
14
+ @col_width = 19
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative('../../../lib/wavefront-cli/commands/window')
4
+ require_relative './base_spec'
5
+
6
+ # Test Maintenance Window commands and options
7
+ #
8
+ class WavefrontCommmandWindowTest < WavefrontCommmandBaseTest
9
+ def setup
10
+ @wf = WavefrontCommandWindow.new
11
+ @col_width = 19
12
+ end
13
+
14
+ def word
15
+ 'MaintenanceWindow'
16
+ end
17
+
18
+ def test_word
19
+ assert_equal(wf.word, 'window')
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ require_relative(File.join('../../../lib/wavefront-cli/commands',
5
+ Pathname.new(__FILE__).basename
6
+ .to_s.sub('_spec.rb', '')))
7
+ require_relative './base_spec'
8
+
9
+ # Test Write commands and options
10
+ #
11
+ class WavefrontCommmandWriteTest < WavefrontCommmandBaseTest
12
+ def setup
13
+ @wf = WavefrontCommandWrite.new
14
+ @col_width = 25
15
+ @skip_cmd = /write (point|file)/
16
+ end
17
+ end
@@ -18,17 +18,27 @@ describe "#{word} command" do
18
18
 
19
19
  it 'deletes with a check on inTrash' do
20
20
  stub_request(:get,
21
- "https://other.wavefront.com/api/v2/#{word}/#{id}").
22
- with(headers: {'Accept': '*/*',
21
+ "https://other.wavefront.com/api/v2/#{word}/#{id}")
22
+ .with(headers: { 'Accept': '*/*',
23
23
  'Accept-Encoding':
24
24
  'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
25
25
  'Authorization': 'Bearer 0123456789-ABCDEF',
26
- 'User-Agent': /wavefront.*/}).
27
- to_return(:status => 200, :body => "", :headers => {})
26
+ 'User-Agent': /wavefront.*/ })
27
+ .to_return(status: 200, body: '', headers: {})
28
28
  cmd_to_call(word, "delete #{id}",
29
29
  method: :delete, path: "/api/v2/#{word}/#{id}")
30
30
  end
31
31
 
32
+ cmd_to_call(word, "search id=#{id}",
33
+ { method: :post, path: "/api/v2/search/#{word}",
34
+ body: { limit: 10,
35
+ offset: 0,
36
+ query: [{key: 'id',
37
+ value: id,
38
+ matchingMethod: 'EXACT'}],
39
+ sort: {field: 'id', ascending: true}},
40
+ headers: JSON_POST_HEADERS })
41
+
32
42
  cmd_to_call(word, "undelete #{id}",
33
43
  method: :post, path: "/api/v2/#{word}/#{id}/undelete")
34
44
  invalid_ids(word, ["describe #{bad_id}", "delete #{bad_id}",
@@ -0,0 +1,162 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ CMD = 'test'.freeze
4
+
5
+ require 'date'
6
+ require 'map'
7
+ require 'pathname'
8
+ require_relative(File.join('../../../lib/wavefront-cli/display',
9
+ Pathname.new(__FILE__).basename
10
+ .to_s.sub('_spec.rb', '')))
11
+ require_relative './spec_helper'
12
+
13
+ S_DATA = Map.new()
14
+ S_OPTIONS = { '<id>': 'abc123' }
15
+
16
+ # Test base class for display methods
17
+ #
18
+ class WavefrontDisplayBaseTest < MiniTest::Test
19
+ attr_reader :wf
20
+
21
+ def setup
22
+ @wf = WavefrontDisplay::Base.new(S_DATA, S_OPTIONS)
23
+ end
24
+
25
+ def test_put_id_first
26
+ assert_equal(wf.put_id_first({ k1: 1, k2: 2, id: 3, k4: 4 }),
27
+ { id: 3, k1: 1, k2: 2, k4: 4 })
28
+ assert_equal(wf.put_id_first({ id: 3, k1: 1, k2: 2, k4: 4 }),
29
+ { id: 3, k1: 1, k2: 2, k4: 4 })
30
+ assert_equal(wf.put_id_first({ k2: 1, k1: 2, k4: 4 }),
31
+ { k2: 1, k1: 2, k4: 4 })
32
+ end
33
+
34
+ def test_run
35
+ end
36
+
37
+ def test_friendly_name
38
+ assert_equal(wf.friendly_name, 'base')
39
+ end
40
+
41
+ def test_do_list
42
+ out = Spy.on(wf, :long_output)
43
+ wf.do_list
44
+ assert out.has_been_called?
45
+ end
46
+
47
+ def test_do_list_brief
48
+ out = Spy.on(wf, :multicolumn)
49
+ wf.do_list_brief
50
+ assert out.has_been_called?
51
+ end
52
+
53
+ def test_do_import
54
+ out = Spy.on(wf, :long_output)
55
+ assert_output("Imported base.\n") { wf.do_import }
56
+ assert out.has_been_called?
57
+ end
58
+
59
+ def test_do_delete
60
+ assert_output("Deleted base 'abc123'.\n") { wf.do_delete }
61
+ end
62
+
63
+ def test_do_undelete
64
+ assert_output("Undeleted base 'abc123'.\n") { wf.do_undelete }
65
+ end
66
+
67
+ def test_do_tag_add
68
+ assert_output("Tagged base 'abc123'.\n") { wf.do_tag_add }
69
+ end
70
+
71
+ def test_do_tag_delete
72
+ assert_output("Deleted tag from base 'abc123'.\n") { wf.do_tag_delete }
73
+ end
74
+
75
+ def test_do_tag_clear
76
+ assert_output("Cleared tags on base 'abc123'.\n") { wf.do_tag_clear }
77
+ end
78
+
79
+ def test_do_tag_set
80
+ assert_output("Set tags on base 'abc123'.\n") { wf.do_tag_set }
81
+ end
82
+
83
+ def test_do_tags
84
+ assert_output("No tags set on base 'abc123'.\n") { wf.do_tags }
85
+
86
+ assert_output("tag1\ntag2\n") do
87
+ WavefrontDisplay::Base.new(%w(tag1 tag2), S_OPTIONS).do_tags
88
+ end
89
+
90
+ assert_output("tag1\n") do
91
+ WavefrontDisplay::Base.new(%w(tag1), S_OPTIONS).do_tags
92
+ end
93
+ end
94
+
95
+ def test_drop_fields_1
96
+ data = { k1: 'string', k2: Time.now.to_i, k3: Time.now.to_i }
97
+ wf = WavefrontDisplay::Base.new(data)
98
+ wf.drop_fields
99
+ assert_equal(wf.instance_variable_get(:@data), data)
100
+ end
101
+
102
+ def test_drop_fields_2
103
+ data = { k1: 'string', k2: Time.now.to_i, k3: Time.now.to_i }
104
+ wf = WavefrontDisplay::Base.new(data)
105
+ wf.drop_fields(:k1)
106
+ assert_equal(wf.instance_variable_get(:@data),
107
+ { k2: Time.now.to_i, k3: Time.now.to_i })
108
+ end
109
+
110
+ def test_drop_fields_3
111
+ data = { k1: 'string', k2: Time.now.to_i, k3: Time.now.to_i }
112
+ wf = WavefrontDisplay::Base.new(data)
113
+ wf.drop_fields(:k1, :k3)
114
+ assert_equal(wf.instance_variable_get(:@data), k2: Time.now.to_i)
115
+ end
116
+
117
+ def test_readable_time_1
118
+ data = { k1: 'string', k2: Time.now.to_i, k3: Time.now.to_i }
119
+ wf = WavefrontDisplay::Base.new(data)
120
+ wf.readable_time
121
+ assert_equal(wf.instance_variable_get(:@data), data)
122
+ end
123
+
124
+ def test_readable_time_2
125
+ data = { k1: 'string', k2: 1499426615, k3: 1499426615 }
126
+ wf = WavefrontDisplay::Base.new(data)
127
+ wf.readable_time(:k2)
128
+ x = wf.data
129
+ assert x.is_a?(Hash)
130
+ assert_equal(x.size, 3)
131
+ assert_equal(x.keys, %i(k1 k2 k3))
132
+ assert_equal(x[:k1], 'string')
133
+ assert_match(/^20\d\d-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d$/, x[:k2])
134
+ assert_equal(x[:k3], 1499426615)
135
+ end
136
+
137
+ def test_readable_time_2
138
+ data = { k1: 'string', k2: 1499426615, k3: 1499426615 }
139
+ wf = WavefrontDisplay::Base.new(data)
140
+ wf.readable_time(:k2, :k3)
141
+ x = wf.data
142
+ assert x.is_a?(Hash)
143
+ assert_equal(x.size, 3)
144
+ assert_equal(x.keys, %i(k1 k2 k3))
145
+ assert_equal(x[:k1], 'string')
146
+ assert_match(/^20\d\d-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d$/, x[:k2])
147
+ assert_match(/^20\d\d-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d$/, x[:k3])
148
+ end
149
+
150
+ def test_human_time
151
+ assert_raises(ArgumentError) { wf.human_time([1,2,3]) }
152
+ assert_raises(ArgumentError) { wf.human_time(123) }
153
+ assert_raises(ArgumentError) { wf.human_time(12345678901234) }
154
+ assert_equal('2017-07-07 11:23:35', wf.human_time(1499426615, true))
155
+ assert_match(/^20\d\d-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d.\d{3}$/,
156
+ wf.human_time(DateTime.now.strftime('%Q')))
157
+ assert_match(/^20\d\d-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d$/,
158
+ wf.human_time(Time.now.to_i))
159
+ assert_equal('2017-07-07 11:23:35.123', wf.human_time(1499426615123,
160
+ true))
161
+ end
162
+ end
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../../../../lib/wavefront-cli/display/printer/base'
4
+ require_relative '../spec_helper'
5
+
6
+ # Test base class
7
+ #
8
+ class WavefrontDisplayPrinterBase < MiniTest::Test
9
+ attr_reader :wf
10
+
11
+ def setup
12
+ @wf = WavefrontDisplayPrinter::Base.new
13
+ end
14
+
15
+ def test_key_width
16
+ assert_equal(wf.key_width, 0)
17
+ assert_equal(wf.key_width(key1: 1, row2: 2, longrow: 3), 9)
18
+ assert_equal(wf.key_width({ key1: 1, row2: 2, longrow: 3 }, 3), 10)
19
+ end
20
+ end