shelly 0.0.37 → 0.0.38

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,6 +5,7 @@ require "shelly/download_progress_bar"
5
5
  describe Shelly::CLI::Backup do
6
6
  before do
7
7
  @backup = Shelly::CLI::Backup.new
8
+ Shelly::CLI::Backup.stub(:new).and_return(@backup)
8
9
  @client = mock
9
10
  @client.stub(:token).and_return("abc")
10
11
  Shelly::Client.stub(:new).and_return(@client)
@@ -24,7 +25,7 @@ describe Shelly::CLI::Backup do
24
25
  File.delete("Cloudfile")
25
26
  $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
26
27
  lambda {
27
- @backup.list
28
+ invoke(@backup, :list)
28
29
  }.should raise_error(SystemExit)
29
30
  end
30
31
 
@@ -33,7 +34,7 @@ describe Shelly::CLI::Backup do
33
34
  exception = Shelly::Client::APIError.new(response.to_json, 401)
34
35
  @client.stub(:database_backups).and_raise(exception)
35
36
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
36
- lambda { @backup.list }.should raise_error(SystemExit)
37
+ lambda { invoke(@backup, :list) }.should raise_error(SystemExit)
37
38
  end
38
39
 
39
40
  context "multiple clouds" do
@@ -47,7 +48,7 @@ describe Shelly::CLI::Backup do
47
48
  $stdout.should_receive(:puts).with("Available clouds:")
48
49
  $stdout.should_receive(:puts).with(" * foo-production")
49
50
  $stdout.should_receive(:puts).with(" * foo-staging")
50
- lambda { @backup.list }.should raise_error(SystemExit)
51
+ lambda { invoke(@backup, :list) }.should raise_error(SystemExit)
51
52
  end
52
53
 
53
54
  it "should take cloud from command line for which to show backups" do
@@ -57,8 +58,8 @@ describe Shelly::CLI::Backup do
57
58
  $stdout.should_receive(:puts).with(" Filename | Size")
58
59
  $stdout.should_receive(:puts).with(" backup.postgre.tar.gz | 10kb")
59
60
  $stdout.should_receive(:puts).with(" backup.mongo.tar.gz | 22kb")
60
- @backup.options = {:cloud => 'foo-staging'}
61
- @backup.list
61
+ @backup.options = {:cloud => "foo-staging"}
62
+ invoke(@backup, :list)
62
63
  end
63
64
  end
64
65
 
@@ -73,30 +74,32 @@ describe Shelly::CLI::Backup do
73
74
 
74
75
  it "should make sure that cloud is choosen" do
75
76
  @client.should_receive(:database_backup).with("foo-staging", "last")
76
- @backup.get
77
+ invoke(@backup, :get)
78
+ end
77
79
 
78
- @backup.options = {:cloud => "other"}
80
+ it "should make sure that cloud is choosen" do
79
81
  @client.should_receive(:database_backup).with("other", "last")
80
- @backup.get
82
+ @backup.options = {:cloud => "other"}
83
+ invoke(@backup, :get)
81
84
  end
82
85
 
83
86
  it "should fetch backup size and initialize download progress bar" do
84
87
  @client.stub(:database_backup).and_return({"filename" => "backup.postgres.tar.gz", "size" => 333})
85
88
  Shelly::DownloadProgressBar.should_receive(:new).with(333).and_return(@bar)
86
89
 
87
- @backup.get
90
+ invoke(@backup, :get)
88
91
  end
89
92
 
90
93
  it "should fetch given backup file itself" do
91
94
  @client.should_receive(:download_backup).with("foo-staging", "better.tar.gz", @bar.progress_callback)
92
- @backup.get("better.tar.gz")
95
+ invoke(@backup, :get, "better.tar.gz")
93
96
  end
94
97
 
95
98
  it "should show info where file has been saved" do
96
99
  $stdout.should_receive(:puts)
97
100
  $stdout.should_receive(:puts).with(green "Backup file saved to better.tar.gz")
98
101
  @client.should_receive(:download_backup).with("foo-staging", "better.tar.gz", @bar.progress_callback)
99
- @backup.get("last")
102
+ invoke(@backup, :get, "last")
100
103
  end
101
104
 
102
105
  context "on backup not found" do
@@ -105,7 +108,7 @@ describe Shelly::CLI::Backup do
105
108
  @client.stub(:database_backup).and_raise(exception)
106
109
  $stdout.should_receive(:puts).with(red "Backup not found")
107
110
  $stdout.should_receive(:puts).with("You can list available backups with 'shelly backup list' command")
108
- @backup.get("better.tar.gz")
111
+ invoke(@backup, :get, "better.tar.gz")
109
112
  end
110
113
  end
111
114
 
@@ -116,7 +119,7 @@ describe Shelly::CLI::Backup do
116
119
  $stdout.should_not_receive(:puts).with(red "Backup not found")
117
120
  $stdout.should_not_receive(:puts).with("You can list available backups with 'shelly backup list' command")
118
121
  lambda {
119
- @backup.get("better.tar.gz")
122
+ invoke(@backup, :get, "better.tar.gz")
120
123
  }.should raise_error(Shelly::Client::APIError)
121
124
  end
122
125
  end
@@ -135,22 +138,22 @@ describe Shelly::CLI::Backup do
135
138
  exception = Shelly::Client::APIError.new(response.to_json, 404)
136
139
  @client.stub(:request_backup).and_raise(exception)
137
140
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
138
- lambda { @backup.create }.should raise_error(SystemExit)
141
+ lambda { invoke(@backup, :create) }.should raise_error(SystemExit)
139
142
  end
140
143
 
141
144
  it "should display errors and exit 1 when kind is not valid" do
142
145
  response = {"message" => "Wrong KIND argument. User one of following: postgresql, mongodb, redis"}
143
- exception = Shelly::Client::APIError.new(response.to_json, 404)
146
+ exception = Shelly::Client::APIError.new(response.to_json, 422)
144
147
  @client.should_receive(:request_backup).and_raise(exception)
145
148
  $stdout.should_receive(:puts).with(red response["message"])
146
- lambda { @backup.create }.should raise_error(SystemExit)
149
+ lambda { invoke(@backup, :create) }.should raise_error(SystemExit)
147
150
  end
148
151
 
149
152
  it "should display information about request backup" do
150
153
  @client.stub(:request_backup)
151
154
  $stdout.should_receive(:puts).with(green "Backup requested. It can take up to several minutes for" +
152
155
  "the backup process to finish and the backup to show up in backups list.")
153
- @backup.create
156
+ invoke(@backup, :create)
154
157
  end
155
158
  end
156
159
  end
@@ -6,6 +6,7 @@ describe Shelly::CLI::Config do
6
6
  before do
7
7
  FileUtils.stub(:chmod)
8
8
  @config = Shelly::CLI::Config.new
9
+ Shelly::CLI::Config.stub(:new).and_return(@config)
9
10
  @client = mock
10
11
  Shelly::Client.stub(:new).and_return(@client)
11
12
  $stdout.stub(:puts)
@@ -28,7 +29,7 @@ describe Shelly::CLI::Config do
28
29
  File.delete("Cloudfile")
