fail_fast 0.5.1 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -0
- data/.rvmrc +1 -0
- data/CHANGELOG.txt +9 -0
- data/Gemfile +3 -0
- data/README.markdown +15 -1
- data/Rakefile +8 -36
- data/fail_fast.gemspec +22 -107
- data/lib/fail_fast/base/base.rb +1 -1
- data/lib/fail_fast/base/messaging.rb +1 -1
- data/lib/fail_fast/base/utils.rb +3 -2
- data/lib/fail_fast/base/z_only_for_tests.rb +2 -2
- data/lib/fail_fast/extensions/directory_exists.rb +41 -0
- data/lib/fail_fast/extensions/file_exists.rb +41 -0
- data/lib/fail_fast/extensions/{check_active_record_db.rb → has_active_record_db.rb} +4 -2
- data/lib/fail_fast/extensions/{check_email.rb → has_email.rb} +7 -5
- data/lib/fail_fast/extensions/{check_mongo_db.rb → has_mongo_db.rb} +13 -9
- data/lib/fail_fast/extensions/{check_url.rb → has_url.rb} +8 -6
- data/lib/fail_fast/extensions/{check_value.rb → has_value.rb} +3 -3
- data/lib/fail_fast/extensions/{check_is_on_path.rb → is_on_path.rb} +10 -6
- data/lib/fail_fast/main.rb +1 -1
- data/lib/fail_fast/support/error_db.rb +1 -1
- data/lib/fail_fast/support/error_details.rb +2 -2
- data/lib/fail_fast/support/z_only_for_tests.rb +1 -1
- data/spec/base/base_commands/fail_spec.rb +7 -0
- data/spec/base/base_commands/failed_spec.rb +19 -0
- data/spec/base/base_commands/only_if_spec.rb +15 -0
- data/spec/base/base_commands/skip_if_spec.rb +29 -0
- data/spec/base/errors_storage_spec.rb +1 -1
- data/spec/base/multiple_blocks_support_spec.rb +3 -3
- data/spec/base/{not_linked_to_a_file_spec.rb → not_linked_to_a_config_file_spec.rb} +3 -3
- data/spec/base/{file_is_empty_spec.rb → when_config_file_is_empty_spec.rb} +3 -3
- data/spec/base/{file_is_missing_spec.rb → when_config_file_is_missing_spec.rb} +2 -2
- data/spec/extensions/{check_file_system_spec.rb → file_or_directory_exists_spec.rb} +18 -2
- data/spec/extensions/{check_active_record_db_spec.rb → has_active_record_db_spec.rb} +11 -6
- data/spec/extensions/{check_email_spec.rb → has_email_spec.rb} +11 -6
- data/spec/extensions/{check_mongo_db_spec.rb → has_mongoDB_spec.rb} +28 -9
- data/spec/extensions/{check_url_spec.rb → has_url_spec.rb} +4 -1
- data/spec/extensions/{check_value_spec.rb → has_value_spec.rb} +15 -11
- data/spec/extensions/{check_is_on_path_spec.rb → is_on_path_spec.rb} +9 -5
- data/spec/spec_helper.rb +39 -4
- metadata +78 -55
- data/VERSION +0 -1
- data/lib/fail_fast/extensions/check_file_system.rb +0 -67
- data/spec/base/base_commands_spec.rb +0 -67
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe 'failed?' do
|
4
|
+
example "is false when there are no errors" do
|
5
|
+
FailFast(SIMPLE_FILE_PATH ).check_now.but_fail_later {}
|
6
|
+
FailFast.failed?.should be_false
|
7
|
+
end
|
8
|
+
|
9
|
+
example "is true when there is 1 block and 1 error" do
|
10
|
+
FailFast(UNKNOWN_FILE_PATH).check_now.but_fail_later {} # <-- 1 error here
|
11
|
+
FailFast.failed?.should be_true
|
12
|
+
end
|
13
|
+
|
14
|
+
example "is true when the error block is followed by and error-free empty file block (BUG FIX)" do
|
15
|
+
FailFast(UNKNOWN_FILE_PATH).check_now.but_fail_later {} # <-- 1 error here
|
16
|
+
FailFast(EMPTY_FILE_PATH ).check_now.but_fail_later {} #no errors in the last block
|
17
|
+
FailFast.failed?.should be_true
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe "only_if" do
|
4
|
+
it_should_not_raise_an_error('only_if false does not run the block') {
|
5
|
+
only_if false do
|
6
|
+
fail 'never executed'
|
7
|
+
end
|
8
|
+
}
|
9
|
+
|
10
|
+
it_should_raise_a_direct_error('message 456', :fail, 'only_if true runs the block') {
|
11
|
+
only_if true do
|
12
|
+
fail 'message 456'
|
13
|
+
end
|
14
|
+
}
|
15
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe "skip_if" do
|
4
|
+
it_should_not_raise_an_error('skip_if(true) does not run the block') {
|
5
|
+
skip_if true do
|
6
|
+
fail 'never executed'
|
7
|
+
end
|
8
|
+
}
|
9
|
+
|
10
|
+
it_should_raise_a_direct_error('message 456', :fail, 'skip_if(false) runs the block') {
|
11
|
+
skip_if false do
|
12
|
+
fail 'message 456'
|
13
|
+
end
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "skip_if" do
|
18
|
+
it_should_not_raise_an_error('skip_if(true) does not run the block') {
|
19
|
+
skip_if true do
|
20
|
+
fail 'never executed'
|
21
|
+
end
|
22
|
+
}
|
23
|
+
|
24
|
+
it_should_raise_a_direct_error('message 456', :fail, 'skip_if(false) runs the block') {
|
25
|
+
skip_if false do
|
26
|
+
fail 'message 456'
|
27
|
+
end
|
28
|
+
}
|
29
|
+
end
|
@@ -4,7 +4,7 @@ describe "errors" do
|
|
4
4
|
before(:each) { capture_stdout }
|
5
5
|
after( :each) { restore_stdout }
|
6
6
|
|
7
|
-
it "
|
7
|
+
it "uses the filename and the prefix as key" do
|
8
8
|
begin
|
9
9
|
FailFast('invalid_file_path', 'a_prefix').check() do
|
10
10
|
has_value_for :unknown
|
@@ -4,7 +4,7 @@ describe "FailFast.check_now.but_fail_later" do
|
|
4
4
|
before(:all) { capture_stdout }
|
5
5
|
after( :all) { restore_stdout }
|
6
6
|
|
7
|
-
it '
|
7
|
+
it 'does not raise an error on the check(..) call' do
|
8
8
|
lambda {
|
9
9
|
FailFast(UNKNOWN_FILE_PATH).check_now.but_fail_later {}
|
10
10
|
}.should_not raise_error
|
@@ -21,13 +21,13 @@ describe "FailFast.check_now.but_fail_later" do
|
|
21
21
|
FailFast(EMPTY_FILE_PATH ).check_now.but_fail_later {} #no errors in the last block
|
22
22
|
end
|
23
23
|
|
24
|
-
it("
|
24
|
+
it("detects and collect all the errors") {
|
25
25
|
FailFast.errors_db.errors_for(FailFast::ErrorDb.key_for(UNKNOWN_FILE_PATH)).collect(&:kind).should == [:config_file_not_found]
|
26
26
|
FailFast.errors_db.errors_for(FailFast::ErrorDb.key_for(SIMPLE_FILE_PATH )).collect(&:kind).should == [:missing_value, :missing_value]
|
27
27
|
FailFast.errors_db.errors_for(FailFast::ErrorDb.key_for(EMPTY_FILE_PATH )).collect(&:kind).should == []
|
28
28
|
}
|
29
29
|
context "after FailFast.fail_now" do
|
30
|
-
it "
|
30
|
+
it "raises an error" do
|
31
31
|
lambda {
|
32
32
|
FailFast.fail_now
|
33
33
|
}.should raise_error(ExitTriggered)
|
@@ -5,14 +5,14 @@ describe "check not linked to a config file" do
|
|
5
5
|
after( :each) { restore_stdout }
|
6
6
|
|
7
7
|
|
8
|
-
it "
|
8
|
+
it "does not raise an error when there are no checks" do
|
9
9
|
lambda {
|
10
10
|
FailFast().check do end
|
11
11
|
}.should_not raise_error
|
12
12
|
FailFast.failed?.should be_false
|
13
13
|
end
|
14
14
|
|
15
|
-
it "
|
15
|
+
it "raises an error when there is a failing check" do
|
16
16
|
lambda {
|
17
17
|
FailFast().check do
|
18
18
|
fail 'error'
|
@@ -21,7 +21,7 @@ describe "check not linked to a config file" do
|
|
21
21
|
FailFast.failed?.should be_true
|
22
22
|
end
|
23
23
|
|
24
|
-
it "
|
24
|
+
it "raises a delayed error when there is a failing check" do
|
25
25
|
lambda {
|
26
26
|
FailFast().check_now.but_fail_later do
|
27
27
|
fail 'error'
|
@@ -5,14 +5,14 @@ describe "ConfigCheck on an empty file" do
|
|
5
5
|
after( :each) { restore_stdout }
|
6
6
|
|
7
7
|
|
8
|
-
it "
|
8
|
+
it "does not raise an error when there are no checks" do
|
9
9
|
lambda {
|
10
10
|
FailFast(EMPTY_FILE_PATH).check do end
|
11
11
|
}.should_not raise_error
|
12
12
|
FailFast.failed?.should be_false
|
13
13
|
end
|
14
14
|
|
15
|
-
it "
|
15
|
+
it "raises an error when there is a failing check" do
|
16
16
|
lambda {
|
17
17
|
FailFast(EMPTY_FILE_PATH).check do
|
18
18
|
has_value_for :anykey
|
@@ -21,7 +21,7 @@ describe "ConfigCheck on an empty file" do
|
|
21
21
|
FailFast.failed?.should be_true
|
22
22
|
end
|
23
23
|
|
24
|
-
it "
|
24
|
+
it "raises a delayed error when there is a failing check" do
|
25
25
|
lambda {
|
26
26
|
FailFast(EMPTY_FILE_PATH).check_now.but_fail_later do
|
27
27
|
has_value_for :anykey
|
@@ -4,12 +4,12 @@ describe "ConfigCheck on an unknown file" do
|
|
4
4
|
before(:all) { capture_stdout }
|
5
5
|
after( :all) { restore_stdout }
|
6
6
|
|
7
|
-
it "
|
7
|
+
it "does not raise an error in new()" do
|
8
8
|
FailFast(UNKNOWN_FILE_PATH)
|
9
9
|
fail if FailFast.failed?
|
10
10
|
end
|
11
11
|
|
12
|
-
it "
|
12
|
+
it "raises an error in fail_fast()" do
|
13
13
|
lambda {
|
14
14
|
FailFast(UNKNOWN_FILE_PATH).check do end
|
15
15
|
}.should raise_error(ExitTriggered)
|
@@ -6,6 +6,10 @@ a_file = SPEC_DIR + '/fixtures/simple.yml'
|
|
6
6
|
|
7
7
|
describe 'directory_exists' do
|
8
8
|
context '' do
|
9
|
+
it_should_return_true( 'when the directory exists' ) { directory_exists a_dir }
|
10
|
+
it_should_return_false('when the directory does not exists' ) { directory_exists 'XYZ' }
|
11
|
+
it_should_return_false('when the directory is a dir' ) { directory_exists a_file }
|
12
|
+
|
9
13
|
it_should_not_raise_an_error('when the directory exists' ) { directory_exists a_dir }
|
10
14
|
|
11
15
|
it_should_raise_a_direct_error('XYZ', :directory_not_found, 'when the directory does not exist' ) { directory_exists 'XYZ' }
|
@@ -13,6 +17,10 @@ describe 'directory_exists' do
|
|
13
17
|
end
|
14
18
|
|
15
19
|
context '_for' do
|
20
|
+
it_should_return_true( 'when the file exists' ) { directory_exists_for 'test/a_directory' }
|
21
|
+
it_should_return_false('when the file does not exists' ) { directory_exists_for 'test/UNKNOWN' }
|
22
|
+
it_should_return_false('when the file is a dir' ) { directory_exists_for 'test/a_file' }
|
23
|
+
|
16
24
|
it_should_not_raise_an_error('when the directory exists' ) { directory_exists_for 'test/a_directory' }
|
17
25
|
|
18
26
|
it_should_raise_an_error('test/a_file', :directory_not_found, 'when the path points to a File' ) { directory_exists_for 'test/a_file' }
|
@@ -20,7 +28,7 @@ describe 'directory_exists' do
|
|
20
28
|
it_should_raise_an_error('not_a_valid_key',:missing_value, 'when the key is invalid' ) { directory_exists_for 'not_a_valid_key' }
|
21
29
|
end
|
22
30
|
|
23
|
-
it "
|
31
|
+
it "accepts a custom message for the 5 cases" do
|
24
32
|
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
25
33
|
directory_exists_for 'test/a_file', :message => 'a_custom_message'
|
26
34
|
directory_exists_for 'test/email', :message => 'a_custom_message_2'
|
@@ -36,6 +44,10 @@ end
|
|
36
44
|
|
37
45
|
describe 'file_exists' do
|
38
46
|
context '' do
|
47
|
+
it_should_return_true( 'when the file exists' ) { file_exists a_file }
|
48
|
+
it_should_return_false('when the file does not exists' ) { file_exists 'XYZ' }
|
49
|
+
it_should_return_false('when the file is a dir' ) { file_exists a_dir }
|
50
|
+
|
39
51
|
it_should_not_raise_an_error('when the file exists' ) { file_exists a_file}
|
40
52
|
|
41
53
|
it_should_raise_a_direct_error('XYZ', :file_not_found, 'when the file does not exist' ) { file_exists 'XYZ' }
|
@@ -43,6 +55,10 @@ describe 'file_exists' do
|
|
43
55
|
end
|
44
56
|
|
45
57
|
context '_for' do
|
58
|
+
it_should_return_true( 'when the file exists' ) { file_exists_for 'test/a_file' }
|
59
|
+
it_should_return_false('when the file does not exists' ) { file_exists_for 'test/UNKNOWN' }
|
60
|
+
it_should_return_false('when the file is a dir' ) { file_exists_for 'test/a_directory' }
|
61
|
+
|
46
62
|
it_should_not_raise_an_error('when the file exists' ) { file_exists_for 'test/a_file' }
|
47
63
|
|
48
64
|
it_should_raise_an_error('test/a_directory', :file_not_found, 'when the path points to a dir' ) { file_exists_for 'test/a_directory' }
|
@@ -50,7 +66,7 @@ describe 'file_exists' do
|
|
50
66
|
it_should_raise_an_error('not_a_valid_key', :missing_value, 'when the key is invalid' ) { file_exists_for 'not_a_valid_key' }
|
51
67
|
end
|
52
68
|
|
53
|
-
it "
|
69
|
+
it "accepts a custom message for the 5 cases" do
|
54
70
|
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
55
71
|
file_exists_for 'test/a_directory', :message => 'a_custom_message'
|
56
72
|
file_exists_for 'test/email', :message => 'a_custom_message_2'
|
@@ -6,14 +6,16 @@ describe 'has_ar_db' do
|
|
6
6
|
conn = Object.new ; conn.should_receive(:active?).and_return(true)
|
7
7
|
ActiveRecord::Base.should_receive(:connection).and_return(conn)
|
8
8
|
|
9
|
-
has_active_record_db :host => 'localhost', :adapter => 'mysql', :database=> 'a-db', :username => 'root'
|
9
|
+
result = has_active_record_db :host => 'localhost', :adapter => 'mysql', :database=> 'a-db', :username => 'root'
|
10
|
+
result.should == true
|
10
11
|
}
|
11
12
|
|
12
13
|
it_should_raise_a_direct_error('ze-error-message', :active_record_db_connection_error, 'when the connection fails' ) {
|
13
14
|
exception = StandardError.new('ze-error-message')
|
14
15
|
ActiveRecord::Base.should_receive(:establish_connection).and_raise(exception)
|
15
16
|
|
16
|
-
has_active_record_db valid_connection_options = {}
|
17
|
+
result = has_active_record_db valid_connection_options = {}
|
18
|
+
result.should == false
|
17
19
|
}
|
18
20
|
end
|
19
21
|
|
@@ -22,22 +24,25 @@ describe 'has_ar_db' do
|
|
22
24
|
conn = Object.new ; conn.should_receive(:active?).and_return(true)
|
23
25
|
ActiveRecord::Base.should_receive(:connection).and_return(conn)
|
24
26
|
|
25
|
-
has_active_record_db_for 'db_connection'
|
27
|
+
result = has_active_record_db_for 'db_connection'
|
28
|
+
result.should == true
|
26
29
|
}
|
27
30
|
|
28
31
|
it_should_raise_an_error('db_connection', :active_record_db_connection_error, 'when the connection fails' ) {
|
29
32
|
exception = StandardError.new('an-error-message')
|
30
33
|
ActiveRecord::Base.should_receive(:establish_connection).and_raise(exception)
|
31
34
|
|
32
|
-
has_active_record_db_for 'db_connection'
|
35
|
+
result = has_active_record_db_for 'db_connection'
|
36
|
+
result.should == false
|
33
37
|
}
|
34
38
|
|
35
39
|
it_should_raise_an_error('invalid_key', :missing_value, 'when the key is invalid' ) {
|
36
|
-
has_active_record_db_for 'invalid_key'
|
40
|
+
result = has_active_record_db_for 'invalid_key'
|
41
|
+
result.should == false
|
37
42
|
}
|
38
43
|
end
|
39
44
|
|
40
|
-
it "
|
45
|
+
it "accepts a custom message for those 3 cases" do
|
41
46
|
exception = StandardError.new('an-error-message')
|
42
47
|
ActiveRecord::Base.should_receive(:establish_connection).twice.and_raise(exception)
|
43
48
|
|
@@ -2,19 +2,24 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
|
3
3
|
describe 'has_email_for()' do
|
4
4
|
it_should_not_raise_an_error('when the value is an email') {
|
5
|
-
has_email_for 'test/email'
|
5
|
+
result = has_email_for 'test/email'
|
6
|
+
result.should == true
|
6
7
|
}
|
7
8
|
it_should_raise_an_error('test/url', :not_an_email, 'when the value is not an email') {
|
8
|
-
has_email_for 'test/url'
|
9
|
+
result = has_email_for 'test/url'
|
10
|
+
result.should == false
|
9
11
|
}
|
10
12
|
it_should_raise_an_error('invalid_key', :missing_value, 'when the key is invalid') {
|
11
|
-
has_email_for 'invalid_key'
|
13
|
+
result = has_email_for 'invalid_key'
|
14
|
+
result.should == false
|
12
15
|
}
|
13
16
|
|
14
|
-
it "
|
17
|
+
it "accepts a custom message for the 2 cases" do
|
15
18
|
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
16
|
-
has_email_for 'invalid_key', :message => 'a_custom_message'
|
17
|
-
|
19
|
+
result = has_email_for 'invalid_key', :message => 'a_custom_message'
|
20
|
+
result.should == false
|
21
|
+
result = has_email_for 'test/url', :message => 'a_custom_message_2'
|
22
|
+
result.should == false
|
18
23
|
end
|
19
24
|
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
20
25
|
messages.should =~ %w(a_custom_message a_custom_message_2)
|
@@ -9,11 +9,16 @@ describe 'has_mongoDB' do
|
|
9
9
|
it_should_raise_a_direct_error('localhost', :mongoDB_server_not_found, 'when the mongoDB server connection failed') {
|
10
10
|
has_mongoDB 'localhost'
|
11
11
|
}
|
12
|
+
it_should_return_false('when the mongoDB server connection failed') {
|
13
|
+
has_mongoDB 'localhost'
|
14
|
+
}
|
12
15
|
|
13
|
-
it "
|
16
|
+
it "accepts a custom message for this case" do
|
14
17
|
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
15
|
-
has_mongoDB 'localhost', :message => 'a_custom_message'
|
16
|
-
|
18
|
+
result = has_mongoDB 'localhost', :message => 'a_custom_message'
|
19
|
+
result.should == false
|
20
|
+
result = has_mongoDB 'localhost', :timeout => 1, :message => 'a_custom_message_2'
|
21
|
+
result.should == false
|
17
22
|
end
|
18
23
|
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
19
24
|
messages.should =~ %w(a_custom_message a_custom_message_2)
|
@@ -27,13 +32,17 @@ describe 'has_mongoDB' do
|
|
27
32
|
Mongo::Connection.should_receive(:new).and_return(conn)
|
28
33
|
end
|
29
34
|
|
35
|
+
it_should_return_true('when the mongoDB server responds' ) { has_mongoDB 'localhost' }
|
36
|
+
it_should_return_true('when the mongoDB server responds and the db can be found' ) { has_mongoDB 'localhost', 'sample_mongoDB' }
|
37
|
+
it_should_return_false('when the database cannot be found on the mongoDB' ) { has_mongoDB 'localhost', 'not_a_known_db' }
|
38
|
+
|
30
39
|
it_should_not_raise_an_error('when the mongoDB server responds' ) { has_mongoDB 'localhost' }
|
31
40
|
it_should_not_raise_an_error('when the mongoDB server responds and the db can be found' ) { has_mongoDB 'localhost', 'sample_mongoDB' }
|
32
41
|
|
33
42
|
it_should_raise_a_direct_error('not_a_known_db', :mongoDB_db_not_found, 'when the database cannot be found on the mongoDB') {
|
34
43
|
has_mongoDB 'localhost', 'not_a_known_db'
|
35
44
|
}
|
36
|
-
it "
|
45
|
+
it "accepts a custom message for this case" do
|
37
46
|
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
38
47
|
has_mongoDB 'localhost', 'not_a_known_db', :message => 'a_custom_message'
|
39
48
|
end
|
@@ -47,14 +56,19 @@ describe 'has_mongoDB' do
|
|
47
56
|
context 'when the mongo server cannot be reached' do
|
48
57
|
before(:each) { Mongo::Connection.should_receive(:new).any_number_of_times.and_raise(Mongo::ConnectionFailure) }
|
49
58
|
|
59
|
+
it_should_return_false('when the mongoDB server connection failed') { has_mongoDB_for 'test/unreachable_mongoDB_server' }
|
60
|
+
it_should_return_false('when the key is invalid' ) { has_mongoDB_for 'not_a_valid_key' }
|
61
|
+
|
50
62
|
it_should_raise_an_error('test/unreachable_mongoDB_server', :mongoDB_server_not_found, 'when the mongoDB server connection failed') {
|
51
63
|
has_mongoDB_for 'test/unreachable_mongoDB_server'
|
52
64
|
}
|
53
65
|
it_should_raise_an_error('not_a_valid_key', :missing_value, 'when the key is invalid') { has_mongoDB_for 'not_a_valid_key' }
|
54
|
-
it "
|
66
|
+
it "accepts a custom message for those 2 cases" do
|
55
67
|
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
56
|
-
has_mongoDB_for 'not_a_valid_key', :message => 'a_custom_message'
|
57
|
-
|
68
|
+
result = has_mongoDB_for 'not_a_valid_key', :message => 'a_custom_message'
|
69
|
+
result.should == false
|
70
|
+
result = has_mongoDB_for 'test/unreachable_mongoDB_server', :message => 'a_custom_message_2'
|
71
|
+
result.should == false
|
58
72
|
end
|
59
73
|
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
60
74
|
messages.should =~ %w(a_custom_message a_custom_message_2)
|
@@ -68,6 +82,8 @@ describe 'has_mongoDB' do
|
|
68
82
|
Mongo::Connection.should_receive(:new).and_return(conn)
|
69
83
|
end
|
70
84
|
|
85
|
+
it_should_return_true('when the mongoDB server responds and the database can be found') { has_mongoDB_for 'test/mongoDB' }
|
86
|
+
|
71
87
|
it_should_not_raise_an_error('when the mongoDB server responds and the database can be found') {
|
72
88
|
has_mongoDB_for 'test/mongoDB'
|
73
89
|
}
|
@@ -75,7 +91,7 @@ describe 'has_mongoDB' do
|
|
75
91
|
it_should_raise_an_error('test/unknown_mongoDB_db', :mongoDB_db_not_found,'when the database cannot be found on the mongoDB') {
|
76
92
|
has_mongoDB_for 'test/unknown_mongoDB_db'
|
77
93
|
}
|
78
|
-
it "
|
94
|
+
it "accepts a custom message for this case" do
|
79
95
|
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
80
96
|
has_mongoDB_for 'test/unknown_mongoDB_db', :message => 'a_custom_message'
|
81
97
|
end
|
@@ -83,7 +99,10 @@ describe 'has_mongoDB' do
|
|
83
99
|
messages.should =~ %w(a_custom_message)
|
84
100
|
end
|
85
101
|
|
86
|
-
|
102
|
+
it_should_return_true('when :ignore_database => false deactivates the db check') {
|
103
|
+
has_mongoDB_for 'test/unknown_mongoDB_db', :check_database => false
|
104
|
+
}
|
105
|
+
it_should_not_raise_an_error('when :ignore_database => false deactivates the db check') {
|
87
106
|
has_mongoDB_for 'test/unknown_mongoDB_db', :check_database => false
|
88
107
|
}
|
89
108
|
end
|
@@ -8,8 +8,11 @@ before(:all) do
|
|
8
8
|
FakeWeb.register_uri(:get, "http://localhost:3200" , :body => "I'm reachable!")
|
9
9
|
end
|
10
10
|
|
11
|
+
it_should_return_true( 'when the value is an url') { has_url_for 'test/url' }
|
11
12
|
it_should_not_raise_an_error('when the value is an url') { has_url_for 'test/url' }
|
12
13
|
it_should_not_raise_an_error("when the domain is 'localhost'") { has_url_for 'test/url_localhost' }
|
14
|
+
|
15
|
+
it_should_return_false( 'when the value is not an url') { has_url_for 'test/email' }
|
13
16
|
it_should_raise_an_error('test/email', :not_a_url, 'when the value is not an url') { has_url_for 'test/email' }
|
14
17
|
|
15
18
|
it_should_raise_an_error('not_a_valid_key', :missing_value ,'when the value is blank or absent') { has_url_for 'not_a_valid_key' }
|
@@ -21,7 +24,7 @@ end
|
|
21
24
|
has_url_for 'test/url_not_reachable', :reachable => true
|
22
25
|
}
|
23
26
|
|
24
|
-
it "
|
27
|
+
it "accepts a custom message for the 3 cases" do
|
25
28
|
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
26
29
|
has_url_for 'test/email', :message => 'a_custom_message'
|
27
30
|
has_url_for 'inconnu', :message => 'a_custom_message_2'
|
@@ -1,27 +1,27 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
2
|
|
3
3
|
describe 'value_of()' do
|
4
|
-
it '
|
4
|
+
it 'returns nil when the value is blank' do
|
5
5
|
FailFast(SIMPLE_FILE_PATH).check { @@val = value_of(:key_with_blank_value) }
|
6
6
|
@@val.should be_nil
|
7
7
|
end
|
8
8
|
|
9
|
-
it '
|
9
|
+
it 'returns nil when the key is unknown' do
|
10
10
|
FailFast(EMPTY_FILE_PATH).check { @@val = value_of(:anykey) }
|
11
11
|
@@val.should be_nil
|
12
12
|
end
|
13
|
-
it '
|
13
|
+
it 'returns the value when it is a leaf'do
|
14
14
|
FailFast(SIMPLE_FILE_PATH).check { @@val = value_of(:first_key) }
|
15
15
|
@@val.should == 'premier'
|
16
16
|
end
|
17
17
|
|
18
|
-
it '
|
18
|
+
it 'returns the values in a hash when the value is a tree' do
|
19
19
|
FailFast(SIMPLE_FILE_PATH).check { @@val = value_of(:test) }
|
20
20
|
@@val.should be_a(Hash)
|
21
21
|
@@val['mongoDB']['host'].should == 'localhost'
|
22
22
|
end
|
23
23
|
|
24
|
-
it '
|
24
|
+
it 'prepends the prefix to the key' do
|
25
25
|
FailFast(SIMPLE_FILE_PATH, 'test').check { @@val = value_of(:mongoDB) }
|
26
26
|
@@val['host'].should == 'localhost'
|
27
27
|
end
|
@@ -31,12 +31,16 @@ describe 'has_value_for()' do
|
|
31
31
|
before { capture_stdout }
|
32
32
|
after { restore_stdout }
|
33
33
|
|
34
|
-
it "
|
34
|
+
it "accepts a custom message for the 4 cases" do
|
35
35
|
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
36
|
-
has_value_for 'inconnu', /localhost/, :message => 'a_custom_message'
|
37
|
-
|
38
|
-
has_value_for :
|
39
|
-
|
36
|
+
result = has_value_for 'inconnu', /localhost/, :message => 'a_custom_message'
|
37
|
+
result.should == false
|
38
|
+
result = has_value_for :first_key, /nomatchhere/, :message => 'a_custom_message_2'
|
39
|
+
result.should == false
|
40
|
+
result = has_value_for :letter_x, :in => ('a'..'b'), :message => 'a_custom_message_3'
|
41
|
+
result.should == false
|
42
|
+
result = has_value_for :letter_x, :in => [6, "a"], :message => 'a_custom_message_4'
|
43
|
+
result.should == false
|
40
44
|
end
|
41
45
|
|
42
46
|
messages = FailFast.errors_db.errors_for(FailFast.errors_db.keys.first).collect { |e| e.message }
|
@@ -101,7 +105,7 @@ describe 'has_value_for()' do
|
|
101
105
|
end
|
102
106
|
|
103
107
|
context 'when a prefix is specified' do
|
104
|
-
it "
|
108
|
+
it "does not raise an error when a prefix is used" do
|
105
109
|
lambda {
|
106
110
|
FailFast(SIMPLE_FILE_PATH, 'test').check do
|
107
111
|
has_value_for 'mongoDB/host', /localhost/
|
@@ -5,25 +5,29 @@ describe 'is_on_path' do
|
|
5
5
|
|
6
6
|
context '' do
|
7
7
|
it_should_not_raise_an_error('when the app is on the path') {
|
8
|
-
is_on_path 'ls'
|
8
|
+
result = is_on_path 'ls'
|
9
|
+
result.should == true
|
9
10
|
}
|
10
11
|
|
11
12
|
it_should_raise_a_direct_error('ls987654321', :not_on_path, 'when the app is not on the path' ) {
|
12
|
-
is_on_path 'ls987654321'
|
13
|
+
result = is_on_path 'ls987654321'
|
14
|
+
result.should == false
|
13
15
|
}
|
14
16
|
end
|
15
17
|
|
16
18
|
context '_for' do
|
17
19
|
it_should_not_raise_an_error('when the app is on the path') {
|
18
|
-
is_on_path_for 'app_on_path'
|
20
|
+
result = is_on_path_for 'app_on_path'
|
21
|
+
result.should == true
|
19
22
|
}
|
20
23
|
|
21
24
|
it_should_raise_an_error('app_not_on_path', :not_on_path, 'when the app is not on the path' ) {
|
22
|
-
is_on_path_for 'app_not_on_path'
|
25
|
+
result = is_on_path_for 'app_not_on_path'
|
26
|
+
result.should == false
|
23
27
|
}
|
24
28
|
end
|
25
29
|
|
26
|
-
it "
|
30
|
+
it "accepts a custom message for the 3 cases" do
|
27
31
|
FailFast(SIMPLE_FILE_PATH).check_now.but_fail_later do
|
28
32
|
is_on_path 'ls987654321', :message => 'a_custom_message'
|
29
33
|
is_on_path_for 'INCONNU', :message => 'a_custom_message_2'
|
data/spec/spec_helper.rb
CHANGED
@@ -3,7 +3,7 @@ require 'fail_fast'
|
|
3
3
|
require 'spec'
|
4
4
|
require 'spec/autorun'
|
5
5
|
require 'fakeweb'
|
6
|
-
gem 'mongo', '1.0'
|
6
|
+
#gem 'mongo', '1.0'
|
7
7
|
require 'mongo'
|
8
8
|
|
9
9
|
SPEC_DIR = File.dirname(File.expand_path(__FILE__))
|
@@ -32,8 +32,43 @@ module DSLMacros
|
|
32
32
|
end
|
33
33
|
module ClassMethods
|
34
34
|
|
35
|
+
def it_should_return_true(msg, &block)
|
36
|
+
it "returns true #{msg}" do
|
37
|
+
capture_stdout
|
38
|
+
begin
|
39
|
+
FailFast(SIMPLE_FILE_PATH).check.but_fail_later do
|
40
|
+
raise "BUG : @@errorz should be empty \n#{errors.inspect}" unless errors.empty?
|
41
|
+
result = self.instance_eval(&block)
|
42
|
+
#TODO : BETTER ERROR REPORTING
|
43
|
+
result.should == true
|
44
|
+
end
|
45
|
+
rescue => e
|
46
|
+
raise e
|
47
|
+
end
|
48
|
+
restore_stdout
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
def it_should_return_false(msg, &block)
|
54
|
+
it "returns false #{msg}" do
|
55
|
+
capture_stdout
|
56
|
+
begin
|
57
|
+
FailFast(SIMPLE_FILE_PATH).check.but_fail_later do
|
58
|
+
raise "BUG : @@errorz should be empty \n#{errors.inspect}" unless errors.empty?
|
59
|
+
result = self.instance_eval(&block)
|
60
|
+
#TODO : BETTER ERROR REPORTING
|
61
|
+
result.should == false
|
62
|
+
end
|
63
|
+
rescue => e
|
64
|
+
raise e
|
65
|
+
end
|
66
|
+
restore_stdout
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
35
70
|
def it_should_not_raise_an_error(msg, &block)
|
36
|
-
it "
|
71
|
+
it "does not raise an error #{msg}" do
|
37
72
|
capture_stdout
|
38
73
|
begin
|
39
74
|
FailFast(SIMPLE_FILE_PATH).check do
|
@@ -52,7 +87,7 @@ module DSLMacros
|
|
52
87
|
end
|
53
88
|
|
54
89
|
def it_should_raise_an_error(key, kind, msg, &block)
|
55
|
-
it "
|
90
|
+
it "raises an error #{kind}-#{key}-#{msg}" do
|
56
91
|
capture_stdout
|
57
92
|
begin
|
58
93
|
FailFast(SIMPLE_FILE_PATH).check do
|
@@ -75,7 +110,7 @@ module DSLMacros
|
|
75
110
|
end
|
76
111
|
end
|
77
112
|
def it_should_raise_a_direct_error(value, kind, msg, &block)
|
78
|
-
it "
|
113
|
+
it "raises an error #{kind}-#{value}-#{msg}" do
|
79
114
|
capture_stdout
|
80
115
|
begin
|
81
116
|
FailFast(SIMPLE_FILE_PATH).check do
|