cf_script 0.0.1.beta.1 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +18 -0
  3. data/README.md +182 -34
  4. data/Rakefile +0 -13
  5. data/lib/cf_script/command/base.rb +1 -1
  6. data/lib/cf_script/command/cf/apps/app.rb +1 -1
  7. data/lib/cf_script/command/cf/apps/apps.rb +5 -3
  8. data/lib/cf_script/command/cf/apps/delete.rb +25 -0
  9. data/lib/cf_script/command/cf/apps/env.rb +4 -2
  10. data/lib/cf_script/command/cf/apps/push.rb +7 -2
  11. data/lib/cf_script/command/cf/apps/rename.rb +20 -0
  12. data/lib/cf_script/command/cf/apps/restage.rb +1 -1
  13. data/lib/cf_script/command/cf/apps/restart.rb +1 -1
  14. data/lib/cf_script/command/cf/apps/set_env.rb +1 -1
  15. data/lib/cf_script/command/cf/apps/start.rb +1 -1
  16. data/lib/cf_script/command/cf/apps/stop.rb +3 -2
  17. data/lib/cf_script/command/cf/apps/unset_env.rb +1 -1
  18. data/lib/cf_script/command/cf/apps.rb +5 -1
  19. data/lib/cf_script/command/cf/general/api.rb +1 -1
  20. data/lib/cf_script/command/cf/general/auth.rb +1 -1
  21. data/lib/cf_script/command/cf/general/login.rb +1 -1
  22. data/lib/cf_script/command/cf/general/logout.rb +1 -1
  23. data/lib/cf_script/command/cf/general/target.rb +1 -1
  24. data/lib/cf_script/command/cf/routes/check_route.rb +1 -1
  25. data/lib/cf_script/command/cf/routes/create_route.rb +1 -1
  26. data/lib/cf_script/command/cf/routes/delete_route.rb +5 -2
  27. data/lib/cf_script/command/cf/routes/map_route.rb +1 -1
  28. data/lib/cf_script/command/cf/routes/routes.rb +1 -1
  29. data/lib/cf_script/command/cf/routes/unmap_route.rb +1 -1
  30. data/lib/cf_script/command/cf/spaces/space.rb +1 -1
  31. data/lib/cf_script/command/cf/spaces/spaces.rb +1 -1
  32. data/lib/cf_script/command/runner.rb +1 -15
  33. data/lib/cf_script/config.rb +3 -1
  34. data/lib/cf_script/executor/recorder.rb +3 -1
  35. data/lib/cf_script/executor/simple.rb +22 -9
  36. data/lib/cf_script/executor.rb +0 -1
  37. data/lib/cf_script/object/api_endpoint.rb +1 -1
  38. data/lib/cf_script/object/app_info.rb +1 -1
  39. data/lib/cf_script/object/app_list.rb +21 -5
  40. data/lib/cf_script/object/attribute.rb +1 -1
  41. data/lib/cf_script/object/attribute_list.rb +1 -1
  42. data/lib/cf_script/object/instance_status.rb +1 -1
  43. data/lib/cf_script/object/route_info.rb +1 -1
  44. data/lib/cf_script/object/space.rb +1 -1
  45. data/lib/cf_script/object/target.rb +1 -1
  46. data/lib/cf_script/object.rb +0 -11
  47. data/lib/cf_script/output/buffer.rb +1 -1
  48. data/lib/cf_script/scope/app/routes.rb +1 -1
  49. data/lib/cf_script/scope/app.rb +0 -26
  50. data/lib/cf_script/scope/target.rb +7 -1
  51. data/lib/cf_script/ui.rb +2 -6
  52. data/lib/cf_script/version.rb +1 -1
  53. data/lib/cf_script.rb +0 -2
  54. data/test/fixtures/commands/apps/delete/good.yml +8 -0
  55. data/test/fixtures/commands/apps/delete/not_exist.yml +9 -0
  56. data/test/fixtures/commands/apps/env/{empty.yml → empty_vars.yml} +0 -0
  57. data/test/fixtures/commands/apps/rename/good.yml +8 -0
  58. data/test/fixtures/commands/apps/rename/not_found.yml +8 -0
  59. data/test/fixtures/commands/{apps/set_env → common}/empty.yml +0 -0
  60. data/test/lib/cf_script/command/cf/apps/app_test.rb +8 -0
  61. data/test/lib/cf_script/command/cf/apps/apps_test.rb +12 -3
  62. data/test/lib/cf_script/command/cf/apps/delete_test.rb +51 -0
  63. data/test/lib/cf_script/command/cf/apps/env_test.rb +12 -2
  64. data/test/lib/cf_script/command/cf/apps/push_test.rb +14 -0
  65. data/test/lib/cf_script/command/cf/apps/rename_test.rb +35 -0
  66. data/test/lib/cf_script/command/cf/apps/restage_test.rb +8 -0
  67. data/test/lib/cf_script/command/cf/apps/restart_test.rb +8 -0
  68. data/test/lib/cf_script/command/cf/apps/start_test.rb +8 -0
  69. data/test/lib/cf_script/command/cf/apps/stop_test.rb +2 -2
  70. data/test/lib/cf_script/command/cf/general/login_test.rb +9 -10
  71. data/test/lib/cf_script/command/cf/routes/create_route_test.rb +12 -0
  72. data/test/lib/cf_script/command/cf/routes/delete_route_test.rb +18 -0
  73. data/test/lib/cf_script/command/cf/routes/map_route_test.rb +12 -0
  74. data/test/lib/cf_script/command/cf/routes/routes_test.rb +8 -0
  75. data/test/lib/cf_script/command/cf/routes/unmap_route_test.rb +12 -0
  76. data/test/lib/cf_script/object/app_info_test.rb +4 -4
  77. data/test/lib/cf_script/object/app_list_test.rb +68 -2
  78. data/test/lib/cf_script/output/buffer_test.rb +9 -9
  79. data/test/lib/cf_script/output/parser/section_test.rb +4 -2
  80. data/test/lib/cf_script/output/tests_test.rb +24 -24
  81. data/test/lib/cf_script/output_test.rb +23 -18
  82. data/test/lib/cf_script/scope/app/env_test.rb +58 -0
  83. data/test/lib/cf_script/scope/app/routes_test.rb +56 -0
  84. data/test/lib/cf_script/scope/app/state_test.rb +30 -0
  85. data/test/lib/cf_script/scope/script_test.rb +3 -2
  86. data/test/lib/cf_script/scope/target_test.rb +38 -23
  87. data/test/lib/cf_script/scope_test.rb +10 -6
  88. data/test/lib/cf_script/ui_test.rb +133 -0
  89. data/test/lib/cf_script_test.rb +14 -8
  90. data/test/support/assertions.rb +25 -0
  91. data/test/support/helpers/fixture_executor.rb +1 -1
  92. data/test/support/helpers/mock_execution.rb +29 -7
  93. metadata +23 -14
  94. data/lib/cf_script/callbacks.rb +0 -43
  95. data/lib/cf_script/executor/non_blocking.rb +0 -107
  96. data/lib/cf_script/object/app_spec.rb +0 -55
  97. data/test/fixtures/commands/apps/unset_env/empty.yml +0 -5
  98. data/test/fixtures/commands/general/auth/empty.yml +0 -5
  99. data/test/fixtures/commands/general/target/empty.yml +0 -5
  100. data/test/fixtures/commands/spaces/space/empty.yml +0 -5
  101. data/test/fixtures/commands/spaces/spaces/empty.yml +0 -5