29
30
  $stdout.should_receive(:puts).with(red "No Cloudfile found")
30
31
  lambda {
31
- @config.list
32
+ invoke(@config, :list)
32
33
  }.should raise_error(SystemExit)
33
34
  end
34
35
 
@@ -37,7 +38,7 @@ describe Shelly::CLI::Config do
37
38
  exception = Shelly::Client::APIError.new(response.to_json, 404)
38
39
  @client.stub(:app_configs).and_raise(exception)
39
40
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-production' cloud defined in Cloudfile")
40
- lambda { @config.list }.should raise_error(SystemExit)
41
+ lambda { invoke(@config, :list) }.should raise_error(SystemExit)
41
42
  end
42
43
 
43
44
  it "should list available configuration files for clouds" do
@@ -51,7 +52,7 @@ describe Shelly::CLI::Config do
51
52
  $stdout.should_receive(:puts).with("Custom configuration files:")
52
53
  $stdout.should_receive(:puts).with(/ * \s+config\/settings.yml/)
53
54
 
54
- @config.list
55
+ invoke(@config, :list)
55
56
  end
56
57
 
57
58
  end
@@ -60,19 +61,19 @@ describe Shelly::CLI::Config do
60
61
  it "should exit with message if there is no Cloudfile" do
61
62
  File.delete("Cloudfile")
62
63
  $stdout.should_receive(:puts).with(red "No Cloudfile found")
63
- lambda { @config.show(1) }.should raise_error(SystemExit)
64
+ lambda { invoke(@config, :show) }.should raise_error(SystemExit)
64
65
  end
65
66
 
66
- it "should exit if no id was specified" do
67
+ it "should exit if no path was specified" do
67
68
  $stdout.should_receive(:puts).with(red "No configuration file specified")
68
- lambda { @config.show }.should raise_error(SystemExit)
69
+ lambda { invoke(@config, :show) }.should raise_error(SystemExit)
69
70
  end
70
71
 
71
72
  it "should show config" do
72
- @client.should_receive(:app_config).with("foo-staging", 1).and_return({"path" => "test.rb", "content" => "example content"})
73
+ @client.should_receive(:app_config).with("foo-staging", "path").and_return({"path" => "test.rb", "content" => "example content"})
73
74
  $stdout.should_receive(:puts).with(green "Content of test.rb:")
74
75
  $stdout.should_receive(:puts).with("example content")
75
- @config.show(1)
76
+ invoke(@config, :show, "path")
76
77
  end
77
78
 
78
79
  context "multiple clouds" do
@@ -82,13 +83,13 @@ describe Shelly::CLI::Config do
82
83
 
83
84
  it "should show info to select cloud and exit" do
84
85
  $stdout.should_receive(:puts).with("You have multiple clouds in Cloudfile. Specify cloud using:")
85
- lambda { @config.show(1) }.should raise_error(SystemExit)
86
+ lambda { invoke(@config, :show, "path") }.should raise_error(SystemExit)
86
87
  end
87
88
 
88
89
  it "should use cloud specified by parameter" do
89
- @client.should_receive(:app_config).with("foo-production", 1).and_return({"path" => "test.rb", "content" => "example content"})
90
+ @client.should_receive(:app_config).with("foo-production", "path").and_return({"path" => "test.rb", "content" => "example content"})
90
91
  @config.options = {:cloud => "foo-production"}
91
- @config.show(1)
92
+ invoke(@config, :show, "path")
92
93
  end
93
94
  end
94
95
  end
@@ -97,25 +98,25 @@ describe Shelly::CLI::Config do
97
98
  it "should exit with message if there is no Cloudfile" do
98
99
  File.delete("Cloudfile")
99
100
  $stdout.should_receive(:puts).with(red "No Cloudfile found")
100
- lambda { @config.create("path") }.should raise_error(SystemExit)
101
+ lambda { invoke(@config, :create, "path") }.should raise_error(SystemExit)
101
102
  end
102
103
 
103
- it "should exit if no id was specified" do
104
+ it "should exit if no path was specified" do
104
105
  $stdout.should_receive(:puts).with(red "No path specified")
105
- lambda { @config.create }.should raise_error(SystemExit)
106
+ lambda { invoke(@config, :create) }.should raise_error(SystemExit)
106
107
  end
107
108
 
108
109
  it "should ask to set EDITOR environment variable if not set" do
109
110
  @config.stub(:system) {false}
110
111
  $stdout.should_receive(:puts).with(red "Please set EDITOR environment variable")
111
- lambda { @config.create("path") }.should raise_error(SystemExit)
112
+ lambda { invoke(@config, :create, "path") }.should raise_error(SystemExit)
112
113
  end
113
114
 
114
115
  it "should create file" do
115
116
  @config.should_receive(:system).with(/vim \/tmp\/shelly-edit/).and_return(true)
116
117
  @client.should_receive(:app_create_config).with("foo-staging", "path", "\n").and_return({})
117
118
  $stdout.should_receive(:puts).with(green "File 'path' created, it will be used after next code deploy")
118
- @config.create("path")
119
+ invoke(@config, :create, "path")
119
120
  end
120
121
 
121
122
  context "multiple clouds" do
@@ -133,7 +134,7 @@ describe Shelly::CLI::Config do
133
134
  @config.should_receive(:system).with(/vim \/tmp\/shelly-edit/).and_return(true)
134
135
  @client.should_receive(:app_create_config).with("foo-production", "path", "\n").and_return({})
135
136
  @config.options = {:cloud => "foo-production"}
136
- @config.create("path")
137
+ invoke(@config, :create, "path")
137
138
  end
138
139
  end
139
140
  end
@@ -143,27 +144,27 @@ describe Shelly::CLI::Config do
143
144
  it "should exit with message if there is no Cloudfile" do
144
145
  File.delete("Cloudfile")
145
146
  $stdout.should_receive(:puts).with(red "No Cloudfile found")
146
- lambda { @config.edit(1) }.should raise_error(SystemExit)
147
+ lambda { invoke(@config, :edit, "path") }.should raise_error(SystemExit)
147
148
  end
148
149
 
149
150
  it "should exit if no path was specified" do
150
151
  $stdout.should_receive(:puts).with(red "No configuration file specified")
151
- lambda { @config.edit }.should raise_error(SystemExit)
152
+ lambda { invoke(@config, :edit) }.should raise_error(SystemExit)
152
153
  end
153
154
 
154
155
  it "should ask to set EDITOR environment variable if not set" do
155
- @client.should_receive(:app_config).with("foo-staging", 1).and_return({"path" => "test.rb", "content" => "example content"})
156
+ @client.should_receive(:app_config).with("foo-staging", "path").and_return({"path" => "test.rb", "content" => "example content"})
156
157
  @config.stub(:system) {false}
157
158
  $stdout.should_receive(:puts).with(red "Please set EDITOR environment variable")
158
- lambda { @config.edit(1) }.should raise_error(SystemExit)
159
+ lambda { invoke(@config, :edit, "path") }.should raise_error(SystemExit)
159
160
  end
160
161
 
161
162
  it "should create file" do
