veto 0.1.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -94
  3. data/lib/veto/blocks/block.rb +25 -0
  4. data/lib/veto/blocks/checker.rb +28 -0
  5. data/lib/veto/blocks/conditional_block.rb +26 -0
  6. data/lib/veto/blocks/validate_block.rb +18 -0
  7. data/lib/veto/blocks/validates_block.rb +51 -0
  8. data/lib/veto/blocks/with_options_block.rb +7 -0
  9. data/lib/veto/check_context_object.rb +10 -0
  10. data/lib/veto/checks/attribute_check.rb +19 -0
  11. data/lib/veto/checks/check.rb +7 -0
  12. data/lib/veto/checks/check_factory.rb +18 -0
  13. data/lib/veto/{validators/exact_length_validator.rb → checks/exact_length_check.rb} +5 -4
  14. data/lib/veto/{validators/format_validator.rb → checks/format_check.rb} +5 -4
  15. data/lib/veto/{validators/greater_than_validator.rb → checks/greater_than_check.rb} +2 -4
  16. data/lib/veto/{validators/greater_than_or_equal_to_validator.rb → checks/greater_than_or_equal_to_check.rb} +2 -4
  17. data/lib/veto/{validators/inclusion_validator.rb → checks/inclusion_check.rb} +2 -4
  18. data/lib/veto/{validators/integer_validator.rb → checks/integer_check.rb} +2 -4
  19. data/lib/veto/{validators/length_range_validator.rb → checks/length_range_check.rb} +2 -4
  20. data/lib/veto/{validators/less_than_validator.rb → checks/less_than_check.rb} +2 -4
  21. data/lib/veto/{validators/less_than_or_equal_to_validator.rb → checks/less_than_or_equal_to_check.rb} +2 -4
  22. data/lib/veto/{validators/max_length_validator.rb → checks/max_length_check.rb} +2 -4
  23. data/lib/veto/checks/method_check.rb +17 -0
  24. data/lib/veto/{validators/min_length_validator.rb → checks/min_length_check.rb} +2 -4
  25. data/lib/veto/{validators/not_null_validator.rb → checks/not_null_check.rb} +2 -4
  26. data/lib/veto/{validators/numeric_validator.rb → checks/numeric_check.rb} +2 -4
  27. data/lib/veto/{validators/presence_validator.rb → checks/presence_check.rb} +2 -4
  28. data/lib/veto/conditions/condition.rb +7 -0
  29. data/lib/veto/conditions/condition_factory.rb +18 -0
  30. data/lib/veto/conditions/conditions.rb +21 -0
  31. data/lib/veto/conditions/context_method_condition.rb +11 -0
  32. data/lib/veto/conditions/entity_eval_condition.rb +11 -0
  33. data/lib/veto/conditions/if_conditions.rb +8 -0
  34. data/lib/veto/conditions/if_unless_conditions.rb +21 -0
  35. data/lib/veto/conditions/passing_condition.rb +7 -0
  36. data/lib/veto/conditions/primative_condition.rb +11 -0
  37. data/lib/veto/conditions/proc_condition.rb +11 -0
  38. data/lib/veto/conditions/unless_conditions.rb +8 -0
  39. data/lib/veto/configuration.rb +38 -37
  40. data/lib/veto/errors.rb +27 -27
  41. data/lib/veto/exceptions.rb +13 -3
  42. data/lib/veto/model.rb +33 -35
  43. data/lib/veto/validator.rb +68 -169
  44. data/lib/veto/version.rb +1 -1
  45. data/lib/veto.rb +90 -49
  46. data/spec/blocks/block_spec.rb +31 -0
  47. data/spec/blocks/check_block_spec.rb +46 -0
  48. data/spec/blocks/conditional_block_spec.rb +36 -0
  49. data/spec/blocks/validate_block_spec.rb +18 -0
  50. data/spec/blocks/validates_block_spec.rb +22 -0
  51. data/spec/checks/exact_length_check_spec.rb +37 -0
  52. data/spec/checks/format_validator_spec.rb +37 -0
  53. data/spec/checks/greater_than_check_spec.rb +48 -0
  54. data/spec/checks/greater_than_or_equal_to_check_spec.rb +48 -0
  55. data/spec/checks/inclusion_check_spec.rb +37 -0
  56. data/spec/checks/integer_check_spec.rb +37 -0
  57. data/spec/checks/length_range_check_spec.rb +37 -0
  58. data/spec/checks/less_than_check_spec.rb +48 -0
  59. data/spec/checks/less_than_or_equal_to_check_spec.rb +48 -0
  60. data/spec/checks/max_length_check_spec.rb +48 -0
  61. data/spec/checks/method_check_spec.rb +13 -0
  62. data/spec/checks/min_length_check_spec.rb +48 -0
  63. data/spec/checks/not_null_check_spec.rb +37 -0
  64. data/spec/checks/numeric_check_spec.rb +37 -0
  65. data/spec/checks/presence_check_spec.rb +48 -0
  66. data/spec/conditions/condition_factory_spec.rb +31 -0
  67. data/spec/conditions/conditions_spec.rb +25 -0
  68. data/spec/conditions/context_method_condition_spec.rb +25 -0
  69. data/spec/conditions/entity_eval_condition_spec.rb +21 -0
  70. data/spec/conditions/if_conditions_spec.rb +65 -0
  71. data/spec/conditions/if_unless_conditions_spec.rb +33 -0
  72. data/spec/conditions/primative_condition_spec.rb +22 -0
  73. data/spec/conditions/proc_condition_spec.rb +25 -0
  74. data/spec/conditions/unless_conditions_spec.rb +65 -0
  75. data/spec/configuration/message_spec.rb +18 -23
  76. data/spec/spec_helper.rb +2 -1
  77. data/spec/validator_spec.rb +224 -115
  78. metadata +96 -61
  79. data/lib/veto/attribute_validator_factory.rb +0 -36
  80. data/lib/veto/builder.rb +0 -65
  81. data/lib/veto/conditions.rb +0 -23
  82. data/lib/veto/conditions_evaluator.rb +0 -30
  83. data/lib/veto/validators/abstract_validator.rb +0 -15
  84. data/lib/veto/validators/attribute_validator.rb +0 -22
  85. data/lib/veto/validators/custom_method_validator.rb +0 -19
  86. data/spec/attribute_validator_factory_spec.rb +0 -72
  87. data/spec/builder_spec.rb +0 -38
  88. data/spec/conditions_evaluator_spec.rb +0 -90
  89. data/spec/conditions_spec.rb +0 -16
  90. data/spec/configuration_spec.rb +0 -6
  91. data/spec/errors_spec.rb +0 -22
  92. data/spec/model_spec.rb +0 -67
  93. data/spec/system/validator_spec.rb +0 -530
  94. data/spec/validators/exact_length_validator_spec.rb +0 -37
  95. data/spec/validators/format_validator_spec.rb +0 -32
  96. data/spec/validators/inclusion_validator_spec.rb +0 -45
  97. data/spec/validators/integer_validator_spec.rb +0 -42
  98. data/spec/validators/length_range_validator_spec.rb +0 -55
  99. data/spec/validators/max_length_validator_spec.rb +0 -32
  100. data/spec/validators/min_length_validator_spec.rb +0 -32
  101. data/spec/validators/not_null_validator_spec.rb +0 -27
  102. data/spec/validators/numeric_validator_spec.rb +0 -42
  103. data/spec/validators/presence_validator_spec.rb +0 -47
  104. data/spec/veto_spec.rb +0 -24
