whiskey_disk 0.0.0

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.
@@ -0,0 +1,277 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper.rb'))
2
+ require 'rake'
3
+
4
+ describe 'rake tasks' do
5
+ before do
6
+ Rake.application = @rake = Rake::Application.new
7
+ load File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib', 'tasks', 'deploy.rb'))
8
+ WhiskeyDisk.reset
9
+ end
10
+
11
+ after do
12
+ Rake.application = nil
13
+ end
14
+
15
+ describe 'deploy:setup' do
16
+ describe 'when a domain is specified' do
17
+ before do
18
+ @configuration = { 'domain' => 'some domain'}
19
+ WhiskeyDisk::Config.stub!(:fetch).and_return(@configuration)
20
+ [
21
+ :ensure_main_parent_path_is_present,
22
+ :ensure_config_parent_path_is_present,
23
+ :checkout_main_repository,
24
+ :install_hooks,
25
+ :checkout_configuration_repository,
26
+ :refresh_configuration,
27
+ :run_post_setup_hooks,
28
+ :flush
29
+ ].each do |meth|
30
+ WhiskeyDisk.stub!(meth)
31
+ end
32
+ end
33
+
34
+ it 'should make changes on the specified domain' do
35
+ @rake["deploy:setup"].invoke
36
+ WhiskeyDisk.should.be.remote
37
+ end
38
+
39
+ it 'should ensure that the parent path for the main repository checkout is present' do
40
+ WhiskeyDisk.should.receive(:ensure_main_parent_path_is_present)
41
+ @rake["deploy:setup"].invoke
42
+ end
43
+
44
+ it 'should ensure that the parent path for the configuration repository checkout is present' do
45
+ WhiskeyDisk.should.receive(:ensure_config_parent_path_is_present)
46
+ @rake["deploy:setup"].invoke
47
+ end
48
+
49
+ it 'should check out the main repository' do
50
+ WhiskeyDisk.should.receive(:checkout_main_repository)
51
+ @rake["deploy:setup"].invoke
52
+ end
53
+
54
+ it 'should install a post-receive hook on the checked out repository' do
55
+ WhiskeyDisk.should.receive(:install_hooks)
56
+ @rake["deploy:setup"].invoke
57
+ end
58
+
59
+ it 'should check out the configuration repository' do
60
+ WhiskeyDisk.should.receive(:checkout_configuration_repository)
61
+ @rake["deploy:setup"].invoke
62
+ end
63
+
64
+ it 'should refresh the configuration' do
65
+ WhiskeyDisk.should.receive(:refresh_configuration)
66
+ @rake["deploy:setup"].invoke
67
+ end
68
+
69
+ it 'should run any post setup hooks' do
70
+ WhiskeyDisk.should.receive(:run_post_setup_hooks)
71
+ @rake["deploy:setup"].invoke
72
+ end
73
+
74
+ it 'should flush WhiskeyDisk changes' do
75
+ WhiskeyDisk.should.receive(:flush)
76
+ @rake["deploy:setup"].invoke
77
+ end
78
+ end
79
+
80
+ describe 'when no domain is specified' do
81
+ before do
82
+ @configuration = { 'domain' => '' }
83
+ WhiskeyDisk::Config.stub!(:fetch).and_return(@configuration)
84
+
85
+ [
86
+ :ensure_config_parent_path_is_present,
87
+ :checkout_configuration_repository,
88
+ :refresh_configuration,
89
+ :run_post_setup_hooks,
90
+ :flush
91
+ ].each do |meth|
92
+ WhiskeyDisk.stub!(meth)
93
+ end
94
+ end
95
+
96
+ it 'should make changes on the local system' do
97
+ WhiskeyDisk.should.not.be.remote
98
+ end
99
+
100
+ it 'should NOT ensure that the parent path for the main repository checkout is present' do
101
+ WhiskeyDisk.should.not.receive(:ensure_main_parent_path_is_present)
102
+ @rake["deploy:setup"].invoke
103
+ end
104
+
105
+ it 'should ensure that the parent path for the configuration repository checkout is present' do
106
+ WhiskeyDisk.should.receive(:ensure_config_parent_path_is_present)
107
+ @rake["deploy:setup"].invoke
108
+ end
109
+
110
+ it 'should NOT check out the main repository' do
111
+ WhiskeyDisk.should.not.receive(:checkout_main_repository)
112
+ @rake["deploy:setup"].invoke
113
+ end
114
+
115
+ it 'should NOT install a post-receive hook on the checked out repository' do
116
+ WhiskeyDisk.should.not.receive(:install_hooks)
117
+ @rake["deploy:setup"].invoke
118
+ end
119
+
120
+ it 'should check out the configuration repository' do
121
+ WhiskeyDisk.should.receive(:checkout_configuration_repository)
122
+ @rake["deploy:setup"].invoke
123
+ end
124
+
125
+ it 'should refresh the configuration' do
126
+ WhiskeyDisk.should.receive(:refresh_configuration)
127
+ @rake["deploy:setup"].invoke
128
+ end
129
+
130
+ it 'should run any post setup hooks' do
131
+ WhiskeyDisk.should.receive(:run_post_setup_hooks)
132
+ @rake["deploy:setup"].invoke
133
+ end
134
+
135
+ it 'should flush WhiskeyDisk changes' do
136
+ WhiskeyDisk.should.receive(:flush)
137
+ @rake["deploy:setup"].invoke
138
+ end
139
+ end
140
+ end
141
+
142
+ describe 'deploy:now' do
143
+ describe 'when a domain is specified' do
144
+ before do
145
+ @configuration = { 'domain' => 'some domain'}
146
+ WhiskeyDisk::Config.stub!(:fetch).and_return(@configuration)
147
+ [
148
+ :update_main_repository_checkout,
149
+ :update_configuration_repository_checkout,
150
+ :refresh_configuration,
151
+ :run_post_deploy_hooks,
152
+ :flush
153
+ ].each do |meth|
154
+ WhiskeyDisk.stub!(meth)
155
+ end
156
+ end
157
+ it 'should make changes on the specified domain' do
158
+ @rake["deploy:now"].invoke
159
+ WhiskeyDisk.should.be.remote
160
+ end
161
+
162
+ it 'should update the main repository checkout' do
163
+ WhiskeyDisk.should.receive(:update_main_repository_checkout)
164
+ @rake["deploy:now"].invoke
165
+ end
166
+
167
+ it 'should update the configuration repository checkout' do
168
+ WhiskeyDisk.should.receive(:update_configuration_repository_checkout)
169
+ @rake["deploy:now"].invoke
170
+ end
171
+
172
+ it 'should refresh the configuration' do
173
+ WhiskeyDisk.should.receive(:refresh_configuration)
174
+ @rake["deploy:now"].invoke
175
+ end
176
+
177
+ it 'should run any post deployment hooks' do
178
+ WhiskeyDisk.should.receive(:run_post_deploy_hooks)
179
+ @rake["deploy:now"].invoke
180
+ end
181
+
182
+ it 'should flush WhiskeyDisk changes' do
183
+ WhiskeyDisk.should.receive(:flush)
184
+ @rake["deploy:now"].invoke
185
+ end
186
+ end
187
+
188
+ describe 'when no domain is specified' do
189
+ before do
190
+ @configuration = { 'domain' => '' }
191
+ WhiskeyDisk::Config.stub!(:fetch).and_return(@configuration)
192
+
193
+ [
194
+ :update_configuration_repository_checkout,
195
+ :refresh_configuration,
196
+ :run_post_deploy_hooks,
197
+ :flush
198
+ ].each do |meth|
199
+ WhiskeyDisk.stub!(meth)
200
+ end
201
+ end
202
+
203
+ it 'should make changes on the local system' do
204
+ WhiskeyDisk.should.not.be.remote
205
+ end
206
+
207
+ it 'should NOT update the main repository checkout' do
208
+ WhiskeyDisk.should.not.receive(:update_main_repository_checkout)
209
+ @rake["deploy:now"].invoke
210
+ end
211
+
212
+ it 'should update the configuration repository checkout' do
213
+ WhiskeyDisk.should.receive(:update_configuration_repository_checkout)
214
+ @rake["deploy:now"].invoke
215
+ end
216
+
217
+ it 'should refresh the configuration' do
218
+ WhiskeyDisk.should.receive(:refresh_configuration)
219
+ @rake["deploy:now"].invoke
220
+ end
221
+
222
+ it 'should run any post deployment hooks' do
223
+ WhiskeyDisk.should.receive(:run_post_deploy_hooks)
224
+ @rake["deploy:now"].invoke
225
+ end
226
+
227
+ it 'should flush WhiskeyDisk changes' do
228
+ WhiskeyDisk.should.receive(:flush)
229
+ @rake["deploy:now"].invoke
230
+ end
231
+ end
232
+
233
+ describe 'deploy:post_setup' do
234
+ it 'should run the defined post_setup rake task when a post_setup rake task is defined for this environment' do
235
+ @configuration = { 'environment' => 'production'}
236
+ WhiskeyDisk::Config.stub!(:fetch).and_return(@configuration)
237
+ WhiskeyDisk.reset
238
+
239
+ task "deploy:production:post_setup" do
240
+ WhiskeyDisk.fake_method
241
+ end
242
+
243
+ WhiskeyDisk.should.receive(:fake_method)
244
+ Rake::Task['deploy:post_setup'].invoke
245
+ end
246
+
247
+ it 'should not fail when no post_setup rake task is defined for this environment' do
248
+ @configuration = { 'environment' => 'staging'}
249
+ WhiskeyDisk::Config.stub!(:fetch).and_return(@configuration)
250
+ WhiskeyDisk.reset
251
+ lambda { Rake::Task['deploy:post_setup'].invoke }.should.not.raise
252
+ end
253
+ end
254
+
255
+ describe 'deploy:post_deploy' do
256
+ it 'should run the defined post_deploy rake task when a post_deploy rake task is defined for this environment' do
257
+ @configuration = { 'environment' => 'production'}
258
+ WhiskeyDisk::Config.stub!(:fetch).and_return(@configuration)
259
+ WhiskeyDisk.reset
260
+
261
+ task "deploy:production:post_deploy" do
262
+ WhiskeyDisk.fake_method
263
+ end
264
+
265
+ WhiskeyDisk.should.receive(:fake_method)
266
+ Rake::Task['deploy:post_deploy'].invoke
267
+ end
268
+
269
+ it 'should not fail when no post_deploy rake task is defined for this environment' do
270
+ @configuration = { 'environment' => 'staging'}
271
+ WhiskeyDisk::Config.stub!(:fetch).and_return(@configuration)
272
+ WhiskeyDisk.reset
273
+ lambda { Rake::Task['deploy:post_deploy'].invoke }.should.not.raise
274
+ end
275
+ end
276
+ end
277
+ end
@@ -0,0 +1,276 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper.rb'))
2
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'lib', 'whiskey_disk', 'config'))
3
+ require 'yaml'
4
+
5
+ CURRENT = File.expand_path(File.dirname(__FILE__)) # BACON evidently mucks around with __FILE__ or something related :-/
6
+
7
+ describe WhiskeyDisk::Config do
8
+ describe 'when fetching configuration' do
9
+ it 'should fail if the current environment cannot be determined' do
10
+ ENV['to'] = nil
11
+ lambda { WhiskeyDisk::Config.fetch }.should.raise
12
+ end
13
+
14
+ describe 'when there is no separate configuration file for the current environment' do
15
+ before do
16
+ ENV['to'] = @env = 'staging'
17
+ WhiskeyDisk::Config.stub!(:environment_configuration_data).and_return(nil)
18
+ end
19
+
20
+ it 'should fail if the main configuration file does not exist' do
21
+ WhiskeyDisk::Config.stub!(:main_configuration_file).and_return(__FILE__ + "_.crap")
22
+ lambda { WhiskeyDisk::Config.fetch }.should.raise
23
+ end
24
+
25
+ it 'should fail if the main configuration file cannot be read' do
26
+ WhiskeyDisk::Config.stub!(:main_configuration_file).and_return("/tmp")
27
+ lambda { WhiskeyDisk::Config.fetch }.should.raise
28
+ end
29
+
30
+ it 'should fail if the main configuration file is invalid' do
31
+ YAML.stub!(:load).and_raise
32
+ lambda { WhiskeyDisk::Config.fetch }.should.raise
33
+ end
34
+
35
+ it 'should fail if the main configuration file does not define data for this environment' do
36
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump({ 'production' => { 'a' => 'b'} }))
37
+ lambda { WhiskeyDisk::Config.fetch }.should.raise
38
+ end
39
+
40
+ it 'should return the main configuration yaml file data for this environment as a hash' do
41
+ staging = { 'foo' => 'bar', 'baz' => 'xyzzy' }
42
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump({ 'production' => { 'a' => 'b'}, 'staging' => staging }))
43
+ result = WhiskeyDisk::Config.fetch
44
+ staging.each_pair do |k,v|
45
+ result[k].should == v
46
+ end
47
+ end
48
+
49
+ it 'should not include configuration information for other environments in the returned hash' do
50
+ staging = { 'foo' => 'bar', 'baz' => 'xyzzy' }
51
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump({ 'production' => { 'a' => 'b'}, 'staging' => staging }))
52
+ WhiskeyDisk::Config.fetch['a'].should.be.nil
53
+ end
54
+
55
+ it 'should include the environment in the hash' do
56
+ staging = { 'foo' => 'bar', 'baz' => 'xyzzy' }
57
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump({ 'production' => { 'a' => 'b'}, 'staging' => staging }))
58
+ WhiskeyDisk::Config.fetch['environment'].should == 'staging'
59
+ end
60
+
61
+ it 'should not allow overriding the environment in the configuration file' do
62
+ staging = { 'foo' => 'bar', 'baz' => 'xyzzy', 'environment' => 'production' }
63
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump({ 'production' => { 'a' => 'b'}, 'staging' => staging }))
64
+ WhiskeyDisk::Config.fetch['environment'].should == 'staging'
65
+ end
66
+
67
+ it 'should include the project handle in the hash' do
68
+ staging = { 'foo' => 'bar', 'baz' => 'xyzzy' }
69
+ WhiskeyDisk::Config.stub!(:project_name).and_return('whiskey_disk')
70
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump({ 'production' => { 'a' => 'b'}, 'staging' => staging }))
71
+ WhiskeyDisk::Config.fetch['project'].should == 'whiskey_disk'
72
+ end
73
+
74
+ it 'should allow overriding the project handle in the configuration file' do
75
+ staging = { 'foo' => 'bar', 'baz' => 'xyzzy', 'project' => 'diskey_whisk' }
76
+ WhiskeyDisk::Config.stub!(:project_name).and_return('whiskey_disk')
77
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump({ 'production' => { 'a' => 'b'}, 'staging' => staging }))
78
+ WhiskeyDisk::Config.fetch['project'].should == 'diskey_whisk'
79
+ end
80
+ end
81
+
82
+ describe 'when there is a separate configuration file for the current environment' do
83
+ before do
84
+ ENV['to'] = @env = 'staging'
85
+ WhiskeyDisk::Config.stub!(:environment_configuration_file).and_return(__FILE__)
86
+ WhiskeyDisk::Config.stub!(:main_configuration_file).and_return(__FILE__)
87
+ end
88
+
89
+ it 'should fail if the main configuration file does not exist' do
90
+ WhiskeyDisk::Config.stub!(:main_configuration_file).and_return(__FILE__ + "_.crap")
91
+ lambda { WhiskeyDisk::Config.fetch }.should.raise(RuntimeError)
92
+ end
93
+
94
+ it 'should fail if the main configuration file cannot be read' do
95
+ WhiskeyDisk::Config.stub!(:main_configuration_file).and_return("/tmp")
96
+ lambda { WhiskeyDisk::Config.fetch }.should.raise(RuntimeError)
97
+ end
98
+
99
+ it 'should fail if the main configuration file is invalid' do
100
+ YAML.stub!(:load).and_raise
101
+ lambda { WhiskeyDisk::Config.fetch }.should.raise
102
+ end
103
+
104
+ it 'should fail if the separate configuration file cannot be read' do
105
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump({}))
106
+ WhiskeyDisk::Config.stub!(:environment_configuration_file).and_return("/tmp")
107
+ lambda { WhiskeyDisk::Config.fetch }.should.raise
108
+ end
109
+
110
+ it 'should fail if the separate configuration file is invalid' do
111
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump({}))
112
+ WhiskeyDisk::Config.stub!(:environment_configuration_data).and_return('BAD DATA')
113
+ YAML.stub!(:load).with('BAD DATA').and_raise
114
+ lambda { WhiskeyDisk::Config.fetch }.should.raise
115
+ end
116
+
117
+ it 'should fail if the separate configuration file does not define data for this environment' do
118
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump({}))
119
+ WhiskeyDisk::Config.stub!(:environment_configuration_data).and_return(YAML.dump({ 'production' => { 'a' => 'b'} }))
120
+ lambda { WhiskeyDisk::Config.fetch }.should.raise
121
+ end
122
+
123
+ it 'should return the merger of main and separate yaml configuration data as a hash' do
124
+ main = { 'staging' => { 'foo' => 'bar'}}
125
+ env = { 'staging' => { 'baz' => 'xyzzy'}}
126
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump(main))
127
+ WhiskeyDisk::Config.stub!(:environment_configuration_data).and_return(YAML.dump(env))
128
+ result = WhiskeyDisk::Config.fetch
129
+ main.merge(env)['staging'].each_pair {|k,v| result[k].should == v}
130
+ end
131
+
132
+ it 'should work even if main does not provide configuration data for this environment' do
133
+ main = { 'production' => { 'foo' => 'bar'}}
134
+ env = { 'staging' => { 'baz' => 'xyzzy'}}
135
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump(main))
136
+ WhiskeyDisk::Config.stub!(:environment_configuration_data).and_return(YAML.dump(env))
137
+ result = WhiskeyDisk::Config.fetch
138
+ env['staging'].each_pair {|k,v| result[k].should == v}
139
+ end
140
+
141
+ it 'should override main configuration file data with separate configuration file data when there is a conflict' do
142
+ main = { 'production' => { 'foo' => 'bar'}}
143
+ env = { 'staging' => { 'baz' => 'xyzzy', 'foo' => 'mine'}}
144
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump(main))
145
+ WhiskeyDisk::Config.stub!(:environment_configuration_data).and_return(YAML.dump(env))
146
+ result = WhiskeyDisk::Config.fetch
147
+ env['staging'].each_pair {|k,v| result[k].should == v}
148
+ end
149
+
150
+ it 'should include the environment in the hash' do
151
+ main = { 'staging' => { 'foo' => 'bar'}}
152
+ env = { 'staging' => { 'baz' => 'xyzzy'}}
153
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump(main))
154
+ WhiskeyDisk::Config.stub!(:environment_configuration_data).and_return(YAML.dump(env))
155
+ WhiskeyDisk::Config.fetch['environment'].should == 'staging'
156
+ end
157
+
158
+ it 'should not allow overriding the environment in the main configuration file' do
159
+ main = { 'staging' => { 'foo' => 'bar', 'environment' => 'production'}}
160
+ env = { 'staging' => { 'baz' => 'xyzzy'}}
161
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump(main))
162
+ WhiskeyDisk::Config.stub!(:environment_configuration_data).and_return(YAML.dump(env))
163
+ WhiskeyDisk::Config.fetch['environment'].should == 'staging'
164
+ end
165
+
166
+ it 'should not allow overriding the environment in the separate configuration file' do
167
+ main = { 'staging' => { 'foo' => 'bar', 'environment' => 'production'}}
168
+ env = { 'staging' => { 'baz' => 'xyzzy', 'environment' => 'production'}}
169
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump(main))
170
+ WhiskeyDisk::Config.stub!(:environment_configuration_data).and_return(YAML.dump(env))
171
+ WhiskeyDisk::Config.fetch['environment'].should == 'staging'
172
+ end
173
+
174
+ it 'should include the project handle in the hash' do
175
+ main = { 'staging' => { 'foo' => 'bar' }}
176
+ env = { 'staging' => { 'baz' => 'xyzzy' }}
177
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump(main))
178
+ WhiskeyDisk::Config.stub!(:environment_configuration_data).and_return(YAML.dump(env))
179
+ WhiskeyDisk::Config.stub!(:project_name).and_return('whiskey_disk')
180
+ WhiskeyDisk::Config.fetch['project'].should == 'whiskey_disk'
181
+ end
182
+
183
+ it 'should allow overriding the project handle in the main configuration file' do
184
+ main = { 'staging' => { 'foo' => 'bar', 'project' => 'diskey_whisk' }}
185
+ env = { 'staging' => { 'baz' => 'xyzzy' }}
186
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump(main))
187
+ WhiskeyDisk::Config.stub!(:environment_configuration_data).and_return(YAML.dump(env))
188
+ WhiskeyDisk::Config.stub!(:project_name).and_return('whiskey_disk')
189
+ WhiskeyDisk::Config.fetch['project'].should == 'diskey_whisk'
190
+ end
191
+
192
+ it 'should allow overriding the project handle in the separate configuration file' do
193
+ main = { 'staging' => { 'foo' => 'bar', 'project' => 'diskey_whisk' }}
194
+ env = { 'staging' => { 'baz' => 'xyzzy', 'project' => 'diskey_whisk' }}
195
+ WhiskeyDisk::Config.stub!(:main_configuration_data).and_return(YAML.dump(main))
196
+ WhiskeyDisk::Config.stub!(:environment_configuration_data).and_return(YAML.dump(env))
197
+ WhiskeyDisk::Config.stub!(:project_name).and_return('whiskey_disk')
198
+ WhiskeyDisk::Config.fetch['project'].should == 'diskey_whisk'
199
+ end
200
+ end
201
+ end
202
+
203
+ describe 'when returning the configuration filenames' do
204
+ before do
205
+ ENV['to'] = @env = 'staging'
206
+ WhiskeyDisk::Config.stub!(:main_configuration_file).and_return('/path/to/main')
207
+ WhiskeyDisk::Config.stub!(:environment_configuration_file).and_return('/path/to/staging')
208
+ end
209
+
210
+ it 'should fail if the current environment cannot be determined' do
211
+ ENV['to'] = nil
212
+ lambda { WhiskeyDisk::Config.filenames }.should.raise
213
+ end
214
+
215
+ it 'should include the location of the main configuration file' do
216
+ WhiskeyDisk::Config.filenames.should.include('/path/to/main')
217
+ end
218
+
219
+ it 'should include the location of a separate configuration file for this environment' do
220
+ WhiskeyDisk::Config.filenames.should.include('/path/to/staging')
221
+ end
222
+ end
223
+
224
+ describe 'computing the project name from a configuration hash' do
225
+ it 'should return the empty string if no repository is defined' do
226
+ WhiskeyDisk::Config.project_name({}).should == ''
227
+ end
228
+
229
+ it 'should return the empty string if the repository is blank' do
230
+ WhiskeyDisk::Config.project_name({ 'repository' => ''}).should == ''
231
+ end
232
+
233
+ it 'should return the last path segment if the repository does not end in .git' do
234
+ WhiskeyDisk::Config.project_name({ 'repository' => 'git@foo/bar/baz'}).should == 'baz'
235
+ end
236
+
237
+ it 'should return the last pasth segment, stripping .git, if the repository ends in .git' do
238
+ WhiskeyDisk::Config.project_name({ 'repository' => 'git@foo/bar/baz.git'}).should == 'baz'
239
+ end
240
+ end
241
+
242
+ describe 'finding the main configuration file' do
243
+ it 'should return the path to deploy.yml in the config directory under the project base path' do
244
+ WhiskeyDisk::Config.stub!(:base_path).and_return('/path/to/project')
245
+ WhiskeyDisk::Config.main_configuration_file.should == '/path/to/project/config/deploy.yml'
246
+ end
247
+ end
248
+
249
+ describe 'finding the per-environment configuration file' do
250
+ it 'should fail if the current environment cannot be determined' do
251
+ ENV['to'] = nil
252
+ lambda { WhiskeyDisk::Config.environment_configuration_file }.should.raise
253
+ end
254
+
255
+ it 'should return the path to deploy-<environment>.yml in the config directory under the project base path' do
256
+ ENV['to'] = @env = 'staging'
257
+ WhiskeyDisk::Config.stub!(:base_path).and_return('/path/to/project')
258
+ WhiskeyDisk::Config.environment_configuration_file.should == '/path/to/project/config/deploy-staging.yml'
259
+ end
260
+ end
261
+
262
+ describe 'computing the base path for the project' do
263
+ it 'should fail if there is no Rakefile along the root path to the current directory' do
264
+ WhiskeyDisk::Config.stub!(:contains_rakefile?).and_return(false)
265
+ lambda { WhiskeyDisk::Config.base_path }.should.raise
266
+ end
267
+
268
+ it 'return the nearest enclosing path with a Rakefile along the root path to the current directory' do
269
+ top = ::File.expand_path(File.join(CURRENT, '..', '..'))
270
+ WhiskeyDisk::Config.stub!(:contains_rakefile?).and_return(false)
271
+ WhiskeyDisk::Config.stub!(:contains_rakefile?).with(top).and_return(true)
272
+ Dir.chdir(CURRENT)
273
+ WhiskeyDisk::Config.base_path.should == top
274
+ end
275
+ end
276
+ end