162
- @client.should_receive(:app_config).with("foo-staging", 1).and_return({"path" => "test.rb", "content" => "example content"})
163
+ @client.should_receive(:app_config).with("foo-staging", "path").and_return({"path" => "test.rb", "content" => "example content"})
163
164
  @config.should_receive(:system).with(/vim \/tmp\/shelly-edit/).and_return(true)
164
- @client.should_receive(:app_update_config).with("foo-staging", 1, "example content\n").and_return({"path" => "test.rb", "content" => "example content"})
165
+ @client.should_receive(:app_update_config).with("foo-staging", "path", "example content\n").and_return({"path" => "test.rb", "content" => "example content"})
165
166
  $stdout.should_receive(:puts).with(green "File 'test.rb' updated, it will be used after next code deploy")
166
- @config.edit(1)
167
+ invoke(@config, :edit, "path")
167
168
  end
168
169
 
169
170
  context "multiple clouds" do
@@ -174,15 +175,15 @@ describe Shelly::CLI::Config do
174
175
  it "should show info to select cloud and exit" do
175
176
  @config.stub(:system) {true}
176
177
  $stdout.should_receive(:puts).with("You have multiple clouds in Cloudfile. Specify cloud using:")
177
- lambda { @config.edit(1) }.should raise_error(SystemExit)
178
+ lambda { invoke(@config, :edit, "path") }.should raise_error(SystemExit)
178
179
  end
179
180
 
180
181
  it "should use cloud specified by parameter" do
181
- @client.should_receive(:app_config).with("foo-production", 1).and_return({"path" => "test.rb", "content" => "example content"})
182
+ @client.should_receive(:app_config).with("foo-production", "path").and_return({"path" => "test.rb", "content" => "example content"})
182
183
  @config.should_receive(:system).with(/vim \/tmp\/shelly-edit/).and_return(true)
183
- @client.should_receive(:app_update_config).with("foo-production", 1, "example content\n").and_return({"path" => "test.rb", "content" => "example content"})
184
+ @client.should_receive(:app_update_config).with("foo-production", "path", "example content\n").and_return({"path" => "test.rb", "content" => "example content"})
184
185
  @config.options = {:cloud => "foo-production"}
185
- @config.edit(1)
186
+ invoke(@config, :edit, "path")
186
187
  end
187
188
  end
188
189
  end
@@ -191,19 +192,19 @@ describe Shelly::CLI::Config do
191
192
  it "should exit with message if there is no Cloudfile" do
192
193
  File.delete("Cloudfile")
193
194
  $stdout.should_receive(:puts).with(red "No Cloudfile found")
194
- lambda { @config.delete(1) }.should raise_error(SystemExit)
195
+ lambda { invoke(@config, :delete) }.should raise_error(SystemExit)
195
196
  end
196
197
 
197
198
  it "should exit if no path was specified" do
198
199
  $stdout.should_receive(:puts).with(red "No configuration file specified")
199
- lambda { @config.delete }.should raise_error(SystemExit)
200
+ lambda { invoke(@config, :delete) }.should raise_error(SystemExit)
200
201
  end
201
202
 
202
203
  it "should delete configuration file" do
203
- @client.should_receive(:app_delete_config).with("foo-staging", 1).and_return({})
204
+ @client.should_receive(:app_delete_config).with("foo-staging", "path").and_return({})
204
205
  $stdout.should_receive(:puts).with(green "File deleted, redeploy your cloud to make changes")
205
206
  fake_stdin(["y"]) do
206
- @config.delete(1)
207
+ invoke(@config, :delete, "path")
207
208
  end
208
209
  end
209
210
 
@@ -211,7 +212,7 @@ describe Shelly::CLI::Config do
211
212
  @client.should_not_receive(:app_delete_config)
212
213
  $stdout.should_receive(:puts).with("File not deleted")
213
214
  fake_stdin(["n"]) do
214
- @config.delete(1)
215
+ invoke(@config, :delete, "path")
215
216
  end
216
217
  end
217
218
 
@@ -222,15 +223,15 @@ describe Shelly::CLI::Config do
222
223
 
223
224
  it "should show info to select cloud and exit" do
224
225
  $stdout.should_receive(:puts).with("You have multiple clouds in Cloudfile. Specify cloud using:")
225
- lambda { @config.delete(1) }.should raise_error(SystemExit)
226
+ lambda { invoke(@config, :delete, "path") }.should raise_error(SystemExit)
226
227
  end
227
228
 
228
229
  it "should use cloud specified by parameter" do
229
- @client.should_receive(:app_delete_config).with("foo-production", 1).and_return({})
230
+ @client.should_receive(:app_delete_config).with("foo-production", "path").and_return({})
230
231
  $stdout.should_receive(:puts).with(green "File deleted, redeploy your cloud to make changes")
231
232
  @config.options = {:cloud => "foo-production"}
232
233
  fake_stdin(["y"]) do
233
- @config.delete(1)
234
+ invoke(@config, :delete, "path")
234
235
  end
235
236
  end
236
237
  end
@@ -5,6 +5,7 @@ describe Shelly::CLI::Deploys do
5
5
  before do
6
6
  FileUtils.stub(:chmod)
7
7
  @deploys = Shelly::CLI::Deploys.new
8
+ Shelly::CLI::Deploys.stub(:new).and_return(@deploys)
8
9
  @client = mock
9
10
  Shelly::Client.stub(:new).and_return(@client)
10
11
  $stdout.stub(:puts)
@@ -23,7 +24,7 @@ describe Shelly::CLI::Deploys do
23
24
  File.delete("Cloudfile")
24
25
  $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
25
26
  lambda {
26
- @deploys.list
27
+ invoke(@deploys, :list)
27
28
  }.should raise_error(SystemExit)
28
29
  end
29
30
 
@@ -32,7 +33,7 @@ describe Shelly::CLI::Deploys do
32
33
  exception = Shelly::Client::APIError.new(response.to_json, 404)
33
34
  @client.stub(:deploy_logs).and_raise(exception)
34
35
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
35
- lambda { @deploys.list }.should raise_error(SystemExit)
36
+ lambda { invoke(@deploys, :list) }.should raise_error(SystemExit)
36
37
  end
37
38
 
38
39
  context "multiple clouds" do
@@ -46,7 +47,7 @@ describe Shelly::CLI::Deploys do
46
47
  $stdout.should_receive(:puts).with("Available clouds:")
47
48
  $stdout.should_receive(:puts).with(" * foo-production")
48
49
  $stdout.should_receive(:puts).with(" * foo-staging")
49
- lambda { @deploys.list }.should raise_error(SystemExit)
50
+ lambda { invoke(@deploys, :list) }.should raise_error(SystemExit)
50
51
  end
51
52
 
52
53
  it "should take cloud from command line for which to show logs" do
@@ -54,17 +55,19 @@ describe Shelly::CLI::Deploys do
54
55
  $stdout.should_receive(:puts).with(green "Available deploy logs")
55
56
  $stdout.should_receive(:puts).with(" * 2011-12-12-14-14-59")
56
57
  @deploys.options = {:cloud => "foo-staging"}
57
- @deploys.list
58
+ invoke(@deploys, :list)
58
59
  end
59
60
  end
