startapp 0.1.6

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 (156) hide show
  1. checksums.yaml +7 -0
  2. data/COPYRIGHT +1 -0
  3. data/LICENSE +11 -0
  4. data/README.md +95 -0
  5. data/Rakefile +6 -0
  6. data/autocomplete/rhc_bash +1672 -0
  7. data/bin/app +37 -0
  8. data/conf/express.conf +8 -0
  9. data/features/assets/deploy.tar.gz +0 -0
  10. data/features/core_feature.rb +191 -0
  11. data/features/deployments_feature.rb +129 -0
  12. data/features/domains_feature.rb +58 -0
  13. data/features/keys_feature.rb +37 -0
  14. data/features/members_feature.rb +166 -0
  15. data/lib/rhc/auth/basic.rb +64 -0
  16. data/lib/rhc/auth/token.rb +102 -0
  17. data/lib/rhc/auth/token_store.rb +53 -0
  18. data/lib/rhc/auth.rb +5 -0
  19. data/lib/rhc/autocomplete.rb +66 -0
  20. data/lib/rhc/autocomplete_templates/bash.erb +39 -0
  21. data/lib/rhc/cartridge_helpers.rb +118 -0
  22. data/lib/rhc/cli.rb +40 -0
  23. data/lib/rhc/command_runner.rb +185 -0
  24. data/lib/rhc/commands/account.rb +25 -0
  25. data/lib/rhc/commands/alias.rb +124 -0
  26. data/lib/rhc/commands/app.rb +726 -0
  27. data/lib/rhc/commands/apps.rb +20 -0
  28. data/lib/rhc/commands/authorization.rb +115 -0
  29. data/lib/rhc/commands/base.rb +174 -0
  30. data/lib/rhc/commands/cartridge.rb +329 -0
  31. data/lib/rhc/commands/clone.rb +66 -0
  32. data/lib/rhc/commands/configure.rb +20 -0
  33. data/lib/rhc/commands/create.rb +100 -0
  34. data/lib/rhc/commands/delete.rb +19 -0
  35. data/lib/rhc/commands/deploy.rb +32 -0
  36. data/lib/rhc/commands/deployment.rb +82 -0
  37. data/lib/rhc/commands/domain.rb +172 -0
  38. data/lib/rhc/commands/env.rb +142 -0
  39. data/lib/rhc/commands/force_stop.rb +17 -0
  40. data/lib/rhc/commands/git_clone.rb +34 -0
  41. data/lib/rhc/commands/logout.rb +51 -0
  42. data/lib/rhc/commands/logs.rb +21 -0
  43. data/lib/rhc/commands/member.rb +148 -0
  44. data/lib/rhc/commands/port_forward.rb +197 -0
  45. data/lib/rhc/commands/reload.rb +17 -0
  46. data/lib/rhc/commands/restart.rb +17 -0
  47. data/lib/rhc/commands/scp.rb +54 -0
  48. data/lib/rhc/commands/server.rb +40 -0
  49. data/lib/rhc/commands/setup.rb +60 -0
  50. data/lib/rhc/commands/show.rb +43 -0
  51. data/lib/rhc/commands/snapshot.rb +137 -0
  52. data/lib/rhc/commands/ssh.rb +51 -0
  53. data/lib/rhc/commands/sshkey.rb +97 -0
  54. data/lib/rhc/commands/start.rb +17 -0
  55. data/lib/rhc/commands/stop.rb +17 -0
  56. data/lib/rhc/commands/tail.rb +47 -0
  57. data/lib/rhc/commands/threaddump.rb +14 -0
  58. data/lib/rhc/commands/tidy.rb +17 -0
  59. data/lib/rhc/commands.rb +396 -0
  60. data/lib/rhc/config.rb +321 -0
  61. data/lib/rhc/context_helper.rb +121 -0
  62. data/lib/rhc/core_ext.rb +202 -0
  63. data/lib/rhc/coverage_helper.rb +33 -0
  64. data/lib/rhc/deployment_helpers.rb +111 -0
  65. data/lib/rhc/exceptions.rb +256 -0
  66. data/lib/rhc/git_helpers.rb +106 -0
  67. data/lib/rhc/help_formatter.rb +55 -0
  68. data/lib/rhc/helpers.rb +481 -0
  69. data/lib/rhc/highline_extensions.rb +479 -0
  70. data/lib/rhc/json.rb +51 -0
  71. data/lib/rhc/output_helpers.rb +260 -0
  72. data/lib/rhc/rest/activation.rb +11 -0
  73. data/lib/rhc/rest/alias.rb +42 -0
  74. data/lib/rhc/rest/api.rb +87 -0
  75. data/lib/rhc/rest/application.rb +348 -0
  76. data/lib/rhc/rest/attributes.rb +36 -0
  77. data/lib/rhc/rest/authorization.rb +8 -0
  78. data/lib/rhc/rest/base.rb +79 -0
  79. data/lib/rhc/rest/cartridge.rb +162 -0
  80. data/lib/rhc/rest/client.rb +650 -0
  81. data/lib/rhc/rest/deployment.rb +18 -0
  82. data/lib/rhc/rest/domain.rb +98 -0
  83. data/lib/rhc/rest/environment_variable.rb +15 -0
  84. data/lib/rhc/rest/gear_group.rb +16 -0
  85. data/lib/rhc/rest/httpclient.rb +145 -0
  86. data/lib/rhc/rest/key.rb +44 -0
  87. data/lib/rhc/rest/membership.rb +105 -0
  88. data/lib/rhc/rest/mock.rb +1042 -0
  89. data/lib/rhc/rest/user.rb +32 -0
  90. data/lib/rhc/rest.rb +148 -0
  91. data/lib/rhc/scp_helpers.rb +27 -0
  92. data/lib/rhc/ssh_helpers.rb +380 -0
  93. data/lib/rhc/tar_gz.rb +51 -0
  94. data/lib/rhc/usage_templates/command_help.erb +51 -0
  95. data/lib/rhc/usage_templates/command_syntax_help.erb +11 -0
  96. data/lib/rhc/usage_templates/help.erb +61 -0
  97. data/lib/rhc/usage_templates/missing_help.erb +1 -0
  98. data/lib/rhc/usage_templates/options_help.erb +12 -0
  99. data/lib/rhc/vendor/okjson.rb +600 -0
  100. data/lib/rhc/vendor/parseconfig.rb +178 -0
  101. data/lib/rhc/vendor/sshkey.rb +253 -0
  102. data/lib/rhc/vendor/zliby.rb +628 -0
  103. data/lib/rhc/version.rb +5 -0
  104. data/lib/rhc/wizard.rb +637 -0
  105. data/lib/rhc.rb +34 -0
  106. data/spec/coverage_helper.rb +82 -0
  107. data/spec/direct_execution_helper.rb +339 -0
  108. data/spec/keys/example.pem +23 -0
  109. data/spec/keys/example_private.pem +27 -0
  110. data/spec/keys/server.pem +19 -0
  111. data/spec/rest_spec_helper.rb +31 -0
  112. data/spec/rhc/assets/cert.crt +22 -0
  113. data/spec/rhc/assets/cert_key_rsa +27 -0
  114. data/spec/rhc/assets/empty.txt +0 -0
  115. data/spec/rhc/assets/env_vars.txt +7 -0
  116. data/spec/rhc/assets/env_vars_2.txt +1 -0
  117. data/spec/rhc/assets/foo.txt +1 -0
  118. data/spec/rhc/assets/targz_corrupted.tar.gz +1 -0
  119. data/spec/rhc/assets/targz_sample.tar.gz +0 -0
  120. data/spec/rhc/auth_spec.rb +442 -0
  121. data/spec/rhc/cli_spec.rb +186 -0
  122. data/spec/rhc/command_spec.rb +435 -0
  123. data/spec/rhc/commands/account_spec.rb +42 -0
  124. data/spec/rhc/commands/alias_spec.rb +333 -0
  125. data/spec/rhc/commands/app_spec.rb +777 -0
  126. data/spec/rhc/commands/apps_spec.rb +39 -0
  127. data/spec/rhc/commands/authorization_spec.rb +157 -0
  128. data/spec/rhc/commands/cartridge_spec.rb +665 -0
  129. data/spec/rhc/commands/clone_spec.rb +41 -0
  130. data/spec/rhc/commands/deployment_spec.rb +327 -0
  131. data/spec/rhc/commands/domain_spec.rb +401 -0
  132. data/spec/rhc/commands/env_spec.rb +493 -0
  133. data/spec/rhc/commands/git_clone_spec.rb +102 -0
  134. data/spec/rhc/commands/logout_spec.rb +86 -0
  135. data/spec/rhc/commands/member_spec.rb +247 -0
  136. data/spec/rhc/commands/port_forward_spec.rb +217 -0
  137. data/spec/rhc/commands/scp_spec.rb +77 -0
  138. data/spec/rhc/commands/server_spec.rb +69 -0
  139. data/spec/rhc/commands/setup_spec.rb +118 -0
  140. data/spec/rhc/commands/snapshot_spec.rb +179 -0
  141. data/spec/rhc/commands/ssh_spec.rb +163 -0
  142. data/spec/rhc/commands/sshkey_spec.rb +188 -0
  143. data/spec/rhc/commands/tail_spec.rb +81 -0
  144. data/spec/rhc/commands/threaddump_spec.rb +84 -0
  145. data/spec/rhc/config_spec.rb +407 -0
  146. data/spec/rhc/helpers_spec.rb +531 -0
  147. data/spec/rhc/highline_extensions_spec.rb +314 -0
  148. data/spec/rhc/json_spec.rb +30 -0
  149. data/spec/rhc/rest_application_spec.rb +258 -0
  150. data/spec/rhc/rest_client_spec.rb +752 -0
  151. data/spec/rhc/rest_spec.rb +740 -0
  152. data/spec/rhc/targz_spec.rb +55 -0
  153. data/spec/rhc/wizard_spec.rb +756 -0
  154. data/spec/spec_helper.rb +575 -0
  155. data/spec/wizard_spec_helper.rb +330 -0
  156. metadata +469 -0