@@ -0,0 +1,31 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::Block do
4
+ it 'can have children assigned' do
5
+ block = new_block
6
+ child = stub
7
+ block << child
8
+ block.children.must_equal([child])
9
+ end
10
+
11
+ it 'can :call each child' do
12
+ block = new_block
13
+
14
+ child1 = stub
15
+ child2 = stub
16
+
17
+ block << child1
18
+ block << child2
19
+
20
+ args = stub
21
+
22
+ child1.expects(:call).with(args).once
23
+ child2.expects(:call).with(args).once
24
+
25
+ block.call(args)
26
+ end
27
+
28
+ def new_block
29
+ Veto::Block.new
30
+ end
31
+ end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::ValidatesBlock::CheckBlock do
4
+ it 'gets attribute_name' do
5
+ block = new_block(:presence, :first_name, true)
6
+ block.attribute_name.must_equal(:first_name)
7
+ end
8
+
9
+ it 'gets type' do
10
+ block = new_block(:presence, :first_name, true)
11
+ block.type.must_equal(:presence)
12
+ end
13
+
14
+ it 'converts true value to hash' do
15
+ block = new_block(:presence, :first_name, true)
16
+ block.options.must_equal({})
17
+ end
18
+
19
+ it 'converts range value to hash' do
20
+ block = new_block(:presence, :first_name, 1..9)
21
+ block.options.must_equal(:in => 1..9)
22
+ end
23
+
24
+ it 'converts array value to hash' do
25
+ block = new_block(:presence, :first_name, ['cat', 'dog'])
26
+ block.options.must_equal(:in => ['cat', 'dog'])
27
+ end
28
+
29
+ it 'converts other value to hash' do
30
+ block = new_block(:presence, :first_name, 23)
31
+ block.options.must_equal(:with => 23)
32
+ end
33
+
34
+ it 'can build structure and assign check child' do
35
+ block = build_block(:presence, :first_name, true)
36
+ block.children.map{|c| c.class.name}.must_equal(["Veto::PresenceCheck"])
37
+ end
38
+
39
+ def new_block(*args)
40
+ Veto::ValidatesBlock::CheckBlock.new(*args)
41
+ end
42
+
43
+ def build_block(*args)
44
+ Veto::ValidatesBlock::CheckBlock.build(*args)
45
+ end
46
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::ConditionalBlock do
4
+ it 'exposes options with conditions removed' do
5
+ block = new_block(:if => 'blah', :opt1 => 'blahblah')
6
+ block.options.must_equal(:opt1 => 'blahblah')
7
+ end
8
+
9
+ context 'when conditions pass' do
10
+ it 'will :call children' do
11
+ block = new_block(:if => true, :opt1 => 'blahblah')
12
+ child = stub
13
+
14
+ block << child
15
+
16
+ child.expects(:call).once
17
+ block.call
18
+ end
19
+ end
20
+
21
+ context 'when conditions fail' do
22
+ it 'will not :call children' do
23
+ block = new_block(:if => false, :opt1 => 'blahblah')
24
+ child = stub
25
+
26
+ block << child
27
+
28
+ child.expects(:call).never
29
+ block.call
30
+ end
31
+ end
32
+
33
+ def new_block(*args)
34
+ Veto::ConditionalBlock.new(*args)
35
+ end
36
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::ValidateBlock do
4
+ it 'can build itself and assign check child' do
5
+ block = Veto::ValidateBlock.build(:good_method?, :if => true)
6
+ block.children.size.must_equal(1)
7
+ block.children[0].must_be_instance_of(Veto::MethodCheck)
8
+ end
9
+
10
+ it 'has method_name' do
11
+ block = new_block(:good_method?)
12
+ block.method_name.must_equal(:good_method?)
13
+ end
14
+
15
+ def new_block(*args)
16
+ Veto::ValidateBlock.new(*args)
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::ValidatesBlock do
4
+ it 'gets attribute_name' do
5
+ block = new_block(:first_name, :presence => true, :if => true)
6
+ block.attribute_name.must_equal(:first_name)
7
+ end
8
+
9
+ it 'can build nested check structure' do
10
+ block = build_block(:first_name, :presence => true, :format => /[a-z]/, :if => true)
11
+ block.children.size.must_equal(2)
12
+ block.children[0].must_be_instance_of(Veto::ValidatesBlock::CheckBlock)
13
+ end
14
+
15
+ def new_block(*args)
16
+ Veto::ValidatesBlock.new(*args)
17
+ end
18
+
19
+ def build_block(*args)
20
+ Veto::ValidatesBlock.build(*args)
21
+ end
22
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::ExactLengthCheck do
4
+ context 'when value is exact length' do
5
+ it 'assigns no errors' do
6
+ entity = stub(:name => 'abcde')
7
+ errors = new_errors
8
+ check = new_check(:name, :with => 5)
9
+
10
+ check.call(new_cto(entity, errors))
11
+ errors[:name].must_be_nil
12
+ end
13
+ end
14
+
15
+ context 'when value is not exact length' do
16
+ it 'assigns errors' do
17
+ entity = stub(:name => 'abcde')
18
+ errors = new_errors
19
+ check = new_check(:name, :with => 4)
20
+
21
+ check.call(new_cto(entity, errors))
22
+ errors[:name].must_equal(['is not 4 characters'])
23
+ end
24
+ end
25
+
26
+ def new_cto(entity, errors)
27
+ stub(:entity => entity, :errors => errors)
28
+ end
29
+
30
+ def new_check(*args)
31
+ Veto::ExactLengthCheck.new(*args)
32
+ end
33
+
34
+ def new_errors
35
+ Veto::Errors.new
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::FormatCheck do
4
+ context 'when value matches format' do
5
+ it 'assigns no errors' do
6
+ entity = stub(:name => 'abcde')
7
+ errors = new_errors
8
+ check = new_check(:name, :with => /^[a-z]+$/)
9
+
10
+ check.call(new_cto(entity, errors))
11
+ errors[:name].must_be_nil
12
+ end
13
+ end
14
+
15
+ context 'when value does not match format' do
16
+ it 'assigns errors' do
17
+ entity = stub(:name => 'abcde1')
18
+ errors = new_errors
19
+ check = new_check(:name, :with => /^[a-z]+$/)
20
+
21
+ check.call(new_cto(entity, errors))
22
+ errors[:name].must_equal(["is not valid"])
23
+ end
24
+ end
25
+
26
+ def new_cto(entity, errors)
27
+ stub(:entity => entity, :errors => errors)
28
+ end
29
+
30
+ def new_check(*args)
31
+ Veto::FormatCheck.new(*args)
32
+ end
33
+
34
+ def new_errors
35
+ Veto::Errors.new
36
+ end
37
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::GreaterThanCheck do
4
+ context 'when value is greater than' do
5
+ it 'assigns no errors' do
6
+ entity = stub(:name => 24)
7
+ errors = new_errors
8
+ check = new_check(:name, :with => 23)
9
+
10
+ check.call(new_cto(entity, errors))
11
+ errors[:name].must_be_nil
12
+ end
13
+ end
14
+
15
+ context 'when value is equal' do
16
+ it 'assigns no errors' do
17
+ entity = stub(:name => 23)
18
+ errors = new_errors
19
+ check = new_check(:name, :with => 23)
20
+
21
+ check.call(new_cto(entity, errors))
22
+ errors[:name].must_equal(["must be greater than 23"])
23
+ end
24
+ end
25
+
26
+ context 'when value is less than' do
27
+ it 'assigns no errors' do
28
+ entity = stub(:name => 22)
29
+ errors = new_errors
30
+ check = new_check(:name, :with => 23)
31
+
32
+ check.call(new_cto(entity, errors))
33
+ errors[:name].must_equal(["must be greater than 23"])
34
+ end
35
+ end
36
+
37
+ def new_cto(entity, errors)
38
+ stub(:entity => entity, :errors => errors)
39
+ end
40
+
41
+ def new_check(*args)
42
+ Veto::GreaterThanCheck.new(*args)
43
+ end
44
+
45
+ def new_errors
46
+ Veto::Errors.new
47
+ end
48
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::GreaterThanOrEqualToCheck do
4
+ context 'when value is equal' do
5
+ it 'assigns no errors' do
6
+ entity = stub(:name => 23)
7
+ errors = new_errors
8
+ check = new_check(:name, :with => 23)
9
+
10
+ check.call(new_cto(entity, errors))
11
+ errors[:name].must_be_nil
12
+ end
13
+ end
14
+
15
+ context 'when value is greater than' do
16
+ it 'assigns no errors' do
17
+ entity = stub(:name => 24)
18
+ errors = new_errors
19
+ check = new_check(:name, :with => 23)
20
+
21
+ check.call(new_cto(entity, errors))
22
+ errors[:name].must_be_nil
23
+ end
24
+ end
25
+
26
+ context 'when value is less than' do
27
+ it 'assigns no errors' do
28
+ entity = stub(:name => 22)
29
+ errors = new_errors
30
+ check = new_check(:name, :with => 23)
31
+
32
+ check.call(new_cto(entity, errors))
33
+ errors[:name].must_equal(["must be greater than or equal to 23"])
34
+ end
35
+ end
36
+
37
+ def new_cto(entity, errors)
38
+ stub(:entity => entity, :errors => errors)
39
+ end
40
+
41
+ def new_check(*args)
42
+ Veto::GreaterThanOrEqualToCheck.new(*args)
43
+ end
44
+
45
+ def new_errors
46
+ Veto::Errors.new
47
+ end
48
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::InclusionCheck do
4
+ context 'when value is included' do
5
+ it 'assigns no errors' do
6
+ entity = stub(:name => 'cat')
7
+ errors = new_errors
8
+ check = new_check(:name, :in => %w(cat dog mouse))
9
+
10
+ check.call(new_cto(entity, errors))
11
+ errors[:name].must_be_nil
12
+ end
13
+ end
14
+
15
+ context 'when value is not included' do
16
+ it 'assigns no errors' do
17
+ entity = stub(:name => 'cat')
18
+ errors = new_errors
19
+ check = new_check(:name, :in => %w(dog mouse))
20
+
21
+ check.call(new_cto(entity, errors))
22
+ errors[:name].must_equal(["is not in set: [\"dog\", \"mouse\"]"])
23
+ end
24
+ end
25
+
26
+ def new_cto(entity, errors)
27
+ stub(:entity => entity, :errors => errors)
28
+ end
29
+
30
+ def new_check(*args)
31
+ Veto::InclusionCheck.new(*args)
32
+ end
33
+
34
+ def new_errors
35
+ Veto::Errors.new
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::IntegerCheck do
4
+ context 'when value is an integer' do
5
+ it 'assigns no errors' do
6
+ entity = stub(:name => 23)
7
+ errors = new_errors
8
+ check = new_check(:name)
9
+
10
+ check.call(new_cto(entity, errors))
11
+ errors[:name].must_be_nil
12
+ end
13
+ end
14
+
15
+ context 'when value is not an integer' do
16
+ it 'assigns no errors' do
17
+ entity = stub(:name => 'abc')
18
+ errors = new_errors
19
+ check = new_check(:name)
20
+
21
+ check.call(new_cto(entity, errors))
22
+ errors[:name].must_equal(["is not a number"])
23
+ end
24
+ end
25
+
26
+ def new_cto(entity, errors)
27
+ stub(:entity => entity, :errors => errors)
28
+ end
29
+
30
+ def new_check(*args)
31
+ Veto::IntegerCheck.new(*args)
32
+ end
33
+
34
+ def new_errors
35
+ Veto::Errors.new
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::LengthRangeCheck do
4
+ context 'when value in length range' do
5
+ it 'assigns no errors' do
6
+ entity = stub(:name => 'abcdef')
7
+ errors = new_errors
8
+ check = new_check(:name, :in => 1..10)
9
+
10
+ check.call(new_cto(entity, errors))
11
+ errors[:name].must_be_nil
12
+ end
13
+ end
14
+
15
+ context 'when value not in length range' do
16
+ it 'assigns no errors' do
17
+ entity = stub(:name => 'abcdef')
18
+ errors = new_errors
19
+ check = new_check(:name, :in => 99..199)
20
+
21
+ check.call(new_cto(entity, errors))
22
+ errors[:name].must_equal(["is too short or too long"])
23
+ end
24
+ end
25
+
26
+ def new_cto(entity, errors)
27
+ stub(:entity => entity, :errors => errors)
28
+ end
29
+
30
+ def new_check(*args)
31
+ Veto::LengthRangeCheck.new(*args)
32
+ end
33
+
34
+ def new_errors
35
+ Veto::Errors.new
36
+ end
37
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::LessThanCheck do
4
+ context 'when value is less than' do
5
+ it 'assigns no errors' do
6
+ entity = stub(:name => 22)
7
+ errors = new_errors
8
+ check = new_check(:name, :with => 23)
9
+
10
+ check.call(new_cto(entity, errors))
11
+ errors[:name].must_be_nil
12
+ end
13
+ end
14
+
15
+ context 'when value is equal' do
16
+ it 'assigns no errors' do
17
+ entity = stub(:name => 23)
18
+ errors = new_errors
19
+ check = new_check(:name, :with => 23)
20
+
21
+ check.call(new_cto(entity, errors))
22
+ errors[:name].must_equal(["must be less than 23"])
23
+ end
24
+ end
25
+
26
+ context 'when value is greater than' do
27
+ it 'assigns no errors' do
28
+ entity = stub(:name => 24)
29
+ errors = new_errors
30
+ check = new_check(:name, :with => 23)
31
+
32
+ check.call(new_cto(entity, errors))
33
+ errors[:name].must_equal(["must be less than 23"])
34
+ end
35
+ end
36
+
37
+ def new_cto(entity, errors)
38
+ stub(:entity => entity, :errors => errors)
39
+ end
40
+
41
+ def new_check(*args)
42
+ Veto::LessThanCheck.new(*args)
43
+ end
44
+
45
+ def new_errors
46
+ Veto::Errors.new
47
+ end
48
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::LessThanOrEqualToCheck do
4
+ context 'when value is equal' do
5
+ it 'assigns no errors' do
6
+ entity = stub(:name => 23)
7
+ errors = new_errors
8
+ check = new_check(:name, :with => 23)
9
+
10
+ check.call(new_cto(entity, errors))
11
+ errors[:name].must_be_nil
12
+ end
13
+ end
14
+
15
+ context 'when value is less than' do
16
+ it 'assigns no errors' do
17
+ entity = stub(:name => 22)
18
+ errors = new_errors
19
+ check = new_check(:name, :with => 23)
20
+
21
+ check.call(new_cto(entity, errors))
22
+ errors[:name].must_be_nil
23
+ end
24
+ end
25
+
26
+ context 'when value is greater than' do
27
+ it 'assigns no errors' do
28
+ entity = stub(:name => 24)
29
+ errors = new_errors
30
+ check = new_check(:name, :with => 23)
31
+
32
+ check.call(new_cto(entity, errors))
33
+ errors[:name].must_equal(["must be less than or equal to 23"])
34
+ end
35
+ end
36
+
37
+ def new_cto(entity, errors)
38
+ stub(:entity => entity, :errors => errors)
39
+ end
40
+
41
+ def new_check(*args)
42
+ Veto::LessThanOrEqualToCheck.new(*args)
43
+ end
44
+
45
+ def new_errors
46
+ Veto::Errors.new
47
+ end
48
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::MaxLengthCheck do
4
+ context 'when value is less than max length' do
5
+ it 'assigns no errors' do
6
+ entity = stub(:name => 'abcdefgh')
7
+ errors = new_errors
8
+ check = new_check(:name, :with => 99)
9
+
10
+ check.call(new_cto(entity, errors))
11
+ errors[:name].must_be_nil
12
+ end
13
+ end
14
+
15
+ context 'when value equals max length' do
16
+ it 'assigns no errors' do
17
+ entity = stub(:name => 'abcde')
18
+ errors = new_errors
19
+ check = new_check(:name, :with => 5)
20
+
21
+ check.call(new_cto(entity, errors))
22
+ errors[:name].must_be_nil
23
+ end
24
+ end
25
+
26
+ context 'when value is greater than max length' do
27
+ it 'assigns no errors' do
28
+ entity = stub(:name => 'abcdefgh')
29
+ errors = new_errors
30
+ check = new_check(:name, :with => 5)
31
+
32
+ check.call(new_cto(entity, errors))
33
+ errors[:name].must_equal(["is longer than 5 characters"])
34
+ end
35
+ end
36
+
37
+ def new_cto(entity, errors)
38
+ stub(:entity => entity, :errors => errors)
39
+ end
40
+
41
+ def new_check(*args)
42
+ Veto::MaxLengthCheck.new(*args)
43
+ end
44
+
45
+ def new_errors
46
+ Veto::Errors.new
47
+ end
48
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::MethodCheck do
4
+ it 'delegates to method call on context' do
5
+ check = Veto::MethodCheck.new(:name)
6
+ entity = stub
7
+ context = stub(:name => true)
8
+ cco = stub(:entity => entity, :context => context)
9
+
10
+ context.expects(:name).with(entity).once
11
+ check.call(cco)
12
+ end
13
+ end
@@ -0,0 +1,48 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::MinLengthCheck do
4
+ context 'when value is greater than min length' do
5
+ it 'assigns no errors' do
6
+ entity = stub(:name => 'abcdefgh')
7
+ errors = new_errors
8
+ check = new_check(:name, :with => 5)
9
+
10
+ check.call(new_cto(entity, errors))
11
+ errors[:name].must_be_nil
12
+ end
13
+ end
14
+
15
+ context 'when value equals min length' do
16
+ it 'assigns no errors' do
17
+ entity = stub(:name => 'abcde')
18
+ errors = new_errors
19
+ check = new_check(:name, :with => 5)
20
+
21
+ check.call(new_cto(entity, errors))
22
+ errors[:name].must_be_nil
23
+ end
24
+ end
25
+
26
+ context 'when value is less than min length' do
27
+ it 'assigns no errors' do
28
+ entity = stub(:name => 'abcdefgh')
29
+ errors = new_errors
30
+ check = new_check(:name, :with => 99)
31
+
32
+ check.call(new_cto(entity, errors))
33
+ errors[:name].must_equal(["is shorter than 99 characters"])
34
+ end
35
+ end
36
+
37
+ def new_cto(entity, errors)
38
+ stub(:entity => entity, :errors => errors)
39
+ end
40
+
41
+ def new_check(*args)
42
+ Veto::MinLengthCheck.new(*args)
43
+ end
44
+
45
+ def new_errors
46
+ Veto::Errors.new
47
+ end
48
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+
3
+ describe Veto::NotNullCheck do
4
+ context 'when value is not null' do
5
+ it 'assigns no errors' do
6
+ entity = stub(:name => 'abcde')
7
+ errors = new_errors
8
+ check = new_check(:name)
9
+
10
+ check.call(new_cto(entity, errors))
11
+ errors[:name].must_be_nil
12
+ end
13
+ end
14
+
15
+ context 'when value is null' do
16
+ it 'assigns no errors' do
17
+ entity = stub(:name => nil)
18
+ errors = new_errors
19
+ check = new_check(:name)
20
+
21
+ check.call(new_cto(entity, errors))
22
+ errors[:name].must_equal(["is not present"])
23
+ end
24
+ end
25
+
26
+ def new_cto(entity, errors)
27
+ stub(:entity => entity, :errors => errors)
28
+ end
29
+
30
+ def new_check(*args)
31
+ Veto::NotNullCheck.new(*args)
32
+ end
33
+
34
+ def new_errors
35
+ Veto::Errors.new
36
+ end
37
+ end