60
61
 
61
62
  context "single cloud" do
62
63
  it "should display available logs" do
63
- @client.should_receive(:deploy_logs).with("foo-staging").and_return([{"failed" => false, "created_at" => "2011-12-12-14-14-59"}, {"failed" => true, "created_at" => "2011-12-12-15-14-59"}])
64
+ @client.should_receive(:deploy_logs).with("foo-staging").and_return([
65
+ {"failed" => false, "created_at" => "2011-12-12-14-14-59"},
66
+ {"failed" => true, "created_at" => "2011-12-12-15-14-59"}])
64
67
  $stdout.should_receive(:puts).with(green "Available deploy logs")
65
68
  $stdout.should_receive(:puts).with(" * 2011-12-12-14-14-59")
66
69
  $stdout.should_receive(:puts).with(" * 2011-12-12-15-14-59 (failed)")
67
- @deploys.list
70
+ invoke(@deploys, :list)
68
71
  end
69
72
  end
70
73
  end
@@ -81,7 +84,7 @@ describe Shelly::CLI::Deploys do
81
84
  File.delete("Cloudfile")
82
85
  $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
83
86
  lambda {
84
- @deploys.show
87
+ invoke(@deploys, :show)
85
88
  }.should raise_error(SystemExit)
86
89
  end
87
90
 
@@ -90,7 +93,7 @@ describe Shelly::CLI::Deploys do
90
93
  exception = Shelly::Client::APIError.new(response.to_json, 404)
91
94
  @client.stub(:deploy_log).and_raise(exception)
92
95
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
93
- lambda { @deploys.show("last") }.should raise_error(SystemExit)
96
+ lambda { invoke(@deploys, :show, "last") }.should raise_error(SystemExit)
94
97
  end
95
98
 
96
99
  context "multiple clouds" do
@@ -104,14 +107,14 @@ describe Shelly::CLI::Deploys do
104
107
  $stdout.should_receive(:puts).with("Available clouds:")
105
108
  $stdout.should_receive(:puts).with(" * foo-production")
106
109
  $stdout.should_receive(:puts).with(" * foo-staging")
107
- lambda { @deploys.show("last") }.should raise_error(SystemExit)
110
+ lambda { invoke(@deploys, :show, "last") }.should raise_error(SystemExit)
108
111
  end
109
112
 
110
113
  it "should render the logs" do
111
114
  @client.should_receive(:deploy_log).with("foo-staging", "last").and_return(response)
112
115
  expected_output
113
116
  @deploys.options = {:cloud => "foo-staging"}
114
- @deploys.show("last")
117
+ invoke(@deploys, :show, "last")
115
118
  end
116
119
  end
117
120
 
@@ -119,7 +122,7 @@ describe Shelly::CLI::Deploys do
119
122
  it "should render logs without passing cloud" do
120
123
  @client.should_receive(:deploy_log).with("foo-staging", "last").and_return(response)
121
124
  expected_output
122
- @deploys.show("last")
125
+ invoke(@deploys, :show, "last")
123
126
  end
124
127
  end
125
128
 
@@ -5,6 +5,7 @@ describe Shelly::CLI::Main do
5
5
  before do
6
6
  FileUtils.stub(:chmod)
7
7
  @main = Shelly::CLI::Main.new
8
+ Shelly::CLI::Main.stub(:new).and_return(@main)
8
9
  @client = mock
9
10
  Shelly::Client.stub(:new).and_return(@client)
10
11
  Shelly::User.stub(:guess_email).and_return("")
@@ -15,7 +16,7 @@ describe Shelly::CLI::Main do
15
16
  describe "#version" do
16
17
  it "should return shelly's version" do
17
18
  $stdout.should_receive(:puts).with("shelly version #{Shelly::VERSION}")
18
- @main.version
19
+ invoke(@main, :version)
19
20
  end
20
21
  end
21
22
 
@@ -42,7 +43,7 @@ Tasks:
42
43
  Options:
43
44
  [--debug] # Show debug information
44
45
  OUT
45
- out = IO.popen("bin/shelly").read.strip
46
+ out = IO.popen("bin/shelly --debug").read.strip
46
47
  out.should == expected.strip
47
48
  end
48
49
 
@@ -79,7 +80,7 @@ OUT
79
80
  $stdout.should_receive(:puts).with("\e[31mNo such file or directory - " + @key_path + "\e[0m")
80
81
  $stdout.should_receive(:puts).with("\e[31mUse ssh-keygen to generate ssh key pair\e[0m")
81
82
  lambda {
82
- @main.register
83
+ invoke(@main, :register)
83
84
  }.should raise_error(SystemExit)
84
85
  end
85
86
 
@@ -88,7 +89,7 @@ OUT
88
89
  $stdout.should_receive(:puts).with("\e[31mUser with your ssh key already exists.\e[0m")
89
90
  $stdout.should_receive(:puts).with("\e[31mYou can login using: shelly login [EMAIL]\e[0m")
90
91
  lambda {
91
- @main.register
92
+ invoke(@main, :register)
92
93
  }.should raise_error(SystemExit)
93
94
  end
94
95
 
@@ -97,7 +98,7 @@ OUT
97
98
  $stdout.should_receive(:print).with("Password: ")
98
99
  $stdout.should_receive(:print).with("Password confirmation: ")
99
100
  fake_stdin(["better@example.com", "secret", "secret"]) do
100
- @main.register
101
+ invoke(@main, :register)
101
102
  end
102
103
  end
103
104
 
@@ -106,21 +107,21 @@ OUT
106
107
  $stdout.should_receive(:print).with("Email (kate@example.com - default): ")
107
108
  @client.should_receive(:register_user).with("kate@example.com", "secret", "ssh-key AAbbcc")
108
109
  fake_stdin(["", "secret", "secret"]) do
109
- @main.register
110
+ invoke(@main, :register)
110
111
  end
111
112
  end
112
113
 
113
114
  it "should use email provided by user" do
114
115
  @client.should_receive(:register_user).with("better@example.com", "secret", "ssh-key AAbbcc")
115
116
  fake_stdin(["better@example.com", "secret", "secret"]) do
116
- @main.register
117
+ invoke(@main, :register)
117
118
  end
118
119
  end
119
120
 
120
121
  it "should not ask about email if it's provided as argument" do
121
122
  $stdout.should_receive(:puts).with("Registering with email: kate@example.com")
122
123
  fake_stdin(["secret", "secret"]) do
123
- @main.register("kate@example.com")
124
+ invoke(@main, :register, "kate@example.com")
124
125
  end
125
126
  end
126
127
 
@@ -130,7 +131,7 @@ OUT
130
131
  $stdout.should_receive(:puts).with("\e[31mEmail can't be blank, please try again\e[0m")
131
132
  lambda {
132
133
  fake_stdin(["", "bob@example.com", "only-pass", "only-pass"]) do
133
- @main.register
134
+ invoke(@main, :register)
134
135
  end
135
136
  }.should raise_error(SystemExit)
136
137
  end
@@ -142,7 +143,7 @@ OUT
142
143
  File.open(@key_path, "w") { |f| f << "key" }
