pogo 2.31.2

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 (93) hide show
  1. data/README.md +73 -0
  2. data/bin/pogo +22 -0
  3. data/data/cacert.pem +3988 -0
  4. data/lib/heroku.rb +22 -0
  5. data/lib/heroku/auth.rb +320 -0
  6. data/lib/heroku/cli.rb +38 -0
  7. data/lib/heroku/client.rb +764 -0
  8. data/lib/heroku/client/heroku_postgresql.rb +111 -0
  9. data/lib/heroku/client/pgbackups.rb +113 -0
  10. data/lib/heroku/client/rendezvous.rb +105 -0
  11. data/lib/heroku/client/ssl_endpoint.rb +25 -0
  12. data/lib/heroku/command.rb +273 -0
  13. data/lib/heroku/command/account.rb +23 -0
  14. data/lib/heroku/command/accounts.rb +34 -0
  15. data/lib/heroku/command/addons.rb +305 -0
  16. data/lib/heroku/command/apps.rb +311 -0
  17. data/lib/heroku/command/auth.rb +86 -0
  18. data/lib/heroku/command/base.rb +230 -0
  19. data/lib/heroku/command/certs.rb +148 -0
  20. data/lib/heroku/command/config.rb +137 -0
  21. data/lib/heroku/command/db.rb +218 -0
  22. data/lib/heroku/command/domains.rb +85 -0
  23. data/lib/heroku/command/drains.rb +46 -0
  24. data/lib/heroku/command/git.rb +65 -0
  25. data/lib/heroku/command/help.rb +163 -0
  26. data/lib/heroku/command/keys.rb +115 -0
  27. data/lib/heroku/command/labs.rb +161 -0
  28. data/lib/heroku/command/logs.rb +98 -0
  29. data/lib/heroku/command/maintenance.rb +61 -0
  30. data/lib/heroku/command/pg.rb +277 -0
  31. data/lib/heroku/command/pgbackups.rb +289 -0
  32. data/lib/heroku/command/plugins.rb +110 -0
  33. data/lib/heroku/command/ps.rb +232 -0
  34. data/lib/heroku/command/releases.rb +124 -0
  35. data/lib/heroku/command/run.rb +179 -0
  36. data/lib/heroku/command/sharing.rb +89 -0
  37. data/lib/heroku/command/ssl.rb +61 -0
  38. data/lib/heroku/command/stack.rb +62 -0
  39. data/lib/heroku/command/status.rb +51 -0
  40. data/lib/heroku/command/update.rb +47 -0
  41. data/lib/heroku/command/version.rb +23 -0
  42. data/lib/heroku/deprecated.rb +5 -0
  43. data/lib/heroku/deprecated/help.rb +38 -0
  44. data/lib/heroku/distribution.rb +9 -0
  45. data/lib/heroku/helpers.rb +517 -0
  46. data/lib/heroku/helpers/heroku_postgresql.rb +104 -0
  47. data/lib/heroku/plugin.rb +161 -0
  48. data/lib/heroku/updater.rb +158 -0
  49. data/lib/heroku/version.rb +3 -0
  50. data/lib/vendor/heroku/okjson.rb +598 -0
  51. data/spec/helper/legacy_help.rb +16 -0
  52. data/spec/heroku/auth_spec.rb +246 -0
  53. data/spec/heroku/client/heroku_postgresql_spec.rb +34 -0
  54. data/spec/heroku/client/pgbackups_spec.rb +43 -0
  55. data/spec/heroku/client/rendezvous_spec.rb +62 -0
  56. data/spec/heroku/client/ssl_endpoint_spec.rb +48 -0
  57. data/spec/heroku/client_spec.rb +564 -0
  58. data/spec/heroku/command/addons_spec.rb +585 -0
  59. data/spec/heroku/command/apps_spec.rb +351 -0
  60. data/spec/heroku/command/auth_spec.rb +38 -0
  61. data/spec/heroku/command/base_spec.rb +109 -0
  62. data/spec/heroku/command/certs_spec.rb +178 -0
  63. data/spec/heroku/command/config_spec.rb +144 -0
  64. data/spec/heroku/command/db_spec.rb +110 -0
  65. data/spec/heroku/command/domains_spec.rb +87 -0
  66. data/spec/heroku/command/drains_spec.rb +34 -0
  67. data/spec/heroku/command/git_spec.rb +116 -0
  68. data/spec/heroku/command/help_spec.rb +93 -0
  69. data/spec/heroku/command/keys_spec.rb +120 -0
  70. data/spec/heroku/command/labs_spec.rb +99 -0
  71. data/spec/heroku/command/logs_spec.rb +60 -0
  72. data/spec/heroku/command/maintenance_spec.rb +51 -0
  73. data/spec/heroku/command/pg_spec.rb +223 -0
  74. data/spec/heroku/command/pgbackups_spec.rb +280 -0
  75. data/spec/heroku/command/plugins_spec.rb +104 -0
  76. data/spec/heroku/command/ps_spec.rb +195 -0
  77. data/spec/heroku/command/releases_spec.rb +130 -0
  78. data/spec/heroku/command/run_spec.rb +86 -0
  79. data/spec/heroku/command/sharing_spec.rb +59 -0
  80. data/spec/heroku/command/ssl_spec.rb +32 -0
  81. data/spec/heroku/command/stack_spec.rb +46 -0
  82. data/spec/heroku/command/status_spec.rb +48 -0
  83. data/spec/heroku/command/version_spec.rb +16 -0
  84. data/spec/heroku/command_spec.rb +211 -0
  85. data/spec/heroku/helpers/heroku_postgresql_spec.rb +109 -0
  86. data/spec/heroku/helpers_spec.rb +48 -0
  87. data/spec/heroku/plugin_spec.rb +172 -0
  88. data/spec/heroku/updater_spec.rb +44 -0
  89. data/spec/spec.opts +1 -0
  90. data/spec/spec_helper.rb +209 -0
  91. data/spec/support/display_message_matcher.rb +49 -0
  92. data/spec/support/openssl_mock_helper.rb +8 -0
  93. metadata +220 -0
