shelly 0.0.43 → 0.0.44.pre

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.
@@ -18,19 +18,19 @@ describe Shelly::CLI::Backup do
18
18
  before do
19
19
  FileUtils.mkdir_p("/projects/foo")
20
20
  Dir.chdir("/projects/foo")
21
- File.open("Cloudfile", 'w') {|f| f.write("foo-staging:\n") }
21
+ File.open("Cloudfile", 'w') { |f| f.write("foo-staging:\n") }
22
22
  end
23
23
 
24
- it "should exit with message if there is no Cloudfile" do
25
- File.delete("Cloudfile")
26
- $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
27
- lambda {
28
- invoke(@backup, :list)
29
- }.should raise_error(SystemExit)
24
+ it "should ensure user has logged in" do
25
+ hooks(@backup, :list).should include(:logged_in?)
26
+ end
27
+
28
+ it "should ensure that Cloudfile is present" do
29
+ hooks(@backup, :list).should include(:cloudfile_present?)
30
30
  end
31
31
 
32
32
  it "should exit if user doesn't have access to cloud in Cloudfile" do
33
- exception = Shelly::Client::APIError.new(404, {"message" => "Couldn't find Cloud with"})
33
+ exception = Shelly::Client::NotFoundException.new("resource" => "cloud")
34
34
  @client.stub(:database_backups).and_raise(exception)
35
35
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
36
36
  lambda { invoke(@backup, :list) }.should raise_error(SystemExit)
@@ -42,8 +42,8 @@ describe Shelly::CLI::Backup do
42
42
  end
43
43
 
44
44
  it "should show information to select specific cloud and exit" do
45
- $stdout.should_receive(:puts).with("You have multiple clouds in Cloudfile. Select cloud to view database backups for using:")
46
- $stdout.should_receive(:puts).with(" shelly backup list --cloud foo-production")
45
+ $stdout.should_receive(:puts).with(red "You have multiple clouds in Cloudfile.")
46
+ $stdout.should_receive(:puts).with("Select cloud using `shelly backup list --cloud foo-production`")
47
47
  $stdout.should_receive(:puts).with("Available clouds:")
48
48
  $stdout.should_receive(:puts).with(" * foo-production")
49
49
  $stdout.should_receive(:puts).with(" * foo-staging")
@@ -71,6 +71,10 @@ describe Shelly::CLI::Backup do
71
71
  $stdout.stub(:puts)
72
72
  end
73
73
 
74
+ it "should ensure user has logged in" do
75
+ hooks(@backup, :get).should include(:logged_in?)
76
+ end
77
+
74
78
  it "should make sure that cloud is choosen" do
75
79
  @client.should_receive(:database_backup).with("foo-staging", "last")
76
80
  invoke(@backup, :get)
@@ -103,23 +107,23 @@ describe Shelly::CLI::Backup do
103
107
 
104
108
  context "on backup not found" do
105
109
  it "it should display error message" do
106
- exception = Shelly::Client::APIError.new(404, {"message" => "Couldn't find Backup with"})
110
+ exception = Shelly::Client::NotFoundException.new({"resource" => "database_backup"})
107
111
  @client.stub(:database_backup).and_raise(exception)
108
112
  $stdout.should_receive(:puts).with(red "Backup not found")
109
- $stdout.should_receive(:puts).with("You can list available backups with 'shelly backup list' command")
113
+ $stdout.should_receive(:puts).with("You can list available backups with `shelly backup list` command")
110
114
  invoke(@backup, :get, "better.tar.gz")
111
115
  end
112
116
  end
113
117
 
114
118
  context "on unsupported exception" do
115
119
  it "should re-raise it" do
116
- exception = Shelly::Client::APIError.new(500)
120
+ exception = Shelly::Client::APIException.new
117
121
  @client.stub(:database_backup).and_raise(exception)
118
122
  $stdout.should_not_receive(:puts).with(red "Backup not found")
119
- $stdout.should_not_receive(:puts).with("You can list available backups with 'shelly backup list' command")
123
+ $stdout.should_not_receive(:puts).with("You can list available backups with `shelly backup list` command")
120
124
  lambda {
121
125
  invoke(@backup, :get, "better.tar.gz")
122
- }.should raise_error(Shelly::Client::APIError)
126
+ }.should raise_error(Shelly::Client::APIException)
123
127
  end