143
144
  $stdout.should_receive(:puts).with("Uploading your public SSH key from #{@key_path}")
144
145
  fake_stdin(["kate@example.com", "secret", "secret"]) do
145
- @main.register
146
+ invoke(@main, :register)
146
147
  end
147
148
  end
148
149
  end
@@ -153,7 +154,7 @@ OUT
153
154
  FileUtils.rm_rf(@key_path)
154
155
  $stdout.should_not_receive(:puts).with("Uploading your public SSH key from #{@key_path}")
155
156
  fake_stdin(["kate@example.com", "secret", "secret"]) do
156
- @main.register
157
+ invoke(@main, :register)
157
158
  end
158
159
  end
159
160
  end
@@ -164,7 +165,7 @@ OUT
164
165
  $stdout.should_receive(:puts).with("Successfully registered!")
165
166
  $stdout.should_receive(:puts).with("Check you mailbox for email address confirmation")
166
167
  fake_stdin(["kate@example.com", "pass", "pass"]) do
167
- @main.register
168
+ invoke(@main, :register)
168
169
  end
169
170
  end
170
171
  end
@@ -177,7 +178,7 @@ OUT
177
178
  $stdout.should_receive(:puts).with("\e[31mEmail has been already taken\e[0m")
178
179
  lambda {
179
180
  fake_stdin(["kate@example.com", "pass", "pass"]) do
180
- @main.register
181
+ invoke(@main, :register)
181
182
  end
182
183
  }.should raise_error(SystemExit)
183
184
  end
@@ -199,7 +200,7 @@ OUT
199
200
 
200
201
  it "should ask about email and password" do
201
202
  fake_stdin(["megan@example.com", "secret"]) do
202
- @main.login
203
+ invoke(@main, :login)
203
204
  end
204
205
  end
205
206
 
@@ -207,14 +208,14 @@ OUT
207
208
  it "should display message about successful login" do
208
209
  $stdout.should_receive(:puts).with("Login successful")
209
210
  fake_stdin(["megan@example.com", "secret"]) do
210
- @main.login
211
+ invoke(@main, :login)
211
212
  end
212
213
  end
213
214
 
214
215
  it "should accept email as parameter" do
215
216
  $stdout.should_receive(:puts).with("Login successful")
216
217
  fake_stdin(["secret"]) do
217
- @main.login("megan@example.com")
218
+ invoke(@main, :login, "megan@example.com")
218
219
  end
219
220
  end
220
221
 
@@ -222,7 +223,7 @@ OUT
222
223
  @user.should_receive(:upload_ssh_key)
223
224
  $stdout.should_receive(:puts).with("Uploading your public SSH key")
224
225
  fake_stdin(["megan@example.com", "secret"]) do
225
- @main.login
226
+ invoke(@main, :login)
226
227
  end
227
228
  end
228
229
 
@@ -230,7 +231,7 @@ OUT
230
231
  @user.should_receive(:upload_ssh_key).and_raise(RestClient::Conflict)
231
232
  $stdout.should_receive(:puts).with("\e[32mYou have following clouds available:\e[0m")
232
233
  fake_stdin(["megan@example.com", "secret"]) do
233
- @main.login
234
+ invoke(@main, :login)
234
235
  end
235
236
  end
236
237
 
@@ -239,7 +240,7 @@ OUT
239
240
  $stdout.should_receive(:puts).with(/ abc\s+\| running/)
240
241
  $stdout.should_receive(:puts).with(/ fooo\s+\| no code/)
241
242
  fake_stdin(["megan@example.com", "secret"]) do
242
- @main.login
243
+ invoke(@main, :login)
243
244
  end
244
245
  end
245
246
  end
@@ -251,7 +252,7 @@ OUT
251
252
  $stdout.should_receive(:puts).with("\e[31mNo such file or directory - " + @key_path + "\e[0m")
252
253
  $stdout.should_receive(:puts).with("\e[31mUse ssh-keygen to generate ssh key pair\e[0m")
253
254
  lambda {
254
- @main.login
255
+ invoke(@main, :login)
255
256
  }.should raise_error(SystemExit)
256
257
  end
257
258
  end
@@ -266,7 +267,7 @@ OUT
266
267
  $stdout.should_receive(:puts).with("\e[31mhttps://admin.winniecloud.com/users/password/new\e[0m")
267
268
  lambda {
268
269
  fake_stdin(["megan@example.com", "secret"]) do
269
- @main.login
270
+ invoke(@main, :login)
270
271
  end
271
272
  }.should raise_error(SystemExit)
272
273
  end
@@ -285,6 +286,7 @@ OUT
285
286
  @app.stub(:git_url).and_return("git@git.shellycloud.com:foooo.git")
286
287
  Shelly::App.stub(:inside_git_repository?).and_return(true)
287
288
  Shelly::App.stub(:new).and_return(@app)
289
+ @client.stub(:token).and_return("abc")
288
290
  end
289
291
 
290
292
  it "should exit with message if command run outside git repository" do
@@ -292,7 +294,7 @@ OUT
292
294
  $stdout.should_receive(:puts).with("\e[31mMust be run inside your project git repository\e[0m")
293
295
  lambda {
294
296
  fake_stdin(["", ""]) do
295
- @main.add
297
+ invoke(@main, :add)
296
298
  end
297
299
  }.should raise_error(SystemExit)
298
300
  end
@@ -303,33 +305,25 @@ OUT
303
305
  it "should show help and exit if not all options are passed" do
304
306
  $stdout.should_receive(:puts).with("\e[31mTry 'shelly help add' for more information\e[0m")
305
307
  @main.options = {"code-name" => "foo"}
306
- lambda { @main.add }.should raise_error(SystemExit)
308
+ lambda {
309
+ invoke(@main, :add)
310
+ }.should raise_error(SystemExit)
307
311
  end
308
312
 
309
313
  it "should exit if databases are not valid" do
310
314
  $stdout.should_receive(:puts).with("\e[31mTry 'shelly help add' for more information\e[0m")
311
- @main.options = {"code-name" => "foo", "databases" => ["not existing"], "domains" => ["foo.example.com"]}
312
- lambda { @main.add }.should raise_error(SystemExit)
313
- end
314
-
315
- it "should display which parameter was wrong" do
316
- expected = "shelly: unrecognized option '--unknown=param'\n" +
317
- "Usage: shelly [COMMAND]... [OPTIONS]\n" +
318
- "Try 'shelly --help' for more information"
319
-
320
- Open3.popen3("bin/shelly add --unknown=param") do |stdin, stdout, stderr, wait_thr|
321
- out = stderr.read.strip
322
- out.should == expected
323
- end
315
+ @main.options = {"code-name" => "foo", :databases => ["not existing"], :domains => "foo.example.com"}
316
+ lambda {
317
+ invoke(@main, :add)
318
+ }.should raise_error(SystemExit)
324
319
  end
325
-
326
320
  end
327
321
 
328
322
  context "valid params" do
329
323
  it "should create app on shelly cloud" do
330
324
  @app.should_receive(:create)
331
325
  @main.options = {"code-name" => "foo", "databases" => ["postgresql"], "domains" => ["foo.example.com"]}