@@ -0,0 +1,333 @@
1
+ require 'spec_helper'
2
+ require 'rest_spec_helper'
3
+ require 'rhc/commands/alias'
4
+ require 'rhc/config'
5
+
6
+ describe RHC::Commands::Alias do
7
+ let(:client_links) { mock_response_links(mock_client_links) }
8
+ let(:domain_0_links) { mock_response_links(mock_domain_links('mock_domain_0')) }
9
+ let(:domain_1_links) { mock_response_links(mock_domain_links('mock_domain_1')) }
10
+ let(:app_0_links) { mock_response_links(mock_app_links('mock_domain_0', 'mock_app_0')) }
11
+ let(:alias_0_links) { mock_response_links(mock_alias_links('mock_domain_0', 'mock_app_0', 'www.foo.bar')) }
12
+ let!(:rest_client){ MockRestClient.new }
13
+ before(:each) do
14
+ user_config
15
+ domain = rest_client.add_domain("mock_domain_0")
16
+ domain.add_application("mock_app_0", "ruby-1.8.7").add_alias("www.foo.bar")
17
+ domain.add_application("mock_app_1", "ruby-1.8.7")
18
+ stub_api_request(:any, client_links['LIST_DOMAINS']['relative']).
19
+ to_return({ :body => {
20
+ :type => 'domains',
21
+ :data =>
22
+ [{ :id => 'mock_domain_0',
23
+ :links => mock_response_links(mock_domain_links('mock_domain_0')),
24
+ },
25
+ { :id => 'mock_domain_1',
26
+ :links => mock_response_links(mock_domain_links('mock_domain_1')),
27
+ }]
28
+ }.to_json,
29
+ :status => 200
30
+ })
31
+ stub_api_request(:any, domain_0_links['LIST_APPLICATIONS']['relative']).
32
+ to_return({ :body => {
33
+ :type => 'applications',
34
+ :data =>
35
+ [{ :domain_id => 'mock_domain_0',
36
+ :name => 'mock_app_0',
37
+ :creation_time => Time.new.to_s,
38
+ :uuid => 1234,
39
+ :aliases => ['alias_1', 'alias_2'],
40
+ :server_identity => 'mock_server_identity',
41
+ :links => mock_response_links(mock_app_links('mock_domain_0','mock_app_0')),
42
+ }]
43
+ }.to_json,
44
+ :status => 200
45
+ })
46
+ stub_api_request(:any, app_0_links['ADD_ALIAS']['relative'], false).
47
+ with(:body => {:event => 'add-alias', :alias => 'www.foo.bar'}).
48
+ to_return({ :body => {
49
+ :type => 'application',
50
+ :data =>
51
+ { :domain_id => 'mock_domain_1',
52
+ :name => 'mock_app_0',
53
+ :creation_time => Time.new.to_s,
54
+ :uuid => 1234,
55
+ :aliases => ['alias_1', 'alias_2'],
56
+ :server_identity => 'mock_server_identity',
57
+ :links => mock_response_links(mock_app_links('mock_domain_1','mock_app_0')),
58
+ },
59
+ :messages => [{:text => "RESULT:\nApplication event 'add-alias' successful"}]
60
+ }.to_json,
61
+ :status => 200
62
+ })
63
+ stub_api_request(:any, app_0_links['REMOVE_ALIAS']['relative'], false).
64
+ with(:body => {:event => 'remove-alias', :alias => 'www.foo.bar'}).
65
+ to_return({ :body => {
66
+ :type => 'application',
67
+ :data =>
68
+ { :domain_id => 'mock_domain_1',
69
+ :name => 'mock_app_0',
70
+ :creation_time => Time.new.to_s,
71
+ :uuid => 1234,
72
+ :aliases => ['alias_1', 'alias_2'],
73
+ :server_identity => 'mock_server_identity',
74
+ :links => mock_response_links(mock_app_links('mock_domain_1','mock_app_0')),
75
+ },
76
+ :messages => [{:text => "RESULT:\nApplication event 'remove-alias' successful"}]
77
+ }.to_json,
78
+ :status => 200
79
+ })
80
+ stub_api_request(:any, app_0_links['LIST_ALIASES']['relative'], false).
81
+ to_return({ :body => {
82
+ :type => 'aliases',
83
+ :data =>
84
+ [{ :domain_id => 'mock_domain_0',
85
+ :application_id => 'mock_app_0',
86
+ :id => 'www.foo.bar',
87
+ :certificate_added_at => nil,
88
+ :has_private_ssl_certificate => false,
89
+ :links => mock_response_links(mock_alias_links('mock_domain_0','mock_app_0', 'www.foo.bar')),
90
+ }]
91
+ }.to_json,
92
+ :status => 200
93
+ })
94
+
95
+ end
96
+
97
+ describe 'alias help' do
98
+ let(:arguments) { ['alias', '--help'] }
99
+
100
+ context 'help is run' do
101
+ it "should display help" do
102
+ expect { run }.to exit_with_code(0)
103
+ end
104
+ it('should output usage') { run_output.should match("Usage: app alias <action>$") }
105
+ end
106
+ end
107
+
108
+ describe 'alias add --help' do
109
+ let(:arguments) { ['alias', 'add', '--help'] }
110
+
111
+ context 'help is run' do
112
+ it "should display help" do
113
+ expect { run }.to exit_with_code(0)
114
+ end
115
+ it('should output usage') { run_output.should match("Usage: app alias-add <application> <alias> [--namespace NAME]") }
116
+ end
117
+ end
118
+
119
+ describe 'alias remove --help' do
120
+ let(:arguments) { ['alias', 'remove', '--help'] }
121
+
122
+ context 'help is run' do
123
+ it "should display help" do
124
+ expect { run }.to exit_with_code(0)
125
+ end
126
+ it('should output usage') { run_output.should match("Usage: app alias-remove <application> <alias> [--namespace NAME]") }
127
+ end
128
+ end
129
+
130
+ describe 'alias update-cert --help' do
131
+ let(:arguments) { ['alias', 'update-cert', '--help'] }
132
+
133
+ context 'help is run' do
134
+ it "should display help" do
135
+ expect { run }.to exit_with_code(0)
136
+ end
137
+ it('should output usage') { run_output.should match("Usage: app alias-update-cert <application> <alias> --certificate FILE --private-key FILE [--passphrase passphrase]") }
138
+ end
139
+ end
140
+
141
+ describe 'alias delete-cert --help' do
142
+ let(:arguments) { ['alias', 'delete-cert', '--help'] }
143
+
144
+ context 'help is run' do
145
+ it "should display help" do
146
+ expect { run }.to exit_with_code(0)
147
+ end
148
+ it('should output usage') { run_output.should match("Usage: app alias-delete-cert <application> <alias>") }
149
+ end
150
+ end
151
+
152
+ describe 'alias list --help' do
153
+ let(:arguments) { ['alias', 'list', '--help'] }
154
+
155
+ context 'help is run' do
156
+ it "should display help" do
157
+ expect { run }.to exit_with_code(0)
158
+ end
159
+ it('should output usage') { run_output.should match("Usage: app alias-list <application>") }
160
+ end
161
+ end
162
+
163
+ describe 'add alias' do
164
+ let(:arguments) { ['alias', 'add', 'mock_app_0', 'www.foo.bar' ] }
165
+ it { expect { run }.to exit_with_code(0) }
166
+ it { run_output.should =~ /Alias 'www.foo.bar' has been added/m }
167
+ end
168
+
169
+ describe 'add alias with implicit context' do
170
+ before{ subject.class.any_instance.stub(:git_config_get){ |key| case key; when 'rhc.app-name' then 'mock_app_0'; when 'rhc.domain-name' then 'mock_domain_0'; end } }
171
+ let(:arguments) { ['alias', 'add', '--', 'www.foo.bar' ] }
172
+ it { expect { run }.to exit_with_code(0) }
173
+ it { run_output.should =~ /Alias 'www.foo.bar' has been added/m }
174
+ end
175
+
176
+ describe 'remove alias' do
177
+ before do
178
+ rest_client.stub(:api_version_negotiated).and_return(1.4)
179
+ end
180
+ context 'remove alias successfully' do
181
+ let(:arguments) { ['alias', 'remove', 'mock_app_0', 'www.foo.bar' ] }
182
+ it { expect { run }.to exit_with_code(0) }
183
+ it { run_output.should =~ /Alias 'www.foo.bar' has been removed/m }
184
+ end
185
+ context 'remove alias with server api <= 1.3' do
186
+ let(:arguments) { ['alias', 'remove', 'mock_app_0', 'www.foo.bar' ] }
187
+ before do
188
+ rest_client.stub(:api_version_negotiated).and_return(1.3)
189
+ end
190
+ it { expect { run }.to exit_with_code(0) }
191
+ it { run_output.should =~ /Alias 'www.foo.bar' has been removed/m }
192
+ end
193
+ end
194
+
195
+ describe 'alias update-cert' do
196
+ before do
197
+ rest_client.stub(:api_version_negotiated).and_return(1.4)
198
+ end
199
+ context 'add valid certificate with valid private key without pass phrase' do
200
+ let(:arguments) { ['alias', 'update-cert', 'mock_app_0', 'www.foo.bar',
201
+ '--certificate', File.expand_path('../../assets/cert.crt', __FILE__),
202
+ '--private-key', File.expand_path('../../assets/cert_key_rsa', __FILE__) ] }
203
+ it { expect { run }.to exit_with_code(0) }
204
+ it { run_output.should =~ /SSL certificate successfully added/m }
205
+ end
206
+ context 'cert file not found' do
207
+ let(:arguments) { ['alias', 'update-cert', 'mock_app_0', 'www.foo.bar',
208
+ '--certificate', File.expand_path('../../assets/nothing.foo', __FILE__),
209
+ '--private-key', File.expand_path('../../assets/cert_key_rsa', __FILE__) ] }
210
+ it { expect { run }.to exit_with_code(1) }
211
+ it { run_output.should =~ /Certificate file not found/m }
212
+ end
213
+ context 'private key file not found' do
214
+ let(:arguments) { ['alias', 'update-cert', 'mock_app_0', 'www.foo.bar',
215
+ '--certificate', File.expand_path('../../assets/cert.crt', __FILE__),
216
+ '--private-key', File.expand_path('../../assets/nothing.foo', __FILE__) ] }
217
+ it { expect { run }.to exit_with_code(1) }
218
+ it { run_output.should =~ /Private key file not found/m }
219
+ end
220
+ context 'not existing certificate alias' do
221
+ let(:arguments) { ['alias', 'update-cert', 'mock_app_0', 'www.unicorns.com',
222
+ '--certificate', File.expand_path('../../assets/cert.crt', __FILE__),
223
+ '--private-key', File.expand_path('../../assets/cert_key_rsa', __FILE__) ] }
224
+ it { expect { run }.to exit_with_code(156) }
225
+ it { run_output.should =~ /Alias www.unicorns.com can't be found in application/m }
226
+ end
227
+ context 'fails if server does not support' do
228
+ let(:arguments) { ['alias', 'update-cert', 'mock_app_0', 'www.foo.bar',
229
+ '--certificate', File.expand_path('../../assets/cert.crt', __FILE__),
230
+ '--private-key', File.expand_path('../../assets/cert_key_rsa', __FILE__) ] }
231
+ before do
232
+ rest_client.stub(:api_version_negotiated).and_return(1.3)
233
+ end
234
+ it { expect { run }.to exit_with_code(1) }
235
+ it { run_output.should =~ /The server does not support SSL certificates for custom aliases/m }
236
+ end
237
+ context 'invalid certificate file (empty)' do
238
+ let(:arguments) { ['alias', 'update-cert', 'mock_app_0', 'www.foo.bar',
239
+ '--certificate', File.expand_path('../../assets/empty.txt', __FILE__),
240
+ '--private-key', File.expand_path('../../assets/cert_key_rsa', __FILE__) ] }
241
+ it { expect { run }.to exit_with_code(1) }
242
+ it { run_output.should =~ /Invalid certificate file/m }
243
+ end
244
+ context 'invalid private key file (empty)' do
245
+ let(:arguments) { ['alias', 'update-cert', 'mock_app_0', 'www.foo.bar',
246
+ '--certificate', File.expand_path('../../assets/cert.crt', __FILE__),
247
+ '--private-key', File.expand_path('../../assets/empty.txt', __FILE__) ] }
248
+ it { expect { run }.to exit_with_code(1) }
249
+ it { run_output.should =~ /Invalid private key file/m }
250
+ end
251
+ end
252
+
253
+ describe 'alias delete-cert' do
254
+ before do
255
+ rest_client.stub(:api_version_negotiated).and_return(1.4)
256
+ end
257
+ context 'delete existing certificate' do
258
+ let(:arguments) { ['alias', 'delete-cert', 'mock_app_0', 'www.foo.bar', '--confirm'] }
259
+ it { expect { run }.to exit_with_code(0) }
260
+ it { run_output.should =~ /SSL certificate successfully deleted/m }
261
+ end
262
+ context 'delete not existing certificate' do
263
+ let(:arguments) { ['alias', 'delete-cert', 'mock_app_0', 'www.unicorns.com', '--confirm'] }
264
+ it { expect { run }.to exit_with_code(156) }
265
+ it { run_output.should =~ /Alias www.unicorns.com can't be found in application mock_app_0/m }
266
+ end
267
+ context 'fails if server does not support' do
268
+ let(:arguments) { ['alias', 'delete-cert', 'mock_app_0', 'www.foo.bar', '--confirm'] }
269
+ before do
270
+ rest_client.stub(:api_version_negotiated).and_return(1.3)
271
+ end
272
+ it { expect { run }.to exit_with_code(1) }
273
+ it { run_output.should =~ /The server does not support SSL certificates for custom aliases/m }
274
+ end
275
+ end
276
+
277
+ describe 'alias list' do
278
+ before do
279
+ rest_client.stub(:api_version_negotiated).and_return(1.4)
280
+ end
281
+ context 'list app with existing certificate' do
282
+ let(:arguments) { ['alias', 'list', 'mock_app_0'] }
283
+ it { expect { run }.to exit_with_code(0) }
284
+ it { run_output.should =~ /Has Certificate?/m }
285
+ it { run_output.should =~ /Certificate Added/m }
286
+ it { run_output.should =~ /www.foo.bar/m }
287
+ end
288
+ context 'list app without certificates' do
289
+ let(:arguments) { ['alias', 'list', 'mock_app_1'] }
290
+ it { expect { run }.to exit_with_code(0) }
291
+ it { run_output.should =~ /No aliases associated with the application mock_app_1/m }
292
+ end
293
+ context 'simple list is server does not support ssl certs' do
294
+ let(:arguments) { ['alias', 'list', 'mock_app_0'] }
295
+ before do
296
+ rest_client.stub(:api_version_negotiated).and_return(1.3)
297
+ end
298
+ it { expect { run }.to exit_with_code(0) }
299
+ it { run_output.should =~ /no/m }
300
+ it { run_output.should =~ /-/m }
301
+ it { run_output.should =~ /www.foo.bar/m }
302
+ end
303
+ end
304
+
305
+ describe 'aliases' do
306
+ before do
307
+ rest_client.stub(:api_version_negotiated).and_return(1.4)
308
+ end
309
+ context 'app with existing certificate' do
310
+ let(:arguments) { ['aliases', 'mock_app_0'] }
311
+ it { expect { run }.to exit_with_code(0) }
312
+ it { run_output.should =~ /Has Certificate?/m }
313
+ it { run_output.should =~ /Certificate Added/m }
314
+ it { run_output.should =~ /www.foo.bar/m }
315
+ end
316
+ context 'app without certificates' do
317
+ let(:arguments) { ['aliases', 'mock_app_1'] }
318
+ it { expect { run }.to exit_with_code(0) }
319
+ it { run_output.should =~ /No aliases associated with the application mock_app_1/m }
320
+ end
321
+ context 'simple list is server does not support ssl certs' do
322
+ let(:arguments) { ['aliases', 'mock_app_0'] }
323
+ before do
324
+ rest_client.stub(:api_version_negotiated).and_return(1.3)
325
+ end
326
+ it { expect { run }.to exit_with_code(0) }
327
+ it { run_output.should =~ /no/m }
328
+ it { run_output.should =~ /-/m }
329
+ it { run_output.should =~ /www.foo.bar/m }
330
+ end
331
+ end
332
+
333
+ end