124
128
  end
125
129
  end
@@ -132,8 +136,12 @@ describe Shelly::CLI::Backup do
132
136
  File.open("Cloudfile", 'w') {|f| f.write("foo-staging:\n") }
133
137
  end
134
138
 
139
+ it "should ensure user has logged in" do
140
+ hooks(@backup, :create).should include(:logged_in?)
141
+ end
142
+
135
143
  it "should exit if user doesn't have access to cloud in Cloudfile" do
136
- exception = Shelly::Client::APIError.new(404, {"message" => "Cloud foo-staging not found"})
144
+ exception = Shelly::Client::NotFoundException.new({"resource" => "cloud"})
137
145
  @client.stub(:request_backup).and_raise(exception)
138
146
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
139
147
  lambda { invoke(@backup, :create) }.should raise_error(SystemExit)
@@ -141,7 +149,7 @@ describe Shelly::CLI::Backup do
141
149
 
142
150
  it "should display errors and exit 1 when kind is not valid" do
143
151
  response = {"message" => "Wrong KIND argument. User one of following: postgresql, mongodb, redis"}
144
- exception = Shelly::Client::APIError.new(422, response)
152
+ exception = Shelly::Client::ValidationException.new(response)
145
153
  @client.should_receive(:request_backup).and_raise(exception)
146
154
  $stdout.should_receive(:puts).with(red response["message"])
147
155
  lambda { invoke(@backup, :create) }.should raise_error(SystemExit)
@@ -162,16 +170,20 @@ describe Shelly::CLI::Backup do
162
170
  $stdout.stub(:puts)
163
171
  end
164
172
 
173
+ it "should ensure user has logged in" do
174
+ hooks(@backup, :restore).should include(:logged_in?)
175
+ end
176
+
165
177
  it "should restore database" do
166
178
  $stdout.should_receive(:puts).with("You are about restore database postgre for cloud foo-staging to state from better.tar.gz")
167
179
  $stdout.should_receive(:print).with("I want to restore the database (yes/no): ")
168
180
  $stdout.should_receive(:puts).with("\n")
169
181
  @client.stub(:restore_backup).with("todo-list-test","better.tar.gz")
170
182
  $stdout.should_receive(:puts).with("\n")
171
- $stdout.should_receive(:puts).with("Restore has been scheduled. Wait few minutes till database is restored.")
183
+ $stdout.should_receive(:puts).with("Restore has been scheduled. Wait a few minutes till database is restored.")
172
184
 
173
185
  fake_stdin(["yes"]) do
174
- @backup.restore("better.tar.gz")
186
+ invoke(@backup, :restore, "better.tar.gz")
175
187
  end
176
188
  end
177
189
 
@@ -184,27 +196,20 @@ describe Shelly::CLI::Backup do
184
196
 
185
197
  lambda {
186
198
  fake_stdin(["no"]) do
187
- @backup.restore("better.tar.gz")
199
+ invoke(@backup, :restore, "better.tar.gz")
188
200
  end
189
201
  }.should raise_error(SystemExit)
190
202
  end
191
203
  end
192
204
 
193
- it "should exit with 1 when filename is not specified" do
194
- $stdout.should_receive(:puts).with(red "Filename is required")
195
- lambda {
196
- @backup.restore
197
- }.should raise_error(SystemExit)
198
- end
199
-
200
205
  context "on backup not found" do
201
206
  it "should display error message" do
202
- response = {"message" => "Backup restore not found"}
203
- exception = Shelly::Client::APIError.new(404, response)
207
+ response = {"resource" => "database_backup"}
208
+ exception = Shelly::Client::NotFoundException.new(response)
204
209
  @client.stub(:database_backup).and_raise(exception)
205
210
  $stdout.should_receive(:puts).with(red "Backup not found")
206
- $stdout.should_receive(:puts).with("You can list available backups with 'shelly backup list' command")
207
- @backup.restore("better.tar.gz")
211
+ $stdout.should_receive(:puts).with("You can list available backups with `shelly backup list` command")
212
+ invoke(@backup, :restore, "better.tar.gz")
208
213
  end