332
- @main.add
326
+ invoke(@main, :add)
333
327
  end
334
328
  end
335
329
  end
@@ -338,7 +332,7 @@ OUT
338
332
  $stdout.should_receive(:print).with("Cloud code name (foo-production - default): ")
339
333
  @app.should_receive(:code_name=).with("mycodename")
340
334
  fake_stdin(["mycodename", ""]) do
341
- @main.add
335
+ invoke(@main, :add)
342
336
  end
343
337
  end
344
338
 
@@ -347,7 +341,7 @@ OUT
347
341
  $stdout.should_receive(:print).with("Cloud code name (foo-production - default): ")
348
342
  @app.should_receive(:code_name=).with("foo-production")
349
343
  fake_stdin(["", ""]) do
350
- @main.add
344
+ invoke(@main, :add)
351
345
  end
352
346
  end
353
347
  end
@@ -356,7 +350,7 @@ OUT
356
350
  $stdout.should_receive(:print).with("Which database do you want to use postgresql, mongodb, redis, none (postgresql - default): ")
357
351
  @app.should_receive(:databases=).with(["postgresql", "mongodb", "redis"])
358
352
  fake_stdin(["", "postgresql ,mongodb redis"]) do
359
- @main.add
353
+ invoke(@main, :add)
360
354
  end
361
355
  end
362
356
 
@@ -364,7 +358,7 @@ OUT
364
358
  $stdout.should_receive(:print).with("Which database do you want to use postgresql, mongodb, redis, none (postgresql - default): ")
365
359
  $stdout.should_receive(:print).with("Unknown database kind. Supported are: postgresql, mongodb, redis, none: ")
366
360
  fake_stdin(["", "postgresql,doesnt-exist", "none"]) do
367
- @main.add
361
+ invoke(@main, :add)
368
362
  end
369
363
  end
370
364
 
@@ -372,7 +366,7 @@ OUT
372
366
  it "should use 'postgresql' database as default" do
373
367
  @app.should_receive(:databases=).with(["postgresql"])
374
368
  fake_stdin(["", ""]) do
375
- @main.add
369
+ invoke(@main, :add)
376
370
  end
377
371
  end
378
372
  end
@@ -380,7 +374,7 @@ OUT
380
374
  it "should create the app on shelly cloud" do
381
375
  @app.should_receive(:create)
382
376
  fake_stdin(["", ""]) do
383
- @main.add
377
+ invoke(@main, :add)
384
378
  end
385
379
  end
386
380
 
@@ -393,7 +387,7 @@ OUT
393
387
  $stdout.should_receive(:puts).with("\e[31mshelly add --code-name=foo-production --databases=postgresql --domains=foo-production.shellyapp.com\e[0m")
394
388
  lambda {
395
389
  fake_stdin(["", ""]) do
396
- @main.add
390
+ invoke(@main, :add)
397
391
  end
398
392
  }.should raise_error(SystemExit)
399
393
  end
@@ -402,14 +396,14 @@ OUT
402
396
  $stdout.should_receive(:puts).with("\e[32mAdding remote production git@git.shellycloud.com:foooo.git\e[0m")
403
397
  @app.should_receive(:add_git_remote)
404
398
  fake_stdin(["foooo", ""]) do
405
- @main.add
399
+ invoke(@main, :add)
406
400
  end
407
401
  end
408
402
 
409
403
  it "should create Cloudfile" do
410
404
  File.exists?("/projects/foo/Cloudfile").should be_false
411
405
  fake_stdin(["foooo", ""]) do
412
- @main.add
406
+ invoke(@main, :add)
413
407
  end
414
408
  File.read("/projects/foo/Cloudfile").should == "Example Cloudfile"
415
409
  end
@@ -418,7 +412,7 @@ OUT
418
412
  $stdout.should_receive(:puts).with("\e[32mProvide billing details. Opening browser...\e[0m")
419
413
  @app.should_receive(:open_billing_page)
420
414
  fake_stdin(["foooo", ""]) do
421
- @main.add
415
+ invoke(@main, :add)
422
416
  end
423
417
  end
424
418
 
@@ -427,7 +421,7 @@ OUT
427
421
  $stdout.should_receive(:puts).with("\e[32mYou can review changes using\e[0m")
428
422
  $stdout.should_receive(:puts).with(" git status")
429
423
  fake_stdin(["foooo", "none"]) do
430
- @main.add
424
+ invoke(@main, :add)
431
425
  end
432
426
  end
433
427
 
@@ -439,7 +433,7 @@ OUT
439
433
  $stdout.should_receive(:puts).with("\e[32mDeploy to production using:\e[0m")
440
434
  $stdout.should_receive(:puts).with(" git push production master")
441
435
  fake_stdin(["foooo", "none"]) do
442
- @main.add
436
+ invoke(@main, :add)
443
437
  end
444
438
  end
445
439
  end
@@ -457,19 +451,19 @@ OUT
457
451
  $stdout.should_receive(:puts).with("\e[32mYou have following clouds available:\e[0m")
458
452
  $stdout.should_receive(:puts).with(/abc\s+\| running/)
459
453
  $stdout.should_receive(:puts).with(/fooo\s+\| deploy failed \(Support has been notified\)/)
460
- @main.list
454
+ invoke(@main, :list)
461
455
  end
462
456
 
463
457
  it "should display info that user has no clouds" do
464
458
  @client.stub(:apps).and_return([])
465
459
  $stdout.should_receive(:puts).with("\e[32mYou have no clouds yet\e[0m")
466
- @main.list
460
+ invoke(@main, :list)
467
461
  end
468
462
 
469
463
  it "should have a 'status' alias" do
470
464
  @client.stub(:apps).and_return([])
471
465
  $stdout.should_receive(:puts).with("\e[32mYou have no clouds yet\e[0m")
472
- Shelly::CLI::Main.start(["status"])
466
+ invoke(@main, :status)
473
467
  end
474
468
 
475
469
  context "on failure" do
@@ -477,9 +471,10 @@ OUT
477
471
  body = {"message" => "Unauthorized"}
478
472
  error = Shelly::Client::APIError.new(body.to_json, 401)
479
473
  @client.stub(:token).and_raise(error)
480
- $stdout.should_receive(:puts).with("\e[31mYou are not logged in, use `shelly login`\e[0m")
474
+ $stdout.should_receive(:puts).with(red "You are not logged in. To log in use:")
475
+ $stdout.should_receive(:puts).with(" shelly login")
481
476
  lambda {
482
- @main.list
477
+ invoke(@main, :list)
483
478
  }.should raise_error(SystemExit)
484
479
  end
485
480
  end
@@ -502,7 +497,7 @@ OUT
502
497
  File.delete("Cloudfile")
503
498
  $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
504
499
  lambda {
505
- @main.start
500
+ invoke(@main, :start)
506
501
  }.should raise_error(SystemExit)
507
502
  end
508
503
 
@@ -511,7 +506,7 @@ OUT
511
506
  exception = Shelly::Client::APIError.new(response.to_json, 404)
512
507
  @client.stub(:start_cloud).and_raise(exception)