@@ -8,7 +8,7 @@ module CfScript::Command
8
8
 
9
9
  def run(*args, &block)
10
10
  run_cf self, *args do |output|
11
- return unless can_run?(output)
11
+ return unless good_run?(output)
12
12
 
13
13
  if rows = output.table(SPACES_TABLE)
14
14
  spaces = rows.map { |row| row[:name].value }
@@ -71,27 +71,13 @@ module CfScript::Command
71
71
  def run_command(command, *args, &block)
72
72
  command_line = command.line(cf_env, cf_bin, args)
73
73
 
74
- trace(:running, command_line.hide_sensitive, true)
74
+ trace(:running, command_line.hide_sensitive)
75
75
 
76
76
  stdout, stderr, status = cf_executor.execute(cf_env, command_line)
77
77
 
78
78
  output = CfScript::Output.new(command_line, stdout, stderr, status)
79
79
 
80
- unless output.good?
81
- run_error!(command_line, output)
82
- end
83
-
84
80
  block_given? ? yield(output) : output
85
81
  end
86
-
87
- def run_error!(command_line, output)
88
- unless CfScript.stdout.is_a?(StringIO)
89
- CfScript.stdout.puts output.stdout unless output.stdout.empty?
90
- end
91
-
92
- unless CfScript.stderr.is_a?(StringIO)
93
- CfScript.stderr.puts output.stderr unless output.stderr.empty?
94
- end
95
- end
96
82
  end