209
214
  end
210
215
  end
@@ -25,17 +25,16 @@ describe Shelly::CLI::Config do
25
25
  File.open("Cloudfile", 'w') {|f| f.write("foo-staging:\nfoo-production:\n") }
26
26
  end
27
27
 
28
- it "should exit with message if there is no Cloudfile" do
29
- File.delete("Cloudfile")
30
- $stdout.should_receive(:puts).with(red "No Cloudfile found")
31
- lambda {
32
- invoke(@config, :list)
33
- }.should raise_error(SystemExit)
28
+ it "should ensure user has logged in" do
29
+ hooks(@config, :list).should include(:logged_in?)
30
+ end
31
+
32
+ it "should ensure that Cloudfile is present" do
33
+ hooks(@config, :list).should include(:cloudfile_present?)
34
34
  end
35
35
 
36
36
  it "should exit if user doesn't have access to cloud in Cloudfile" do
37
- response = {"message" => "Couldn't find Cloud with code_name = foo-staging"}
38
- exception = Shelly::Client::APIError.new(404, response)
37
+ exception = Shelly::Client::NotFoundException.new("resource" => "cloud")
39
38
  @client.stub(:app_configs).and_raise(exception)
40
39
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-production' cloud defined in Cloudfile")
41
40
  lambda { invoke(@config, :list) }.should raise_error(SystemExit)
@@ -58,10 +57,13 @@ describe Shelly::CLI::Config do
58
57
  end
59
58
 
60
59
  describe "#show" do
61
- it "should exit with message if there is no Cloudfile" do
62
- File.delete("Cloudfile")
63
- $stdout.should_receive(:puts).with(red "No Cloudfile found")
64
- lambda { invoke(@config, :show) }.should raise_error(SystemExit)
60
+
61
+ it "should ensure user has logged in" do
62
+ hooks(@config, :show).should include(:logged_in?)
63
+ end
64
+
65
+ it "should ensure that Cloudfile is present" do
66
+ hooks(@config, :show).should include(:cloudfile_present?)
65
67
  end
66
68
 
67
69
  it "should exit if no path was specified" do
@@ -79,7 +81,7 @@ describe Shelly::CLI::Config do
79
81
  describe "on failure" do
80
82
  context "when config doesn't exist" do
81
83
  it "should display error message and exit with 1" do
82
- exception = Shelly::Client::APIError.new(404, {"message" => "Couldn't find Config with"})
84
+ exception = Shelly::Client::NotFoundException.new("resource" => "config")
83
85
  @client.should_receive(:app_config).and_raise(exception)
84
86
  $stdout.should_receive(:puts).with(red "Config 'config/app.yml' not found")
85
87
  $stdout.should_receive(:puts).with(red "You can list available config files with `shelly config list --cloud foo-staging`")
@@ -91,7 +93,7 @@ describe Shelly::CLI::Config do
91
93
 
92
94
  context "when user doesn't have access to cloud" do
93
95
  it "should display error message and exit with 1" do
94
- exception = Shelly::Client::APIError.new(404, {"message" => "Couldn't find Cloud with"})
96
+ exception = Shelly::Client::NotFoundException.new("resource" => "cloud")
95
97
  @client.should_receive(:app_config).and_raise(exception)