513
508
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-production' cloud defined in Cloudfile")
514
- lambda { @main.start }.should raise_error(SystemExit)
509
+ lambda { invoke(@main, :start) }.should raise_error(SystemExit)
515
510
  end
516
511
 
517
512
  it "should exit if user is not logged in" do
@@ -520,7 +515,7 @@ OUT
520
515
  @client.stub(:token).and_raise(exception)
521
516
  $stdout.should_receive(:puts).with(red "You are not logged in. To log in use:")
522
517
  $stdout.should_receive(:puts).with(" shelly login")
523
- lambda { @main.start }.should raise_error(SystemExit)
518
+ lambda { invoke(@main, :start) }.should raise_error(SystemExit)
524
519
  end
525
520
 
526
521
  context "single cloud in Cloudfile" do
@@ -528,7 +523,7 @@ OUT
528
523
  @client.stub(:start_cloud)
529
524
  $stdout.should_receive(:puts).with(green "Starting cloud foo-production. Check status with:")
530
525
  $stdout.should_receive(:puts).with(" shelly list")
531
- @main.start
526
+ invoke(@main, :start)
532
527
  end
533
528
  end
534
529
 
@@ -543,7 +538,7 @@ OUT
543
538
  $stdout.should_receive(:puts).with("Available clouds:")
544
539
  $stdout.should_receive(:puts).with(" * foo-production")
545
540
  $stdout.should_receive(:puts).with(" * foo-staging")
546
- lambda { @main.start }.should raise_error(SystemExit)
541
+ lambda { invoke(@main, :start) }.should raise_error(SystemExit)
547
542
  end
548
543
 
549
544
  it "should fetch from command line which cloud to start" do
@@ -551,7 +546,7 @@ OUT
551
546
  $stdout.should_receive(:puts).with(green "Starting cloud foo-staging. Check status with:")
552
547
  $stdout.should_receive(:puts).with(" shelly list")
553
548
  @main.options = {:cloud => "foo-staging"}
554
- @main.start
549
+ invoke(@main, :start)
555
550
  end
556
551
  end
557
552
 
@@ -559,14 +554,14 @@ OUT
559
554
  it "should show information that cloud is running" do
560
555
  raise_conflict(:state => "running")
561
556
  $stdout.should_receive(:puts).with(red "Not starting: cloud 'foo-production' is already running")
562
- lambda { @main.start }.should raise_error(SystemExit)
557
+ lambda { invoke(@main, :start) }.should raise_error(SystemExit)
563
558
  end
564
559
 
565
560
  %w{deploying configuring}.each do |state|
566
561
  it "should show information that cloud is #{state}" do
567
562
  raise_conflict(:state => state)
568
563
  $stdout.should_receive(:puts).with(red "Not starting: cloud 'foo-production' is currently deploying")
569
- lambda { @main.start }.should raise_error(SystemExit)
564
+ lambda { invoke(@main, :start) }.should raise_error(SystemExit)
570
565
  end
571
566
  end
572
567
 
@@ -575,7 +570,7 @@ OUT
575
570
  $stdout.should_receive(:puts).with(red "Not starting: no source code provided")
576
571
  $stdout.should_receive(:puts).with(red "Push source code using:")
577
572
  $stdout.should_receive(:puts).with(" git push production master")
578
- lambda { @main.start }.should raise_error(SystemExit)
573
+ lambda { invoke(@main, :start) }.should raise_error(SystemExit)
579
574
  end
580
575
 
581
576
  %w{deploy_failed configuration_failed}.each do |state|
@@ -584,14 +579,14 @@ OUT
584
579
  $stdout.should_receive(:puts).with(red "Not starting: deployment failed")
585
580
  $stdout.should_receive(:puts).with(red "Support has been notified")
586
581
  $stdout.should_receive(:puts).with(red "See http://example.com/logs for reasons of failure")
587
- lambda { @main.start }.should raise_error(SystemExit)
582
+ lambda { invoke(@main, :start) }.should raise_error(SystemExit)
588
583
  end
589
584
  end
590
585
  it "should open billing page" do
591
586
  raise_conflict(:state => "no_billing")
592
587
  $stdout.should_receive(:puts).with(red "Please fill in billing details to start foo-production. Opening browser.")
593
588
  @app.should_receive(:open_billing_page)
594
- lambda { @main.start }.should raise_error(SystemExit)
589
+ lambda { invoke(@main, :start) }.should raise_error(SystemExit)
595
590
  end
596
591
 
597
592
  def raise_conflict(options = {})
@@ -620,7 +615,7 @@ OUT
620
615
  File.delete("Cloudfile")
621
616
  $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
622
617
  lambda {
623
- @main.stop
618
+ invoke(@main, :stop)
624
619
  }.should raise_error(SystemExit)
625
620
  end
626
621
 
@@ -629,7 +624,7 @@ OUT
629
624
  exception = Shelly::Client::APIError.new(response.to_json, 404)
630
625
  @client.stub(:stop_cloud).and_raise(exception)
631
626
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-production' cloud defined in Cloudfile")
632
- lambda { @main.stop }.should raise_error(SystemExit)
627
+ lambda { invoke(@main, :stop) }.should raise_error(SystemExit)
633
628
  end
634
629
 
635
630
  it "should exit if user is not logged in" do
@@ -638,14 +633,14 @@ OUT
638
633
  @client.stub(:token).and_raise(exception)
639
634
  $stdout.should_receive(:puts).with(red "You are not logged in. To log in use:")
640
635
  $stdout.should_receive(:puts).with(" shelly login")
641
- lambda { @main.stop }.should raise_error(SystemExit)
636
+ lambda { invoke(@main, :stop) }.should raise_error(SystemExit)
642
637
  end
643
638
 
644
639
  context "single cloud in Cloudfile" do
645
640
  it "should start the cloud" do
646
641
  @client.stub(:stop_cloud)
647
642
  $stdout.should_receive(:puts).with("Cloud 'foo-production' stopped")
648
- @main.stop
643
+ invoke(@main, :stop)
649
644
  end
650
645
  end
651
646
 
@@ -660,14 +655,14 @@ OUT
660
655
  $stdout.should_receive(:puts).with("Available clouds:")
661
656
  $stdout.should_receive(:puts).with(" * foo-production")
662
657
  $stdout.should_receive(:puts).with(" * foo-staging")
663
- lambda { @main.stop }.should raise_error(SystemExit)
658
+ lambda { invoke(@main, :stop) }.should raise_error(SystemExit)
664
659
  end
665
660
 
666
661
  it "should fetch from command line which cloud to start" do
667
662
  @client.should_receive(:stop_cloud).with("foo-staging")
668
663
  $stdout.should_receive(:puts).with("Cloud 'foo-staging' stopped")
669
664
  @main.options = {:cloud => "foo-staging"}
670
- @main.stop
665
+ invoke(@main, :stop)
671
666
  end
672
667
  end
673
668
  end
@@ -678,29 +673,21 @@ OUT
678
673
  Shelly::App.stub(:inside_git_repository?).and_return(true)
679
674
  end
680
675
 