@@ -0,0 +1,104 @@
1
+ require "spec_helper"
2
+ require "heroku/command/plugins"
3
+
4
+ module Heroku::Command
5
+ include SandboxHelper
6
+
7
+ describe Plugins do
8
+
9
+ before do
10
+ @plugin = Heroku::Plugin.new("git://github.com/heroku/Plugin.git")
11
+ end
12
+
13
+ context("install") do
14
+
15
+ before do
16
+ Heroku::Plugin.should_receive(:new).with('git://github.com/heroku/Plugin.git').and_return(@plugin)
17
+ @plugin.should_receive(:install).and_return(true)
18
+ end
19
+
20
+ it "installs plugins" do
21
+ Heroku::Plugin.should_receive(:load_plugin).and_return(true)
22
+ stderr, stdout = execute("plugins:install git://github.com/heroku/Plugin.git")
23
+ stderr.should == ""
24
+ stdout.should == <<-STDOUT
25
+ Installing Plugin... done
26
+ STDOUT
27
+ end
28
+
29
+ it "does not install plugins that do not load" do
30
+ Heroku::Plugin.should_receive(:load_plugin).and_return(false)
31
+ @plugin.should_receive(:uninstall).and_return(true)
32
+ stderr, stdout = execute("plugins:install git://github.com/heroku/Plugin.git")
33
+ stderr.should == '' # normally would have error, but mocks/stubs don't allow
34
+ stdout.should == "Installing Plugin... " # also inaccurate, would end in ' failed'
35
+ end
36
+
37
+ end
38
+
39
+ context("uninstall") do
40
+
41
+ before do
42
+ Heroku::Plugin.should_receive(:new).with('Plugin').and_return(@plugin)
43
+ end
44
+
45
+ it "uninstalls plugins" do
46
+ @plugin.should_receive(:uninstall).and_return(true)
47
+ stderr, stdout = execute("plugins:uninstall Plugin")
48
+ stderr.should == ""
49
+ stdout.should == <<-STDOUT
50
+ Uninstalling Plugin... done
51
+ STDOUT
52
+ end
53
+
54
+ it "does not uninstall plugins that do not exist" do
55
+ stderr, stdout = execute("plugins:uninstall Plugin")
56
+ stderr.should == <<-STDERR
57
+ ! Plugin plugin not found.
58
+ STDERR
59
+ stdout.should == <<-STDOUT
60
+ Uninstalling Plugin... failed
61
+ STDOUT
62
+ end
63
+
64
+ end
65
+
66
+ context("update") do
67
+
68
+ before do
69
+ Heroku::Plugin.should_receive(:new).with('Plugin').and_return(@plugin)
70
+ end
71
+
72
+ it "updates plugin by name" do
73
+ @plugin.should_receive(:update).and_return(true)
74
+ stderr, stdout = execute("plugins:update Plugin")
75
+ stderr.should == ""
76
+ stdout.should == <<-STDOUT
77
+ Updating Plugin... done
78
+ STDOUT
79
+ end
80
+
81
+ it "updates all plugins" do
82
+ Heroku::Plugin.should_receive(:list).and_return([], [], ['Plugin'])
83
+ @plugin.should_receive(:update).and_return(true)
84
+ stderr, stdout = execute("plugins:update")
85
+ stderr.should == ""
86
+ stdout.should == <<-STDOUT
87
+ Updating Plugin... done
88
+ STDOUT
89
+ end
90
+
91
+ it "does not update plugins that do not exist" do
92
+ stderr, stdout = execute("plugins:update Plugin")
93
+ stderr.should == <<-STDERR
94
+ ! Plugin plugin not found.
95
+ STDERR
96
+ stdout.should == <<-STDOUT
97
+ Updating Plugin... failed
98
+ STDOUT
99
+ end
100
+
101
+ end
102
+
103
+ end
104
+ end
@@ -0,0 +1,195 @@
1
+ require "spec_helper"
2
+ require "heroku/command/ps"
3
+
4
+ describe Heroku::Command::Ps do
5
+
6
+ before(:each) do
7
+ stub_core
8
+ end
9
+
10
+ context("cedar") do
11
+
12
+ before(:each) do
13
+ api.post_app("name" => "myapp", "stack" => "cedar")
14
+ end
15
+
16
+ after(:each) do
17
+ api.delete_app("myapp")
18
+ end
19
+
20
+ it "ps:dynos errors out on cedar apps" do
21
+ lambda { execute("ps:dynos") }.should raise_error(Heroku::Command::CommandFailed, "For Cedar apps, use `heroku ps`")
22
+ end
23
+
24
+ it "ps:workers errors out on cedar apps" do
25
+ lambda { execute("ps:workers") }.should raise_error(Heroku::Command::CommandFailed, "For Cedar apps, use `heroku ps`")
26
+ end
27
+
28
+ describe "ps" do
29
+
30
+ it "displays processes" do
31
+ Heroku::Command::Ps.any_instance.should_receive(:time_ago).exactly(10).times.and_return("2012/09/11 12:34:56 (~ 0s ago)")
32
+ api.post_ps_scale('myapp', 'web', 10)
33
+ stderr, stdout = execute("ps")
34
+ stderr.should == ""
35
+ stdout.should == <<-STDOUT
36
+ === web: `bundle exec thin start -p $PORT`
37
+ web.1: created 2012/09/11 12:34:56 (~ 0s ago)
38
+ web.2: created 2012/09/11 12:34:56 (~ 0s ago)
39
+ web.3: created 2012/09/11 12:34:56 (~ 0s ago)
40
+ web.4: created 2012/09/11 12:34:56 (~ 0s ago)
41
+ web.5: created 2012/09/11 12:34:56 (~ 0s ago)
42
+ web.6: created 2012/09/11 12:34:56 (~ 0s ago)
43
+ web.7: created 2012/09/11 12:34:56 (~ 0s ago)
44
+ web.8: created 2012/09/11 12:34:56 (~ 0s ago)
45
+ web.9: created 2012/09/11 12:34:56 (~ 0s ago)
46
+ web.10: created 2012/09/11 12:34:56 (~ 0s ago)
47
+
48
+ STDOUT
49
+ end
50
+
51
+ it "displays one-off processes" do
52
+ Heroku::Command::Ps.any_instance.should_receive(:time_ago).and_return('2012/09/11 12:34:56 (~ 0s ago)', '2012/09/11 12:34:56 (~ 0s ago)')
53
+ api.post_ps "myapp", "bash"
54
+
55
+ stderr, stdout = execute("ps")
56
+ stderr.should == ""
57
+ stdout.should == <<-STDOUT
58
+ === run: one-off processes
59
+ run.1: created 2012/09/11 12:34:56 (~ 0s ago): `bash`
60
+
61
+ === web: `bundle exec thin start -p $PORT`
62
+ web.1: created 2012/09/11 12:34:56 (~ 0s ago)
63
+
64
+ STDOUT
65
+ end
66
+
67
+ end
68
+
69
+ describe "ps:restart" do
70
+
71
+ it "restarts all processes with no args" do
72
+ stderr, stdout = execute("ps:restart")
73
+ stderr.should == ""
74
+ stdout.should == <<-STDOUT
75
+ Restarting processes... done
76
+ STDOUT
77
+ end
78
+
79
+ it "restarts one process" do
80
+ stderr, stdout = execute("ps:restart web.1")
81
+ stderr.should == ""
82
+ stdout.should == <<-STDOUT
83
+ Restarting web.1 process... done
84
+ STDOUT
85
+ end
86
+
87
+ it "restarts a type of process" do
88
+ stderr, stdout = execute("ps:restart web")
89
+ stderr.should == ""
90
+ stdout.should == <<-STDOUT
91
+ Restarting web processes... done
92
+ STDOUT
93
+ end
94
+
95
+ end
96
+
97
+ describe "ps:scale" do
98
+
99
+ it "can scale using key/value format" do
100
+ stderr, stdout = execute("ps:scale web=5")
101
+ stderr.should == ""
102
+ stdout.should == <<-STDOUT
103
+ Scaling web processes... done, now running 5
104
+ STDOUT
105
+ end
106
+
107
+ it "can scale relative amounts" do
108
+ stderr, stdout = execute("ps:scale web+2")
109
+ stderr.should == ""
110
+ stdout.should == <<-STDOUT
111
+ Scaling web processes... done, now running 3
112
+ STDOUT
113
+ end
114
+
115
+ end
116
+
117
+ describe "ps:stop" do
118
+
119
+ it "restarts one process" do
120
+ stderr, stdout = execute("ps:restart ps.1")
121
+ stderr.should == ""
122
+ stdout.should == <<-STDOUT
123
+ Restarting ps.1 process... done
124
+ STDOUT
125
+ end
126
+
127
+ it "restarts a type of process" do
128
+ stderr, stdout = execute("ps:restart ps")
129
+ stderr.should == ""
130
+ stdout.should == <<-STDOUT
131
+ Restarting ps processes... done
132
+ STDOUT
133
+ end
134
+
135
+ end
136
+
137
+ end
138
+
139
+ context("non-cedar") do
140
+
141
+ before(:each) do
142
+ api.post_app("name" => "myapp")
143
+ end
144
+
145
+ after(:each) do
146
+ api.delete_app("myapp")
147
+ end
148
+
149
+ describe "ps:dynos" do
150
+
151
+ it "displays the current number of dynos" do
152
+ stderr, stdout = execute("ps:dynos")
153
+ stderr.should == ""
154
+ stdout.should == <<-STDOUT
155
+ ~ `heroku ps:dynos QTY` has been deprecated and replaced with `heroku ps:scale dynos=QTY`
156
+ myapp is running 0 dynos
157
+ STDOUT
158
+ end
159
+
160
+ it "sets the number of dynos" do
161
+ stderr, stdout = execute("ps:dynos 5")
162
+ stderr.should == ""
163
+ stdout.should == <<-STDOUT
164
+ ~ `heroku ps:dynos QTY` has been deprecated and replaced with `heroku ps:scale dynos=QTY`
165
+ Scaling dynos... done, now running 5
166
+ STDOUT
167
+ end
168
+
169
+ end
170
+
171
+ describe "ps:workers" do
172
+
173
+ it "displays the current number of workers" do
174
+ stderr, stdout = execute("ps:workers")
175
+ stderr.should == ""
176
+ stdout.should == <<-STDOUT
177
+ ~ `heroku ps:workers QTY` has been deprecated and replaced with `heroku ps:scale workers=QTY`
178
+ myapp is running 0 workers
179
+ STDOUT
180
+ end
181
+
182
+ it "sets the number of workers" do
183
+ stderr, stdout = execute("ps:workers 5")
184
+ stderr.should == ""
185
+ stdout.should == <<-STDOUT
186
+ ~ `heroku ps:workers QTY` has been deprecated and replaced with `heroku ps:scale workers=QTY`
187
+ Scaling workers... done, now running 5
188
+ STDOUT
189
+ end
190
+
191
+ end
192
+
193
+ end
194
+
195
+ end
@@ -0,0 +1,130 @@
1
+ require "spec_helper"
2
+ require "heroku/command/releases"
3
+
4
+ describe Heroku::Command::Releases do
5
+
6
+ before(:each) do
7
+ stub_core
8
+ end
9
+
10
+ describe "releases" do
11
+
12
+ before(:each) do
13
+ api.post_app("name" => "myapp", "stack" => "cedar")
14
+ api.put_config_vars("myapp", { 'FOO_BAR' => 'BAZ' })
15
+ api.put_config_vars("myapp", { 'BAR_BAZ' => 'QUX' })
16
+ api.put_config_vars("myapp", { 'BAZ_QUX' => 'QUUX' })
17
+ api.put_config_vars("myapp", { 'QUX_QUUX' => 'XYZZY' })
18
+ api.put_config_vars("myapp", { 'SUPER_LONG_CONFIG_VAR_TO_GET_PAST_THE_TRUNCATION_LIMIT' => 'VALUE' })
19
+ Heroku::Command::Releases.any_instance.should_receive(:time_ago).exactly(5).times.and_return('2012/09/10 11:36:44 (~ 0s ago)', '2012/09/10 11:36:43 (~ 1s ago)', '2012/09/10 11:35:44 (~ 1m ago)', '2012/09/10 10:36:44 (~ 1h ago)', '2012/01/02 12:34:56')
20
+ end
21
+
22
+ after(:each) do
23
+ api.delete_app("myapp")
24
+ end
25
+
26
+ it "should list releases" do
27
+ @stderr, @stdout = execute("releases")
28
+ @stderr.should == ""
29
+ @stdout.should == <<-STDOUT
30
+ === myapp Releases
31
+ v5 Config add SUPER_LONG_CONFIG_VAR_TO_GE.. email@example.com 2012/09/10 11:36:44 (~ 0s ago)
32
+ v4 Config add QUX_QUUX email@example.com 2012/09/10 11:36:43 (~ 1s ago)
33
+ v3 Config add BAZ_QUX email@example.com 2012/09/10 11:35:44 (~ 1m ago)
34
+ v2 Config add BAR_BAZ email@example.com 2012/09/10 10:36:44 (~ 1h ago)
35
+ v1 Config add FOO_BAR email@example.com 2012/01/02 12:34:56
36
+
37
+ STDOUT
38
+ end
39
+
40
+ end
41
+
42
+ describe "releases:info" do
43
+ before(:each) do
44
+ api.post_app("name" => "myapp", "stack" => "cedar")
45
+ api.put_config_vars("myapp", { 'FOO_BAR' => 'BAZ' })
46
+ end
47
+
48
+ after(:each) do
49
+ api.delete_app("myapp")
50
+ end
51
+
52
+ it "requires a release to be specified" do
53
+ stderr, stdout = execute("releases:info")
54
+ stderr.should == <<-STDERR
55
+ ! Usage: heroku releases:info RELEASE
56
+ STDERR
57
+ stdout.should == ""
58
+ end
59
+
60
+ it "shows info for a single release" do
61
+ Heroku::Command::Releases.any_instance.should_receive(:time_ago).and_return("2012/09/11 12:34:56 (~ 0s ago)")
62
+ stderr, stdout = execute("releases:info v1")
63
+ stderr.should == ""
64
+ stdout.should == <<-STDOUT
65
+ === Release v1
66
+ By: email@example.com
67
+ Change: Config add FOO_BAR
68
+ When: 2012/09/11 12:34:56 (~ 0s ago)
69
+
70
+ === v1 Config Vars
71
+ BUNDLE_WITHOUT: development:test
72
+ DATABASE_URL: postgres://username:password@ec2-123-123-123-123.compute-1.amazonaws.com/username
73
+ LANG: en_US.UTF-8
74
+ RACK_ENV: production
75
+ SHARED_DATABASE_URL: postgres://username:password@ec2-123-123-123-123.compute-1.amazonaws.com/username
76
+ STDOUT
77
+ end
78
+
79
+ it "shows info for a single release in shell compatible format" do
80
+ Heroku::Command::Releases.any_instance.should_receive(:time_ago).and_return("2012/09/11 12:34:56 (~ 0s ago)")
81
+ stderr, stdout = execute("releases:info v1 --shell")
82
+ stderr.should == ""
83
+ stdout.should == <<-STDOUT
84
+ === Release v1
85
+ By: email@example.com
86
+ Change: Config add FOO_BAR
87
+ When: 2012/09/11 12:34:56 (~ 0s ago)
88
+
89
+ === v1 Config Vars
90
+ BUNDLE_WITHOUT=development:test
91
+ DATABASE_URL=postgres://username:password@ec2-123-123-123-123.compute-1.amazonaws.com/username
92
+ LANG=en_US.UTF-8
93
+ RACK_ENV=production
94
+ SHARED_DATABASE_URL=postgres://username:password@ec2-123-123-123-123.compute-1.amazonaws.com/username
95
+ STDOUT
96
+ end
97
+ end
98
+
99
+ describe "rollback" do
100
+ before(:each) do
101
+ api.post_app("name" => "myapp", "stack" => "cedar")
102
+ api.put_config_vars("myapp", { 'FOO_BAR' => 'BAZ' })
103
+ api.put_config_vars("myapp", { 'BAR_BAZ' => 'QUX' })
104
+ api.put_config_vars("myapp", { 'BAZ_QUX' => 'QUUX' })
105
+ end
106
+
107
+ after(:each) do
108
+ api.delete_app("myapp")
109
+ end
110
+
111
+ it "rolls back to the latest release with no argument" do
112
+ stderr, stdout = execute("releases:rollback")
113
+ stderr.should == ""
114
+ stdout.should == <<-STDOUT
115
+ Rolling back myapp... done, v2
116
+ STDOUT
117
+ end
118
+
119
+ it "rolls back to the specified release" do
120
+ stderr, stdout = execute("releases:rollback v1")
121
+ stderr.should == ""
122
+ stdout.should == <<-STDOUT
123
+ Rolling back myapp... done, v1
124
+ STDOUT
125
+ end
126
+ end
127
+
128
+ end
129
+
130
+
@@ -0,0 +1,86 @@
1
+ require "spec_helper"
2
+ require "heroku/command/run"
3
+ require "heroku/helpers"
4
+
5
+ describe Heroku::Command::Run do
6
+
7
+ include Heroku::Helpers
8
+
9
+ before(:each) do
10
+ stub_core
11
+ api.post_app("name" => "myapp", "stack" => "cedar")
12
+ end
13
+
14
+ after(:each) do
15
+ api.delete_app("myapp")
16
+ end
17
+
18
+ describe "run" do
19
+ it "runs a command" do
20
+ stub_rendezvous.start { $stdout.puts "output" }
21
+
22
+ stderr, stdout = execute("run bin/foo")
23
+ stderr.should == ""
24
+ stdout.should == <<-STDOUT
25
+ Running `bin/foo` attached to terminal... up, run.1
26
+ output
27
+ STDOUT
28
+ end
29
+ end
30
+
31
+ describe "run:detached" do
32
+ it "runs a command detached" do
33
+ stderr, stdout = execute("run:detached bin/foo")
34
+ stderr.should == ""
35
+ stdout.should == <<-STDOUT
36
+ Running `bin/foo` detached... up, run.1
37
+ Use `heroku logs -p run.1` to view the output.
38
+ STDOUT
39
+ end
40
+ end
41
+
42
+ describe "run:rake" do
43
+ it "runs a rake command" do
44
+ stub_rendezvous.start { $stdout.puts("rake_output") }
45
+
46
+ stderr, stdout = execute("run:rake foo")
47
+ stderr.should == ""
48
+ stdout.should == <<-STDOUT
49
+ WARNING: `heroku run:rake` has been deprecated. Please use `heroku run rake` instead.
50
+ Running `rake foo` attached to terminal... up, run.1
51
+ rake_output
52
+ STDOUT
53
+ end
54
+
55
+ it "shows the proper command in the deprecation warning" do
56
+ stub_rendezvous.start { $stdout.puts("rake_output") }
57
+
58
+ stderr, stdout = execute("rake foo")
59
+ stderr.should == ""
60
+ stdout.should == <<-STDOUT
61
+ WARNING: `heroku rake` has been deprecated. Please use `heroku run rake` instead.
62
+ Running `rake foo` attached to terminal... up, run.1
63
+ rake_output
64
+ STDOUT
65
+ end
66
+ end
67
+
68
+ describe "run:console" do
69
+ it "runs a console session" do
70
+ console = stub(Heroku::Client::ConsoleSession)
71
+ stub_core.console.returns(console)
72
+ stderr, stdout = execute("run:console")
73
+ stderr.should == ""
74
+ stdout.should == ""
75
+ end
76
+
77
+ it "runs a console command" do
78
+ stub_core.console("myapp", "bash foo").returns("foo_output")
79
+ stderr, stdout = execute("run:console bash foo")
80
+ stderr.should == ""
81
+ stdout.should == <<-STDOUT
82
+ foo_output
83
+ STDOUT
84
+ end
85
+ end
86
+ end