97
83
  end
@@ -45,12 +45,14 @@ class CfScript::Config
45
45
  attr_accessor :color
46
46
 
47
47
  attr_accessor :executor
48
+ attr_accessor :echo_output
48
49
 
49
50
  def initialize
50
51
  @trace = ENV['TRACE'] || false
51
52
  @color = true
52
53
 
53
- @executor = ENV['NON_BLOCKING_EXECUTOR'] ? CfScript::Executor::NonBlocking.new : default_executor
54
+ @executor = default_executor
55
+ @echo_output = true
54
56
  end
55
57
 
56
58
  def default_executor
@@ -1,7 +1,9 @@
1
1
  class CfScript::Executor::Recorder
2
+ attr_reader :executions
3
+
2
4
  def initialize(executor = nil)
3
5
  @executions = []
4
- @executor = executor || CfScript::Executor::Simple.new
6
+ @executor = executor || CfScript.config.runtime.executor
5
7
  end
6
8
 
7
9
  def execute(env, command_line)
@@ -1,17 +1,30 @@
1
- require 'open3'
1
+ require 'pty'
2
+ require 'io/console'
2
3
 
3
4
  class CfScript::Executor::Simple
4
- def initialize
5
- @executions = 0
6
- end
7
-
8
5
  def execute(env, command_line)
9
- @executions += 1
6
+ out = ''
10
7
 
11
- out, err, status = Open3.capture3(env, command_line.to_s)
8
+ PTY.spawn(command_line.to_s)do |i, o, pid|
9
+ begin
10
+ i.sync
11
+ i.raw!
12
12
 
13
- puts if CfScript.config.runtime.trace
13
+ i.each_line do |line|
14
+ echo(line)
15
+ out << line
16
+ end
17
+ rescue Errno::EIO => e
18
+ # Ignored
19
+ ensure
20
+ ::Process.wait pid
21
+ end
22
+ end
23
+
24
+ [out, '', $?]
25
+ end
14
26
 
15
- [out, err, status]
27
+ def echo(line)
28
+ STDOUT.print line if CfScript.config.runtime.echo_output
16
29
  end
17
30
  end
@@ -2,4 +2,3 @@ CfScript.const_set(:Executor, Module.new)
2
2
 
3
3
  require 'cf_script/executor/recorder'
4
4
  require 'cf_script/executor/simple'
5
- require 'cf_script/executor/non_blocking'
@@ -1,4 +1,4 @@
1
- class CfScript::ApiEndpoint < CfScript::Object
1
+ class CfScript::ApiEndpoint
2
2
  attr_reader :url
3
3
  attr_reader :version
4
4
 
@@ -1,4 +1,4 @@
1
- class CfScript::AppInfo < CfScript::Object
1
+ class CfScript::AppInfo
2
2
  # These are always available
3
3
  attr_reader :name
4
4
  attr_reader :requested_state
@@ -1,4 +1,4 @@
1
- class CfScript::AppList < CfScript::Object
1
+ class CfScript::AppList
2
2
  extend Forwardable
3
3
  include Enumerable
4
4
 
@@ -8,17 +8,33 @@ class CfScript::AppList < CfScript::Object
8
8
 
9
9
  def_delegators :@list, :<<, :[], :clear, :length, :each, :select
10
10
 
11
+ def names
12
+ @list.map(&:name)
13
+ end
14
+
15
+ def ==(other)
16
+ names == other.names
17
+ end
18
+
19
+ def each_name(&block)
20
+ names.each { |name| yield(name) }
21
+ end
22
+
11
23
  def select!(options)