681
- it "should exit with message if command run outside git repository" do
682
- Shelly::App.stub(:inside_git_repository?).and_return(false)
683
- $stdout.should_receive(:puts).with("\e[31mMust be run inside your project git repository\e[0m")
684
- lambda {
685
- @main.ip
686
- }.should raise_error(SystemExit)
687
- end
688
-
689
676
  it "should exit with message if there is no Cloudfile" do
690
677
  File.delete("Cloudfile")
691
678
  $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
692
679
  lambda {
693
- @main.ip
680
+ invoke(@main, :ip)
694
681
  }.should raise_error(SystemExit)
695
682
  end
696
683
 
697
684
  context "on success" do
698
685
  it "should display mail and web server ip's" do
699
- @client.stub(:app_ips).and_return(response)
686
+ @client.stub(:app).and_return(response)
700
687
  $stdout.should_receive(:puts).with("\e[32mCloud foo-production:\e[0m")
701
688
  $stdout.should_receive(:puts).with(" Web server IP: 22.22.22.22")
702
689
  $stdout.should_receive(:puts).with(" Mail server IP: 11.11.11.11")
703
- @main.ip
690
+ invoke(@main, :ip)
704
691
  end
705
692
  end
706
693
 
@@ -709,18 +696,12 @@ OUT
709
696
  end
710
697
 
711
698
  context "on failure" do
712
- it "should raise an error if user is not in git repository" do
713
- Shelly::App.stub(:inside_git_repository?).and_return(false)
714
- $stdout.should_receive(:puts).with("\e[31mMust be run inside your project git repository\e[0m")
715
- lambda { @main.ip }.should raise_error(SystemExit)
716
- end
717
-
718
699
  it "should raise an error if user does not have access to cloud" do
719
700
  response = {"message" => "Cloud foo-staging not found"}
720
701
  exception = Shelly::Client::APIError.new(response.to_json, 404)
721
- @client.stub(:app_ips).and_raise(exception)
702
+ @client.stub(:app).and_raise(exception)
722
703
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
723
- @main.ip
704
+ invoke(@main, :ip)
724
705
  end
725
706
  end
726
707
  end
@@ -753,9 +734,9 @@ OUT
753
734
  $stdout.should_receive(:puts).with("\n")
754
735
  $stdout.should_receive(:puts).with("Scheduling application delete - done")
755
736
  $stdout.should_receive(:puts).with("Removing git remote - done")
737
+ @main.options = {:cloud => "foo-staging"}
756
738
  fake_stdin(["yes", "yes", "yes"]) do
757
- @main.options = {:cloud => "foo-staging"}
758
- @main.delete
739
+ invoke(@main, :delete)
759
740
  end
760
741
  end
761
742
 
@@ -763,8 +744,7 @@ OUT
763
744
  @app.should_not_receive(:delete)
764
745
  lambda{
765
746
  fake_stdin(["yes", "yes", "no"]) do
766
- @main.options = {:cloud => "foo-staging"}
767
- @main.delete
747
+ invoke(@main, :delete, "--cloud", "foo-staging")
768
748
  end
769
749
  }.should raise_error(SystemExit)
770
750
  end
@@ -780,8 +760,7 @@ OUT
780
760
  Shelly::App.stub(:inside_git_repository?).and_return(false)
781
761
  $stdout.should_receive(:puts).with("Missing git remote")
782
762
  fake_stdin(["yes", "yes", "yes"]) do
783
- @main.options = {:cloud => "foo-staging"}
784
- @main.delete
763
+ invoke(@main, :delete, "--cloud", "foo-staging")
785
764
  end
786
765
  end
787
766
  end
@@ -799,8 +778,7 @@ OUT
799
778
  $stdout.should_receive(:puts).with("\e[31mApplication not found\e[0m")
800
779
  lambda{
801
780
  fake_stdin(["yes", "yes", "yes"]) do
802
- @main.options = {:cloud => "foo-bar"}
803
- @main.delete
781
+ invoke(@main, :delete, "--cloud", "foo-bar")
804
782
  end
805
783
  }.should raise_error(SystemExit)
806
784
  end
@@ -824,7 +802,7 @@ OUT
824
802
  $stdout.should_receive(:puts).with("Scheduling application delete - done")
825
803
  $stdout.should_receive(:puts).with("Removing git remote - done")
826
804
  fake_stdin(["yes", "yes", "yes"]) do
827
- @main.delete
805
+ invoke(@main, :delete)
828
806
  end
829
807
  end
830
808
  end
@@ -848,7 +826,7 @@ OUT
848
826
  File.delete("Cloudfile")
849
827
  $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
850
828
  lambda {
851
- @main.logs
829
+ invoke(@main, :logs)
852
830
  }.should raise_error(SystemExit)
853
831
  end
854
832
 
@@ -858,7 +836,7 @@ OUT
858
836
  @client.stub(:application_logs).and_raise(exception)
859
837
  $stdout.should_receive(:puts).
860
838
  with(red "You have no access to cloud 'foo-production'")
861
- lambda { @main.logs }.should raise_error(SystemExit)
839
+ lambda { invoke(@main, :logs) }.should raise_error(SystemExit)
862
840
  end
863
841
 
864
842
  it "should exit if user is not logged in" do
@@ -868,7 +846,7 @@ OUT
868
846
  $stdout.should_receive(:puts).
869
847
  with(red "You are not logged in. To log in use:")
870
848
  $stdout.should_receive(:puts).with(" shelly login")
871
- lambda { @main.logs }.should raise_error(SystemExit)
849
+ lambda { invoke(@main, :logs) }.should raise_error(SystemExit)
872
850
  end
873
851
 
874
852
  context "single cloud in Cloudfile" do
@@ -877,7 +855,7 @@ OUT
877
855
  $stdout.should_receive(:puts).with(green "Cloud foo-production:")
878
856
  $stdout.should_receive(:puts).with(green "Instance 1:")
879
857
  $stdout.should_receive(:puts).with("log1")
880
- @main.logs
858
+ invoke(@main, :logs)
881
859
  end
882
860
  end
883
861
 
@@ -894,7 +872,7 @@ OUT
894
872
  $stdout.should_receive(:puts).with("Available clouds:")
895
873
  $stdout.should_receive(:puts).with(" * foo-production")
896
874
  $stdout.should_receive(:puts).with(" * foo-staging")
897
- lambda { @main.logs }.should raise_error(SystemExit)
875
+ lambda { invoke(@main, :logs) }.should raise_error(SystemExit)
898
876
  end
899
877
 
900
878
  it "should fetch from command line which cloud to start" do
@@ -904,7 +882,7 @@ OUT
904
882
  $stdout.should_receive(:puts).with(green "Instance 1:")
905
883
  $stdout.should_receive(:puts).with("log1")
906
884
  @main.options = {:cloud => "foo-staging"}
907
- @main.logs
885
+ invoke(@main, :logs)
908
886
  end
909
887
  end
910
888
 
@@ -916,7 +894,7 @@ OUT
916
894
  $stdout.should_receive(:puts).with("log1")
917
895
  $stdout.should_receive(:puts).with(green "Instance 2:")
918
896
  $stdout.should_receive(:puts).with("log2")
919
- @main.logs
897
+ invoke(@main, :logs)
920
898
  end
921
899
  end
922
900
  end