96
98
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
97
99
  lambda {
@@ -107,7 +109,8 @@ describe Shelly::CLI::Config do
107
109
  end
108
110
 
109
111
  it "should show info to select cloud and exit" do
110
- $stdout.should_receive(:puts).with("You have multiple clouds in Cloudfile. Specify cloud using:")
112
+ $stdout.should_receive(:puts).with(red "You have multiple clouds in Cloudfile.")
113
+ $stdout.should_receive(:puts).with("Select cloud using `shelly show path --cloud foo-production`")
111
114
  lambda { invoke(@config, :show, "path") }.should raise_error(SystemExit)
112
115
  end
113
116
 
@@ -120,10 +123,12 @@ describe Shelly::CLI::Config do
120
123
  end
121
124
 
122
125
  describe "#create" do
123
- it "should exit with message if there is no Cloudfile" do
124
- File.delete("Cloudfile")
125
- $stdout.should_receive(:puts).with(red "No Cloudfile found")
126
- lambda { invoke(@config, :create, "path") }.should raise_error(SystemExit)
126
+ it "should ensure user has logged in" do
127
+ hooks(@config, :create).should include(:logged_in?)
128
+ end
129
+
130
+ it "should ensure that Cloudfile is present" do
131
+ hooks(@config, :create).should include(:cloudfile_present?)
127
132
  end
128
133
 
129
134
  it "should exit if no path was specified" do
@@ -144,6 +149,18 @@ describe Shelly::CLI::Config do
144
149
  invoke(@config, :create, "path")
145
150
  end
146
151
 
152
+ context "on validation errors" do
153
+ it "should display validation errors" do
154
+ exception = Shelly::Client::ValidationException.new({"errors" => [["path", "is already taken"]]})
155
+ @config.should_receive(:system).with(/vim \/tmp\/shelly-edit/).and_return(true)
156
+ @client.stub(:app_create_config).and_raise(exception)
157
+ $stdout.should_receive(:puts).with(red "Path is already taken")
158
+ lambda {
159
+ invoke(@config, :create, "config/app.yml")
160
+ }.should raise_error(SystemExit)
161
+ end
162
+ end
163
+
147
164
  context "multiple clouds" do
148
165
  before do
149
166
  File.open("Cloudfile", 'w') {|f| f.write("foo-staging:\nfoo-production:\n") }
@@ -151,7 +168,8 @@ describe Shelly::CLI::Config do
151
168
 
152
169
  it "should show info to select cloud and exit" do
153
170
  @config.stub(:system) {true}
154
- $stdout.should_receive(:puts).with("You have multiple clouds in Cloudfile. Specify cloud using:")
171
+ $stdout.should_receive(:puts).with(red "You have multiple clouds in Cloudfile.")
172
+ $stdout.should_receive(:puts).with("Select cloud using `shelly create path --cloud foo-production`")
155
173
  lambda { @config.create("path") }.should raise_error(SystemExit)
156
174
  end
157
175
 
@@ -166,10 +184,12 @@ describe Shelly::CLI::Config do
166
184
 
167
185
 
168
186
  describe "#edit" do
169
- it "should exit with message if there is no Cloudfile" do
170
- File.delete("Cloudfile")
171
- $stdout.should_receive(:puts).with(red "No Cloudfile found")
172
- lambda { invoke(@config, :edit, "path") }.should raise_error(SystemExit)
187
+ it "should ensure user has logged in" do
188
+ hooks(@config, :edit).should include(:logged_in?)
189
+ end
190
+
191
+ it "should ensure that Cloudfile is present" do
192
+ hooks(@config, :edit).should include(:cloudfile_present?)
173
193
  end
174
194
 
175
195
  it "should exit if no path was specified" do
@@ -195,7 +215,7 @@ describe Shelly::CLI::Config do
195
215
  describe "on failure" do
196
216
  context "when config doesn't exist" do
197
217
  it "should display error message and exit with 1" do
198
- exception = Shelly::Client::APIError.new(404, {"message" => "Couldn't find Config with"})
218
+ exception = Shelly::Client::NotFoundException.new("resource" => "config")
199
219
  @client.should_receive(:app_config).and_raise(exception)
200
220
  $stdout.should_receive(:puts).with(red "Config 'config/app.yml' not found")
201
221
  $stdout.should_receive(:puts).with(red "You can list available config files with `shelly config list --cloud foo-staging`")
@@ -207,7 +227,7 @@ describe Shelly::CLI::Config do
207
227
 
208
228
  context "when user doesn't have access to cloud" do
209
229
  it "should display error message and exit with 1" do
210
- exception = Shelly::Client::APIError.new(404, {"message" => "Couldn't find Cloud with"})
230
+ exception = Shelly::Client::NotFoundException.new("resource" => "cloud")
211
231
  @client.should_receive(:app_config).and_raise(exception)
212
232
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
213
233
  lambda {
@@ -215,6 +235,17 @@ describe Shelly::CLI::Config do
215
235
  }.should raise_error(SystemExit)
216
236
  end
217
237
  end
238
+
239
+ context "on validation errors" do
240
+ it "should display validation errors" do
241
+ exception = Shelly::Client::ValidationException.new({"errors" => [["path", "is already taken"]]})
242
+ @client.should_receive(:app_config).and_raise(exception)
243
+ $stdout.should_receive(:puts).with(red "Path is already taken")
244
+ lambda {
245
+ invoke(@config, :edit, "config/app.yml")
246
+ }.should raise_error(SystemExit)
247
+ end
248
+ end
218
249
  end
219
250
 
220
251
  context "multiple clouds" do
@@ -224,7 +255,8 @@ describe Shelly::CLI::Config do
224
255
 
225
256
  it "should show info to select cloud and exit" do
226
257
  @config.stub(:system) {true}
227
- $stdout.should_receive(:puts).with("You have multiple clouds in Cloudfile. Specify cloud using:")
258
+ $stdout.should_receive(:puts).with(red "You have multiple clouds in Cloudfile.")
259
+ $stdout.should_receive(:puts).with("Select cloud using `shelly edit path --cloud foo-production`")
228
260
  lambda { invoke(@config, :edit, "path") }.should raise_error(SystemExit)
229
261
  end
230
262
 
@@ -239,10 +271,12 @@ describe Shelly::CLI::Config do
239
271
  end
240
272
 
241
273
  describe "#delete" do
242
- it "should exit with message if there is no Cloudfile" do
243
- File.delete("Cloudfile")
244
- $stdout.should_receive(:puts).with(red "No Cloudfile found")
245
- lambda { invoke(@config, :delete) }.should raise_error(SystemExit)
274
+ it "should ensure user has logged in" do
275
+ hooks(@config, :delete).should include(:logged_in?)
276
+ end
277
+
278
+ it "should ensure that Cloudfile is present" do
279
+ hooks(@config, :delete).should include(:cloudfile_present?)
246
280
  end
247
281
 
248
282
  it "should exit if no path was specified" do
@@ -272,7 +306,8 @@ describe Shelly::CLI::Config do
272
306
  end
273
307
 
274
308
  it "should show info to select cloud and exit" do
275
- $stdout.should_receive(:puts).with("You have multiple clouds in Cloudfile. Specify cloud using:")
309
+ $stdout.should_receive(:puts).with(red "You have multiple clouds in Cloudfile.")
310
+ $stdout.should_receive(:puts).with("Select cloud using `shelly delete path --cloud foo-production`")
276
311
  lambda { invoke(@config, :delete, "path") }.should raise_error(SystemExit)
277
312
  end
278
313
 
@@ -289,7 +324,7 @@ describe Shelly::CLI::Config do
289
324
  describe "on failure" do
290
325
  context "when config doesn't exist" do
291
326
  it "should display error message and exit with 1" do
292
- exception = Shelly::Client::APIError.new(404, {"message" => "Couldn't find Config with"})
327
+ exception = Shelly::Client::NotFoundException.new("resource" => "config")
293
328
  @client.should_receive(:app_delete_config).and_raise(exception)
294
329
  $stdout.should_receive(:puts).with(red "Config 'config/app.yml' not found")
295
330
  $stdout.should_receive(:puts).with(red "You can list available config files with `shelly config list --cloud foo-staging`")
@@ -303,7 +338,7 @@ describe Shelly::CLI::Config do
303
338
 
304
339
  context "when user doesn't have access to cloud" do
305
340
  it "should display error message and exit with 1" do
306
- exception = Shelly::Client::APIError.new(404, {"message" => "Couldn't find Cloud with"})
341
+ exception = Shelly::Client::NotFoundException.new("resource" => "cloud")
307
342
  @client.should_receive(:app_delete_config).and_raise(exception)
308
343
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
309
344
  fake_stdin(["y"]) do
@@ -316,4 +351,4 @@ describe Shelly::CLI::Config do
316
351
  end
317
352
 
318
353
  end
319
- end
354
+ end
@@ -20,16 +20,16 @@ describe Shelly::CLI::Deploys do
20
20
  @client.stub(:token).and_return("abc")
21
21
  end
22
22
 
23
- it "should exit with message if there is no Cloudfile" do
24
- File.delete("Cloudfile")
25
- $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
26
- lambda {
27
- invoke(@deploys, :list)
28
- }.should raise_error(SystemExit)
23
+ it "should ensure user has logged in" do
24
+ hooks(@deploys, :list).should include(:logged_in?)
25
+ end
26
+
27
+ it "should ensure that Cloudfile is present" do
28
+ hooks(@deploys, :list).should include(:cloudfile_present?)
29
29
  end
30
30
 
31
31
  it "should exit if user doesn't have access to cloud in Cloudfile" do
32
- @client.stub(:deploy_logs).and_raise(Shelly::Client::APIError.new(404))
32
+ @client.stub(:deploy_logs).and_raise(Shelly::Client::NotFoundException.new("resource" => "cloud"))
33
33
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
34
34
  lambda { invoke(@deploys, :list) }.should raise_error(SystemExit)
35
35
  end
@@ -40,8 +40,8 @@ describe Shelly::CLI::Deploys do
40
40
  end
41
41
 
42
42
  it "should show information to select specific cloud and exit" do
43
- $stdout.should_receive(:puts).with("You have multiple clouds in Cloudfile. Select cloud to view deploy logs using:")
44
- $stdout.should_receive(:puts).with(" shelly deploys list --cloud foo-production")
43
+ $stdout.should_receive(:puts).with(red "You have multiple clouds in Cloudfile.")
44
+ $stdout.should_receive(:puts).with("Select cloud using `shelly deploys list --cloud foo-production`")
45
45
  $stdout.should_receive(:puts).with("Available clouds:")
46
46
  $stdout.should_receive(:puts).with(" * foo-production")
47
47
  $stdout.should_receive(:puts).with(" * foo-staging")
@@ -78,17 +78,17 @@ describe Shelly::CLI::Deploys do
78
78
  @client.stub(:token).and_return("abc")
79
79
  end
80
80
 
81
- it "should exit with message if there is no Cloudfile" do
82
- File.delete("Cloudfile")
83
- $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
84
- lambda {
85
- invoke(@deploys, :show)
86
- }.should raise_error(SystemExit)
81
+ it "should ensure user has logged in" do
82
+ hooks(@deploys, :show).should include(:logged_in?)
83
+ end
84
+
85
+ it "should ensure that Cloudfile is present" do
86
+ hooks(@deploys, :show).should include(:cloudfile_present?)
87
87
  end
88
88
 
89
89
  context "user doesn't have access to cloud" do
90
90
  it "should exit 1 with message" do
91
- exception = Shelly::Client::APIError.new(404, {"message" => "Couldn't find Cloud with"})
91
+ exception = Shelly::Client::NotFoundException.new("resource" => "cloud")
92
92
  @client.stub(:deploy_log).and_raise(exception)
93
93
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
94
94
  lambda { @deploys.show("last") }.should raise_error(SystemExit)
@@ -97,7 +97,7 @@ describe Shelly::CLI::Deploys do
97
97
 
98
98
  context "log not found" do
99
99
  it "should exit 1 with message" do
100
- exception = Shelly::Client::APIError.new(404, {"message" => "Couldn't find Log with"})
100
+ exception = Shelly::Client::NotFoundException.new("resource" => "log")
101
101
  @client.stub(:deploy_log).and_raise(exception)
102
102
  $stdout.should_receive(:puts).with(red "Log not found, list all deploy logs using `shelly deploys list --cloud=foo-staging`")
103
103
  lambda { @deploys.show("last") }.should raise_error(SystemExit)
@@ -110,8 +110,8 @@ describe Shelly::CLI::Deploys do
110
110
  end
111
111
 
112
112
  it "should show information to select specific cloud and exit" do
113
- $stdout.should_receive(:puts).with("You have multiple clouds in Cloudfile. Select log and cloud to view deploy logs using:")
114
- $stdout.should_receive(:puts).with(" shelly deploys show last --cloud foo-production")
113
+ $stdout.should_receive(:puts).with(red "You have multiple clouds in Cloudfile.")
114
+ $stdout.should_receive(:puts).with("Select cloud using `shelly deploys show last --cloud foo-production`")
115
115
  $stdout.should_receive(:puts).with("Available clouds:")
116
116
  $stdout.should_receive(:puts).with(" * foo-production")
117
117
  $stdout.should_receive(:puts).with(" * foo-staging")