12
- if options[:starting_with]
13
- @list.reject! { |app_info| app_info.name !~ /\A#{options[:starting_with]}/ }
24
+ if options[:matching]
25
+ @list.select! { |app_info| app_info.name =~ /#{options[:matching]}/ }
14
26
  end
15
27
 
16
- if options[:state]
17
- @list.reject! { |app_info| app_info.requested_state !~ /\A#{options[:state]}\z/ }
28
+ if options[:starting_with]
29
+ @list.reject! { |app_info| app_info.name !~ /\A#{options[:starting_with]}/ }
18
30
  end
19
31
 
20
32
  if options[:ending_with]
21
33
  @list.reject! { |app_info| app_info.name !~ /#{options[:ending_with]}\z/ }
22
34
  end
35
+
36
+ if options[:state]
37
+ @list.reject! { |app_info| app_info.requested_state !~ /\A#{options[:state]}\z/ }
38
+ end
23
39
  end
24
40
  end
@@ -1,4 +1,4 @@
1
- class CfScript::Attribute < CfScript::Object
1
+ class CfScript::Attribute
2
2
  attr_reader :name, :value
3
3
 
4
4
  def initialize(name, value)
@@ -1,4 +1,4 @@
1
- class CfScript::AttributeList < CfScript::Object
1
+ class CfScript::AttributeList
2
2
  extend Forwardable
3
3
  include Enumerable
4
4
 
@@ -1,4 +1,4 @@
1
- class CfScript::InstanceStatus < CfScript::Object
1
+ class CfScript::InstanceStatus
2
2
  attr_reader :index
3
3
  attr_reader :state
4
4
  attr_reader :since
@@ -1,4 +1,4 @@
1
- class CfScript::RouteInfo < CfScript::Object
1
+ class CfScript::RouteInfo
2
2
  attr_reader :space
3
3
  attr_reader :host
4
4
  attr_reader :domain
@@ -1,4 +1,4 @@
1
- class CfScript::Space < CfScript::Object
1
+ class CfScript::Space
2
2
  attr_reader :name
3
3
  attr_reader :org
4
4
  attr_reader :apps
@@ -1,4 +1,4 @@
1
- class CfScript::Target < CfScript::Object
1
+ class CfScript::Target
2
2
  attr_reader :api_endpoint
3
3
  attr_reader :user
4
4
  attr_reader :org
@@ -1,21 +1,10 @@
1
1
  require 'ostruct'
2
2
  require 'forwardable'
3
3
 
4
- class CfScript::Object
5
- class << self
6
- attr_reader :_cf_script_object_count
7
- end
8
-
9
- def initialize
10
- @@_cf_script_object_count += 1
11
- end
12
- end
13
-
14
4
  require 'cf_script/object/attribute'
15
5
  require 'cf_script/object/attribute_list'
16
6
 
17
7
  require 'cf_script/object/api_endpoint'
18
- require 'cf_script/object/app_spec'
19
8
  require 'cf_script/object/app_info'
20
9
  require 'cf_script/object/app_list'
21
10
  require 'cf_script/object/instance_status'
@@ -17,7 +17,7 @@ module CfScript
17
17
  end
18
18
 
19
19
  def last_line
20
- lines.last
20
+ lines.reject(&:empty?).last
21
21
  end
22
22
 
23
23
  def [](arg)
@@ -3,7 +3,7 @@ module CfScript::Scope
3
3
  def has_route?(domain, host = nil)
4
4
  route = [host, domain].compact.join('.')
5
5
 
6
- urls.split(', ').include?(route)
6
+ urls.include?(route)
7
7
  end
8
8
 
9
9
  def map_route(domain, host = nil)
@@ -6,10 +6,8 @@ module CfScript::Scope
6
6
 
7
7
  attr_reader :name
8
8
  attr_reader :app_info
9
- #attr_reader :app_spec
10
9
  attr_reader :current_target
11
10
 
12
- #include CfScript::Callbacks
13
11
  include CfScript::UI
14
12
  include CfScript::UI::NameTag
15
13
 
@@ -20,11 +18,9 @@ module CfScript::Scope
20
18
  when String, Symbol
21
19
  @name = name_or_info
22
20
  @app_info = nil
23
- #@app_spec = spec_for(name)
24
21
  when CfScript::AppInfo
25
22
  @name = name_or_info.name
26
23
  @app_info = name_or_info
27
- #@app_spec = spec_for(name)
28
24
  else
29
25
  raise "App accepts a name (String or Symbol) or an AppInfo object, " +
30
26
  "but a #{name_or_info.class.name} was given"
@@ -49,28 +45,6 @@ module CfScript::Scope
49
45
  "#{current_target.space}:#{name}"
50
46
  end
51
47
 
52
- #def run_callbacks(stage, command)
53
- # return unless app_spec
54
-
55
- # app_spec.callbacks_for(stage, command).each do |callback|
56
- # self.instance_eval(&callback)
57
- # end
58
- #end
59
-
60
- #def callbacks_before(command)
61
- # run_callbacks(:before, command)
62
- #end
63
-
64
- #def callbacks_after(command)
65
- # run_callbacks(:after, command)
66
- #end
67
-
68
- #def callbacks_around(command, &block)
69
- # run_callbacks(:before, command)
70
- # self.instance_eval(&block)
71
- # run_callbacks(:after, command)
72
- #end
73
-
74
48
  private
75
49
 
76
50
  def cf_self
@@ -52,7 +52,13 @@ module CfScript::Scope
52
52
 
53
53
  apps.select!(options) unless options.empty?
54
54
 
55
- block_given? ? yield(apps) : apps
55
+ if block_given?
56
+ apps.each do |app_info|
57
+ app(app_info, &block)
58
+ end
59
+ else
60
+ apps
61
+ end
56
62
  end
57
63
 
58
64
  private
data/lib/cf_script/ui.rb CHANGED
@@ -43,7 +43,7 @@ module CfScript::UI
43
43
 
44
44
  default: "\xE2\x9E\x96",
45
45
 
46
- bisque: "🍲",
46
+ lobster_bisque: "🍲", # h/t @dbelloti
47
47
  }
48
48
 
49
49
  module_function
@@ -72,10 +72,6 @@ module CfScript::UI
72
72
  COLORS[CfScript.config.ui.color ? type : :default]
73
73
  end
74
74
 
75
- def ui_style(text, type = :default)
76
- text.colorize with_color_of(type)
77
- end
78
-
79
75
  def emoji(type)
80
76
  "#{(EMOJI.key?(type) ? EMOJI[type] : EMOJI[:default])} "
81
77
  end
@@ -105,7 +101,7 @@ module CfScript::UI
105
101
  end
106
102
 
107
103
  def tag_format(tag, type = :default)
108
- if tag and CfScript.config.ui.tags
104
+ if tag && CfScript.config.ui.tags
109
105
  list = []
110
106
 
111
107
  list << tag_open(type)
@@ -1,3 +1,3 @@
1
1
  module CfScript
2
- VERSION = '0.0.1.beta.1'
2
+ VERSION = '0.0.1'
3
3
  end
data/lib/cf_script.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require_relative './cf_script/version'
2
2
  require_relative './cf_script/config'
3
- require_relative './cf_script/callbacks'
4
3
  require_relative './cf_script/utils'
5
4
  require_relative './cf_script/ui'
6
5
  require_relative './cf_script/output'
@@ -20,7 +19,6 @@ module CfScript
20
19
  attr_accessor :cf_call_stack
21
20
  end
22
21
 
23
- #extend CfScript::Context
24
22
  extend CfScript::Scope::Execution
25
23
  extend CfScript::UI
26
24
 
@@ -0,0 +1,8 @@
1
+ ---
2
+ stdout: |
3
+ Deleting app worker in org ACME / space development as user@example.com...
4
+ OK
5
+
6
+ stderr: ''
7
+ status:
8
+ exitstatus: 0
@@ -0,0 +1,9 @@
1
+ ---
2
+ stdout: |
3
+ Deleting app worker in org ACME / space development as user@example.com...
4
+ OK
5
+ App worker does not exist.
6
+
7
+ stderr: ''
8
+ status:
9
+ exitstatus: 0
@@ -0,0 +1,8 @@
1
+ ---
2
+ stdout: |
3
+ Renaming app old-name to new-name in org ACME / space development as user@example.com...
4
+ OK
5
+
6
+ stderr: ''
7
+ status:
8
+ exitstatus: 0
@@ -0,0 +1,8 @@
1
+ ---
2
+ stdout: |
3
+ FAILED
4
+ App bogus not found
5
+
6
+ stderr: ''
7
+ status:
8
+ exitstatus: 0
@@ -33,6 +33,14 @@ describe 'AppCommand' do
33
33
  end
34
34
  end
35
35
 
36
+ it "returns nil if no attributes were found" do
37
+ fake_cf app: :empty do
38
+ result = command.run(:worker)
39
+
40
+ assert_equal nil, result
41
+ end
42
+ end
43
+
36
44
  it "returns nil when the app is not found" do
37
45
  fake_cf app: :not_found do
38
46
  assert_equal nil, command.run(:api)
@@ -8,7 +8,7 @@ describe 'AppsCommand' do
8
8
  it_behaves_like 'a command object that', {
9
9
  has_type: :apps,
10
10
  has_name: :apps,
11
- fails_with: []
11
+ fails_with: CfScript::AppList.new # an empty AppList
12
12
  }
13
13
 
14
14
  it "returns an AppList object" do
@@ -70,12 +70,21 @@ describe 'AppsCommand' do
70
70
  end
71
71
  end
72
72
 
73
+ it "returns an empty AppList for empty output" do
74
+ fake_cf apps: :empty do
75
+ apps = command.run
76
+
77
+ assert_instance_of CfScript::AppList, apps
78
+ assert_equal CfScript::AppList.new, apps
79
+ end
80
+ end
81
+
73
82
  it "returns an empty Array when no apps are found" do
74
83
  fake_cf apps: :no_apps do
75
84
  apps = command.run
76
85
 
77
- assert_instance_of Array, apps
78
- assert_equal [], apps
86
+ assert_instance_of CfScript::AppList, apps
87
+ assert_equal CfScript::AppList.new, apps
79
88
  end
80
89
  end
81
90
  end
@@ -0,0 +1,51 @@
1
+ require 'test_helper'
2
+
3
+ describe 'DeleteCommand' do
4
+ include MockExecution
5
+
6
+ let(:command) { CfScript::Command::Apps::DeleteCommand.instance }
7
+
8
+ it_behaves_like 'a command object that', {
9
+ has_type: :apps,
10
+ has_name: :delete,
11
+ fails_with: false
12
+ }
13
+
14
+ it "returns true on success" do
15
+ fake_cf do
16
+ assert_equal true, command.run(:name)
17
+ end
18
+ end
19
+
20
+ it "prints an error on failure" do
21
+ fake_cf delete: :not_exist do |stdout, stderr|
22
+ command.run(:name)
23
+
24
+ assert_match /\{delete\} failed to delete app/, stderr.lines.first
25
+ end
26
+ end
27
+
28
+ it "skips flags when false" do
29
+ assert_command_args command,
30
+ [:worker],
31
+ [:worker, { flags: [] }]
32
+ end
33
+
34
+ it "adds flag for force when true" do
35
+ assert_command_args command,
36
+ [:worker, true],
37
+ [:worker, { flags: [:f] }]
38
+ end
39
+
40
+ it "adds flag for delete routes when true" do
41
+ assert_command_args command,
42
+ [:worker, false, true],
43
+ [:worker, { flags: [:r] }]
44
+ end
45
+
46
+ it "adds flags for force and delete routes when true" do
47
+ assert_command_args command,
48
+ [:worker, true, true],
49
+ [:worker, { flags: [:f, :r] }]
50
+ end
51
+ end
@@ -47,9 +47,19 @@ describe 'EnvCommand' do
47
47
  end
48
48
  end
49
49
 
50
- it "returns an empty Hash when no env variables are found" do
50
+ it "returns an empty Hash if the output is empty" do
51
51
  fake_cf env: :empty do
52
- assert_equal({}, command.run(:worker))
52
+ result = command.run(:worker)
53
+
54
+ assert_equal({}, result)
55
+ end
56
+ end
57
+
58
+ it "returns an empty Hash when no env variables are found" do
59
+ fake_cf env: :empty_vars do
60
+ result = command.run(:worker)
61
+
62
+ assert_equal({}, result)
53
63
  end
54
64
  end
55
65
  end
@@ -19,6 +19,14 @@ describe 'PushCommand' do
19
19
  end
20
20
  end
21
21
 
22
+ it "returns nil if no attributes were found" do
23
+ fake_cf push: :empty do
24
+ result = command.run(:api)
25
+
26
+ assert_equal nil, result
27
+ end
28
+ end
29
+
22
30
  it "translates long option names to cf's short ones" do
23
31
  fake_cf do
24
32
  assert_equal({ f: 'a' }, command.translate_options({ manifest: 'a' }))
@@ -43,4 +51,10 @@ describe 'PushCommand' do
43
51
  )
44
52
  end
45
53
  end
54
+
55
+ it "builds options and flag for run_cf" do
56
+ assert_command_args command,
57
+ [:worker, i: 2, memory: '123', command: './run', flags: [:no_start]],
58
+ [:worker, { i: 2, m: '123', c: './run', flags: [:no_start] }]
59
+ end
46
60
  end
@@ -0,0 +1,35 @@
1
+ require 'test_helper'
2
+
3
+ describe 'RenameCommand' do
4
+ include MockExecution
5
+
6
+ let(:command) { CfScript::Command::Apps::RenameCommand.instance }
7
+
8
+ it_behaves_like 'a command object that', {
9
+ has_type: :apps,
10
+ has_name: :rename,
11
+ fails_with: false
12
+ }
13
+
14
+ it "returns true on success" do
15
+ fake_cf do
16
+ assert_equal true, command.run(:old, :new)
17
+ end
18
+ end
19
+
20
+ it "prints an error on failure" do
21
+ fake_cf rename: :not_found do |stdout, stderr|
22
+ command.run(:old, :new)
23
+
24
+ assert_match /\{rename\} failed to rename/, stderr.lines.first
25
+ end
26
+ end
27
+
28
+ it "returns false when the app is not found" do
29
+ fake_cf rename: :not_found do |stdout, stderr|
30
+ assert_equal false, command.run(:old, :new)
31
+
32
+ assert_match /\{rename\} failed to rename/, stderr.lines.first
33
+ end
34
+ end
35
+ end
@@ -39,6 +39,14 @@ describe 'RestageCommand' do
39
39
  end
40
40
  end
41
41
 
42
+ it "returns nil if no attributes were found" do
43
+ fake_cf restage: :empty do
44
+ result = command.run(:api)
45
+
46
+ assert_equal nil, result
47
+ end
48
+ end
49
+
42
50
  it "returns nil on failure" do
43
51
  fake_cf restage: :not_found do
44
52
  assert_equal nil, command.run(:some_app)
@@ -39,6 +39,14 @@ describe 'RestartCommand' do
39
39
  end
40
40
  end
41
41
 
42
+ it "returns nil if no attributes were found" do
43
+ fake_cf restart: :empty do
44
+ result = command.run(:worker)
45
+
46
+ assert_equal nil, result
47
+ end
48
+ end
49
+
42
50
  it "returns nil on failure" do
43
51
  fake_cf restart: :not_found do
44
52
  assert_equal nil, command.run(:some_app)
@@ -47,6 +47,14 @@ describe 'StartCommand' do
47
47
  end
48
48
  end
49
49
 
50
+ it "returns nil if no attributes were found" do
51
+ fake_cf start: :empty do
52
+ result = command.run(:worker)
53
+
54
+ assert_equal nil, result
55
+ end
56
+ end
57
+
50
58
  it "returns nil on failure" do
51
59
  fake_cf start: :not_found do
52
60
  assert_equal nil, command.run(:some_app)
@@ -13,7 +13,7 @@ describe 'StopCommand' do
13
13
 
14
14
  it "returns true on success" do
15
15
  fake_cf do
16
- assert command.run(:worker)
16
+ assert_equal true, command.run(:worker)
17
17
  end
18
18
  end
19
19
 
@@ -27,7 +27,7 @@ describe 'StopCommand' do
27
27
 
28
28
  it "returns false when the app is not found" do
29
29
  fake_cf stop: :not_found do |stdout, stderr|
30
- refute command.run(:bogus)
30
+ assert_equal false, command.run(:bogus)
31
31
 
32
32
  assert_match /\{stop\} failed to stop/, stderr.lines.first
33
33
  end