sbf-dm-validations 1.3.0.beta

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 (185) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +38 -0
  3. data/.rspec +1 -0
  4. data/.rubocop.yml +468 -0
  5. data/.travis.yml +51 -0
  6. data/Gemfile +60 -0
  7. data/LICENSE +21 -0
  8. data/README.rdoc +122 -0
  9. data/Rakefile +4 -0
  10. data/dm-validations.gemspec +20 -0
  11. data/lib/data_mapper/core.rb +1 -0
  12. data/lib/data_mapper/support/assertions.rb +1 -0
  13. data/lib/data_mapper/support/equalizer.rb +1 -0
  14. data/lib/data_mapper/support/ordered_set.rb +2 -0
  15. data/lib/data_mapper/validation/backward.rb +205 -0
  16. data/lib/data_mapper/validation/context.rb +57 -0
  17. data/lib/data_mapper/validation/contextual_rule_set.rb +210 -0
  18. data/lib/data_mapper/validation/exceptions.rb +7 -0
  19. data/lib/data_mapper/validation/inferred.rb +264 -0
  20. data/lib/data_mapper/validation/macros.rb +449 -0
  21. data/lib/data_mapper/validation/message_transformer.rb +111 -0
  22. data/lib/data_mapper/validation/model_extensions.rb +17 -0
  23. data/lib/data_mapper/validation/resource_extensions.rb +131 -0
  24. data/lib/data_mapper/validation/rule/absence.rb +31 -0
  25. data/lib/data_mapper/validation/rule/acceptance.rb +49 -0
  26. data/lib/data_mapper/validation/rule/block.rb +37 -0
  27. data/lib/data_mapper/validation/rule/confirmation.rb +47 -0
  28. data/lib/data_mapper/validation/rule/format/proc.rb +34 -0
  29. data/lib/data_mapper/validation/rule/format/regexp.rb +51 -0
  30. data/lib/data_mapper/validation/rule/format.rb +86 -0
  31. data/lib/data_mapper/validation/rule/formats/email.rb +54 -0
  32. data/lib/data_mapper/validation/rule/formats/url.rb +13 -0
  33. data/lib/data_mapper/validation/rule/length/equal.rb +48 -0
  34. data/lib/data_mapper/validation/rule/length/maximum.rb +50 -0
  35. data/lib/data_mapper/validation/rule/length/minimum.rb +50 -0
  36. data/lib/data_mapper/validation/rule/length/range.rb +50 -0
  37. data/lib/data_mapper/validation/rule/length.rb +96 -0
  38. data/lib/data_mapper/validation/rule/method.rb +42 -0
  39. data/lib/data_mapper/validation/rule/numericalness/equal.rb +34 -0
  40. data/lib/data_mapper/validation/rule/numericalness/greater_than.rb +34 -0
  41. data/lib/data_mapper/validation/rule/numericalness/greater_than_or_equal.rb +34 -0
  42. data/lib/data_mapper/validation/rule/numericalness/integer.rb +41 -0
  43. data/lib/data_mapper/validation/rule/numericalness/less_than.rb +34 -0
  44. data/lib/data_mapper/validation/rule/numericalness/less_than_or_equal.rb +34 -0
  45. data/lib/data_mapper/validation/rule/numericalness/not_equal.rb +34 -0
  46. data/lib/data_mapper/validation/rule/numericalness/numeric.rb +68 -0
  47. data/lib/data_mapper/validation/rule/numericalness.rb +91 -0
  48. data/lib/data_mapper/validation/rule/presence.rb +52 -0
  49. data/lib/data_mapper/validation/rule/primitive_type.rb +32 -0
  50. data/lib/data_mapper/validation/rule/uniqueness.rb +64 -0
  51. data/lib/data_mapper/validation/rule/within/range/bounded.rb +29 -0
  52. data/lib/data_mapper/validation/rule/within/range/unbounded_begin.rb +29 -0
  53. data/lib/data_mapper/validation/rule/within/range/unbounded_end.rb +29 -0
  54. data/lib/data_mapper/validation/rule/within/range.rb +55 -0
  55. data/lib/data_mapper/validation/rule/within/set.rb +45 -0
  56. data/lib/data_mapper/validation/rule/within.rb +32 -0
  57. data/lib/data_mapper/validation/rule.rb +232 -0
  58. data/lib/data_mapper/validation/rule_set.rb +157 -0
  59. data/lib/data_mapper/validation/support/object.rb +19 -0
  60. data/lib/data_mapper/validation/support/ordered_hash.rb +434 -0
  61. data/lib/data_mapper/validation/version.rb +5 -0
  62. data/lib/data_mapper/validation/violation.rb +136 -0
  63. data/lib/data_mapper/validation/violation_set.rb +115 -0
  64. data/lib/data_mapper/validation.rb +105 -0
  65. data/lib/dm-validations.rb +24 -0
  66. data/spec/data_mapper/validation/resource_extensions/save_spec.rb +56 -0
  67. data/spec/data_mapper/validation/resource_extensions/validate_spec.rb +103 -0
  68. data/spec/fixtures/barcode.rb +40 -0
  69. data/spec/fixtures/basketball_court.rb +58 -0
  70. data/spec/fixtures/basketball_player.rb +34 -0
  71. data/spec/fixtures/beta_tester_account.rb +33 -0
  72. data/spec/fixtures/bill_of_landing.rb +47 -0
  73. data/spec/fixtures/boat_dock.rb +26 -0
  74. data/spec/fixtures/city.rb +24 -0
  75. data/spec/fixtures/company.rb +93 -0
  76. data/spec/fixtures/corporate_world.rb +39 -0
  77. data/spec/fixtures/country.rb +24 -0
  78. data/spec/fixtures/ethernet_frame.rb +56 -0
  79. data/spec/fixtures/event.rb +44 -0
  80. data/spec/fixtures/g3_concert.rb +57 -0
  81. data/spec/fixtures/integer_dumped_as_string_property.rb +24 -0
  82. data/spec/fixtures/jabberwock.rb +27 -0
  83. data/spec/fixtures/kayak.rb +28 -0
  84. data/spec/fixtures/lernean_hydra.rb +39 -0
  85. data/spec/fixtures/llama_spaceship.rb +15 -0
  86. data/spec/fixtures/mathematical_function.rb +34 -0
  87. data/spec/fixtures/memory_object.rb +35 -0
  88. data/spec/fixtures/mittelschnauzer.rb +39 -0
  89. data/spec/fixtures/motor_launch.rb +21 -0
  90. data/spec/fixtures/multibyte.rb +16 -0
  91. data/spec/fixtures/page.rb +32 -0
  92. data/spec/fixtures/phone_number.rb +28 -0
  93. data/spec/fixtures/pirogue.rb +28 -0
  94. data/spec/fixtures/programming_language.rb +83 -0
  95. data/spec/fixtures/reservation.rb +38 -0
  96. data/spec/fixtures/scm_operation.rb +56 -0
  97. data/spec/fixtures/sms_message.rb +22 -0
  98. data/spec/fixtures/udp_packet.rb +49 -0
  99. data/spec/integration/absent_field_validator/absent_field_validator_spec.rb +90 -0
  100. data/spec/integration/absent_field_validator/spec_helper.rb +7 -0
  101. data/spec/integration/acceptance_validator/acceptance_validator_spec.rb +196 -0
  102. data/spec/integration/acceptance_validator/spec_helper.rb +7 -0
  103. data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +57 -0
  104. data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +49 -0
  105. data/spec/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +100 -0
  106. data/spec/integration/automatic_validation/inferred_float_property_validation_spec.rb +45 -0
  107. data/spec/integration/automatic_validation/inferred_format_validation_spec.rb +35 -0
  108. data/spec/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +70 -0
  109. data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +142 -0
  110. data/spec/integration/automatic_validation/inferred_presence_validation_spec.rb +45 -0
  111. data/spec/integration/automatic_validation/inferred_primitive_validation_spec.rb +22 -0
  112. data/spec/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +48 -0
  113. data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +35 -0
  114. data/spec/integration/automatic_validation/spec_helper.rb +57 -0
  115. data/spec/integration/block_validator/spec_helper.rb +5 -0
  116. data/spec/integration/conditional_validation/if_condition_spec.rb +63 -0
  117. data/spec/integration/conditional_validation/spec_helper.rb +5 -0
  118. data/spec/integration/confirmation_validator/confirmation_validator_spec.rb +76 -0
  119. data/spec/integration/confirmation_validator/spec_helper.rb +5 -0
  120. data/spec/integration/datamapper_models/association_validation_spec.rb +29 -0
  121. data/spec/integration/datamapper_models/inheritance_spec.rb +82 -0
  122. data/spec/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
  123. data/spec/integration/duplicated_validations/duplicated_validations_spec.rb +24 -0
  124. data/spec/integration/duplicated_validations/spec_helper.rb +5 -0
  125. data/spec/integration/format_validator/email_format_validator_spec.rb +139 -0
  126. data/spec/integration/format_validator/format_validator_spec.rb +64 -0
  127. data/spec/integration/format_validator/regexp_validator_spec.rb +33 -0
  128. data/spec/integration/format_validator/spec_helper.rb +5 -0
  129. data/spec/integration/format_validator/url_format_validator_spec.rb +91 -0
  130. data/spec/integration/length_validator/default_value_spec.rb +14 -0
  131. data/spec/integration/length_validator/equality_spec.rb +83 -0
  132. data/spec/integration/length_validator/error_message_spec.rb +22 -0
  133. data/spec/integration/length_validator/maximum_spec.rb +47 -0
  134. data/spec/integration/length_validator/minimum_spec.rb +54 -0
  135. data/spec/integration/length_validator/range_spec.rb +87 -0
  136. data/spec/integration/length_validator/spec_helper.rb +7 -0
  137. data/spec/integration/method_validator/method_validator_spec.rb +243 -0
  138. data/spec/integration/method_validator/spec_helper.rb +5 -0
  139. data/spec/integration/numeric_validator/equality_with_float_type_spec.rb +65 -0
  140. data/spec/integration/numeric_validator/equality_with_integer_type_spec.rb +41 -0
  141. data/spec/integration/numeric_validator/float_type_spec.rb +90 -0
  142. data/spec/integration/numeric_validator/gt_with_float_type_spec.rb +37 -0
  143. data/spec/integration/numeric_validator/gte_with_float_type_spec.rb +36 -0
  144. data/spec/integration/numeric_validator/integer_only_true_spec.rb +91 -0
  145. data/spec/integration/numeric_validator/integer_type_spec.rb +86 -0
  146. data/spec/integration/numeric_validator/lt_with_float_type_spec.rb +37 -0
  147. data/spec/integration/numeric_validator/lte_with_float_type_spec.rb +37 -0
  148. data/spec/integration/numeric_validator/spec_helper.rb +5 -0
  149. data/spec/integration/primitive_validator/primitive_validator_spec.rb +112 -0
  150. data/spec/integration/primitive_validator/spec_helper.rb +5 -0
  151. data/spec/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +118 -0
  152. data/spec/integration/required_field_validator/association_spec.rb +69 -0
  153. data/spec/integration/required_field_validator/boolean_type_value_spec.rb +164 -0
  154. data/spec/integration/required_field_validator/date_type_value_spec.rb +127 -0
  155. data/spec/integration/required_field_validator/datetime_type_value_spec.rb +127 -0
  156. data/spec/integration/required_field_validator/float_type_value_spec.rb +131 -0
  157. data/spec/integration/required_field_validator/integer_type_value_spec.rb +99 -0
  158. data/spec/integration/required_field_validator/plain_old_ruby_object_spec.rb +35 -0
  159. data/spec/integration/required_field_validator/shared_examples.rb +27 -0
  160. data/spec/integration/required_field_validator/spec_helper.rb +7 -0
  161. data/spec/integration/required_field_validator/string_type_value_spec.rb +167 -0
  162. data/spec/integration/required_field_validator/text_type_value_spec.rb +49 -0
  163. data/spec/integration/shared/default_validation_context.rb +13 -0
  164. data/spec/integration/shared/valid_and_invalid_model.rb +35 -0
  165. data/spec/integration/uniqueness_validator/spec_helper.rb +5 -0
  166. data/spec/integration/uniqueness_validator/uniqueness_validator_spec.rb +116 -0
  167. data/spec/integration/within_validator/spec_helper.rb +5 -0
  168. data/spec/integration/within_validator/within_validator_spec.rb +168 -0
  169. data/spec/public/resource_spec.rb +113 -0
  170. data/spec/spec_helper.rb +28 -0
  171. data/spec/unit/contextual_validators/emptiness_spec.rb +50 -0
  172. data/spec/unit/contextual_validators/execution_spec.rb +48 -0
  173. data/spec/unit/contextual_validators/spec_helper.rb +37 -0
  174. data/spec/unit/generic_validator/equality_operator_spec.rb +26 -0
  175. data/spec/unit/generic_validator/optional_spec.rb +54 -0
  176. data/spec/unit/validators/within_validator_spec.rb +23 -0
  177. data/spec/unit/violation_set/adding_spec.rb +54 -0
  178. data/spec/unit/violation_set/emptiness_spec.rb +38 -0
  179. data/spec/unit/violation_set/enumerable_spec.rb +32 -0
  180. data/spec/unit/violation_set/reading_spec.rb +35 -0
  181. data/spec/unit/violation_set/respond_to_spec.rb +15 -0
  182. data/tasks/spec.rake +21 -0
  183. data/tasks/yard.rake +9 -0
  184. data/tasks/yardstick.rake +19 -0
  185. metadata +245 -0
@@ -0,0 +1,90 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative 'spec_helper'
3
+
4
+ describe 'DataMapper::Validations::Fixtures::BasketballPlayer' do
5
+ before :all do
6
+ DataMapper::Validations::Fixtures::BasketballPlayer.auto_migrate!
7
+
8
+ @model = DataMapper::Validations::Fixtures::BasketballPlayer.new(:name => "Michael Jordan", :height => 198.1, :weight => 97.2)
9
+ end
10
+
11
+ describe "with height as float" do
12
+ before :all do
13
+ # no op in this case
14
+ end
15
+
16
+ it_behaves_like 'valid model'
17
+ end
18
+
19
+ describe "with height as integer" do
20
+ before :all do
21
+ @model.height = 198
22
+ end
23
+
24
+ it_behaves_like 'valid model'
25
+ end
26
+
27
+ describe "with height as string containing only integers" do
28
+ before :all do
29
+ @model.height = "198"
30
+ end
31
+
32
+ it_behaves_like 'valid model'
33
+ end
34
+
35
+ describe "with height as string containing a float" do
36
+ before :all do
37
+ @model.height = "198.1"
38
+ end
39
+
40
+ it_behaves_like 'valid model'
41
+ end
42
+
43
+ describe "with height as string containing a float that will be represented in scientific notation" do
44
+ before :all do
45
+ @model.height = '0.00004'
46
+ end
47
+
48
+ it_behaves_like 'valid model'
49
+ end
50
+
51
+ describe "with height as string containing random alphanumeric characters" do
52
+ before :all do
53
+ @height = 'height=198.1'
54
+ @model.height = "height=198.1"
55
+ end
56
+
57
+ it "it does not change the value" do
58
+ expect(@model.height).to eq @height
59
+ end
60
+
61
+ it_behaves_like 'invalid model'
62
+ end
63
+
64
+ describe "with height as string containing random punctuation characters" do
65
+ before :all do
66
+ @height = '$$ * $?'
67
+ @model.height = @height
68
+ end
69
+
70
+ it "it does not change the value" do
71
+ expect(@model.height).to eq @height
72
+ end
73
+
74
+ it_behaves_like 'invalid model'
75
+ end
76
+
77
+ describe "with nil height" do
78
+ before :all do
79
+ @model.height = nil
80
+ @model.valid?
81
+ end
82
+
83
+ # typecasting kicks in
84
+ it_behaves_like 'invalid model'
85
+
86
+ it "has a meaningful error message" do
87
+ expect(@model.errors.on(:height)).to eq [ 'Height must be a number' ]
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,37 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative 'spec_helper'
3
+
4
+ describe 'DataMapper::Validations::Fixtures::BasketballCourt' do
5
+ before :all do
6
+ DataMapper::Validations::Fixtures::BasketballCourt.auto_migrate!
7
+
8
+ @model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance
9
+ @model.valid?
10
+ end
11
+
12
+ it_behaves_like 'valid model'
13
+
14
+
15
+ describe "with three point line distance of 7.2" do
16
+ before :all do
17
+ @model.three_point_line_distance = 7.2
18
+ @model.valid?
19
+ end
20
+
21
+ it_behaves_like 'valid model'
22
+ end
23
+
24
+
25
+ describe "with three point line distance of 3.5" do
26
+ before :all do
27
+ @model.three_point_line_distance = 3.5
28
+ @model.valid?
29
+ end
30
+
31
+ it_behaves_like 'invalid model'
32
+
33
+ it "has a meaningful error message" do
34
+ expect(@model.errors.on(:three_point_line_distance)).to eq [ 'Three point line distance must be greater than 6.7' ]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,36 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative 'spec_helper'
3
+
4
+ describe 'DataMapper::Validations::Fixtures::BasketballCourt' do
5
+ before :all do
6
+ DataMapper::Validations::Fixtures::BasketballCourt.auto_migrate!
7
+
8
+ @model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance
9
+ @model.valid?
10
+ end
11
+
12
+ it_behaves_like 'valid model'
13
+
14
+
15
+ describe "with length of 15.0" do
16
+ before :all do
17
+ @model.length = 15.0
18
+ @model.valid?
19
+ end
20
+
21
+ it_behaves_like 'valid model'
22
+ end
23
+
24
+ describe 'with length of 14.0' do
25
+ before :all do
26
+ @model.length = 14.0
27
+ @model.valid?
28
+ end
29
+
30
+ it_behaves_like 'invalid model'
31
+
32
+ it "has a meaningful error message" do
33
+ expect(@model.errors.on(:length)).to eq [ 'Length must be greater than or equal to 15.0' ]
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,91 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative 'spec_helper'
3
+
4
+ describe 'Country' do
5
+ before do
6
+ Country.auto_migrate!
7
+
8
+ @country = Country.new(:name => "Italy", :area => "301318")
9
+ end
10
+
11
+ describe "with area as integer" do
12
+ before do
13
+ # no op in this case
14
+ end
15
+
16
+ it "is valid" do
17
+ expect(@country).to be_valid
18
+ end
19
+ end
20
+
21
+
22
+ describe "with area as integer" do
23
+ before do
24
+ @country.area = 1603
25
+ end
26
+
27
+ it "is valid" do
28
+ expect(@country).to be_valid
29
+ end
30
+ end
31
+
32
+
33
+ describe "with area as string containing only integers" do
34
+ before do
35
+ @country.area = "301318"
36
+ end
37
+
38
+ it "is valid" do
39
+ expect(@country).to be_valid
40
+ end
41
+ end
42
+
43
+
44
+ describe "with area as string containing a float" do
45
+ before do
46
+ @country.area = "301318.6"
47
+ end
48
+
49
+ it "IS valid" do
50
+ expect(@country).to be_valid
51
+ end
52
+ end
53
+
54
+
55
+ describe "with area as string containing random alphanumeric characters" do
56
+ before do
57
+ @country.area = "area=51"
58
+ end
59
+
60
+ it "IS NOT valid" do
61
+ expect(@country).not_to be_valid
62
+ end
63
+ end
64
+
65
+
66
+ describe "with area as string containing random punctuation characters" do
67
+ before do
68
+ @country.area = "$$ * $?"
69
+ end
70
+
71
+ it "IS NOT valid" do
72
+ expect(@country).not_to be_valid
73
+ end
74
+ end
75
+
76
+
77
+ describe "with unknown area" do
78
+ before do
79
+ @country.area = nil
80
+ end
81
+
82
+ it "is NOT valid" do
83
+ expect(@country).not_to be_valid
84
+ end
85
+
86
+ it "has a meaningful error message on for the property" do
87
+ @country.valid?
88
+ expect(@country.errors.on(:area)).to eq [ 'Please use integers to specify area' ]
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,86 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative 'spec_helper'
3
+
4
+ describe 'City' do
5
+ before do
6
+ City.auto_migrate!
7
+
8
+ @city = City.new(:name => "Tokyo", :founded_in => 1603)
9
+ end
10
+
11
+ describe "with foundation year as integer" do
12
+ before do
13
+ # no op in this case
14
+ end
15
+
16
+ it "is valid" do
17
+ expect(@city).to be_valid
18
+ end
19
+ end
20
+
21
+
22
+ describe "with foundation year as integer" do
23
+ before do
24
+ @city.founded_in = 1603
25
+ end
26
+
27
+ it "is valid" do
28
+ expect(@city).to be_valid
29
+ end
30
+ end
31
+
32
+
33
+ describe "with foundation year as string containing only integers" do
34
+ before do
35
+ @city.founded_in = "1603"
36
+ end
37
+
38
+ it "is valid" do
39
+ expect(@city).to be_valid
40
+ end
41
+ end
42
+
43
+
44
+ describe "with foundation year as string containing a float" do
45
+ before do
46
+ @city.founded_in = "1603.6"
47
+ end
48
+
49
+ it "is valid" do
50
+ expect(@city).to be_valid
51
+ end
52
+ end
53
+
54
+
55
+ describe "with foundation year as string that is not an integer or float" do
56
+ before do
57
+ @string = "founded-in=1603"
58
+
59
+ @city.founded_in = @string
60
+ end
61
+
62
+ it "is not altered" do
63
+ expect(@city.founded_in).to be(@string)
64
+ end
65
+
66
+ it "IS NOT valid" do
67
+ expect(@city).not_to be_valid
68
+ end
69
+ end
70
+
71
+
72
+ describe "with unknown foundation date" do
73
+ before do
74
+ @city.founded_in = nil
75
+ end
76
+
77
+ it "is NOT valid" do
78
+ expect(@city).not_to be_valid
79
+ end
80
+
81
+ it "has a meaningful error message on for the property" do
82
+ @city.valid?
83
+ expect(@city.errors.on(:founded_in)).to eq [ 'Foundation year must be an integer' ]
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,37 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative 'spec_helper'
3
+
4
+ describe 'DataMapper::Validations::Fixtures::BasketballCourt' do
5
+ before :all do
6
+ DataMapper::Validations::Fixtures::BasketballCourt.auto_migrate!
7
+
8
+ @model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance
9
+ @model.valid?
10
+ end
11
+
12
+ it_behaves_like 'valid model'
13
+
14
+
15
+ describe "with three point line distance of 6.8" do
16
+ before :all do
17
+ @model.three_point_line_distance = 6.8
18
+ @model.valid?
19
+ end
20
+
21
+ it_behaves_like 'valid model'
22
+ end
23
+
24
+
25
+ describe "with three point line distance of 10.0" do
26
+ before :all do
27
+ @model.three_point_line_distance = 10.0
28
+ @model.valid?
29
+ end
30
+
31
+ it_behaves_like 'invalid model'
32
+
33
+ it "has a meaningful error message" do
34
+ expect(@model.errors.on(:three_point_line_distance)).to eq [ 'Three point line distance must be less than 7.24' ]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative 'spec_helper'
3
+
4
+ describe 'DataMapper::Validations::Fixtures::BasketballCourt' do
5
+ before :all do
6
+ DataMapper::Validations::Fixtures::BasketballCourt.auto_migrate!
7
+
8
+ @model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance
9
+ @model.valid?
10
+ end
11
+
12
+ it_behaves_like 'valid model'
13
+
14
+
15
+ describe "with length of 15.24" do
16
+ before :all do
17
+ @model.length = 15.24
18
+ @model.valid?
19
+ end
20
+
21
+ it_behaves_like 'valid model'
22
+ end
23
+
24
+
25
+ describe "with length of 20.0" do
26
+ before :all do
27
+ @model.length = 20.0
28
+ @model.valid?
29
+ end
30
+
31
+ it_behaves_like 'invalid model'
32
+
33
+ it "has a meaningful error message" do
34
+ expect(@model.errors.on(:length)).to eq [ 'Length must be less than or equal to 15.24' ]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,5 @@
1
+ # make sure you check out spec/fixtures to see fixture models
2
+ # already written
3
+ #
4
+ # DataMapper developers feels strongly against foobars in the spec
5
+ # suite
@@ -0,0 +1,112 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative 'spec_helper'
3
+
4
+ describe 'DataMapper::Validations::Fixtures::MemoryObject' do
5
+ include DataMapper::Validations::Fixtures
6
+
7
+ before :all do
8
+ DataMapper::Validations::Fixtures::MemoryObject.auto_migrate!
9
+
10
+ @model = DataMapper::Validations::Fixtures::MemoryObject.new
11
+ end
12
+
13
+ describe "with color given as a string" do
14
+ before :all do
15
+ @model.color = "grey"
16
+ end
17
+
18
+ it "is valid" do
19
+ expect(@model).to be_valid
20
+ end
21
+ end
22
+
23
+
24
+ describe "with color given as an object" do
25
+ before :all do
26
+ # we have to go through the back door
27
+ # since writer= method does typecasting
28
+ # and Object is casted to String
29
+ @model.instance_variable_set(:@color, Object.new)
30
+ end
31
+
32
+ it "is NOT valid" do
33
+ expect(@model).not_to be_valid
34
+ end
35
+ end
36
+
37
+ describe "with stupid integer given as Integer" do
38
+ before :all do
39
+ @model.stupid_integer = 100
40
+ end
41
+
42
+ it "is valid" do
43
+ expect(@model).to be_valid
44
+ end
45
+ end
46
+
47
+ describe "with stupid integer given as Object" do
48
+ before :all do
49
+ @model.stupid_integer = Object.new
50
+ end
51
+
52
+ it "is NOT valid" do
53
+ expect(@model).not_to be_valid
54
+ end
55
+ end
56
+
57
+
58
+ describe "with mark flag set to true" do
59
+ before :all do
60
+ @model.marked = true
61
+ end
62
+
63
+ it "is valid" do
64
+ expect(@model).to be_valid
65
+ end
66
+ end
67
+
68
+
69
+ describe "with mark flag set to false" do
70
+ before :all do
71
+ @model.marked = false
72
+ end
73
+
74
+ it "is valid" do
75
+ expect(@model).to be_valid
76
+ end
77
+ end
78
+
79
+ describe "with mark flag set to an object" do
80
+ before :all do
81
+ # go through the back door to avoid typecasting
82
+ @model.instance_variable_set(:@marked, Object.new)
83
+ end
84
+
85
+ it "is NOT valid" do
86
+ expect(@model).not_to be_valid
87
+ end
88
+ end
89
+
90
+
91
+ describe "with color set to nil" do
92
+ before :all do
93
+ # go through the back door to avoid typecasting
94
+ @model.color = nil
95
+ end
96
+
97
+ it "is valid" do
98
+ expect(@model).to be_valid
99
+ end
100
+ end
101
+
102
+
103
+ describe "with mark flag set to nil" do
104
+ before :all do
105
+ @model.marked = nil
106
+ end
107
+
108
+ it "is valid" do
109
+ expect(@model).to be_valid
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,5 @@
1
+ # make sure you check out spec/fixtures to see fixture models
2
+ # already written
3
+ #
4
+ # DataMapper developers feels strongly against foobars in the spec
5
+ # suite
@@ -0,0 +1,118 @@
1
+ require_relative '../../spec_helper'
2
+
3
+ module PureRubyObjects
4
+ # notice that it is a pure Ruby class, not a DataMapper resource
5
+ class Country
6
+ #
7
+ # Behaviors
8
+ #
9
+
10
+ include DataMapper::Validations
11
+
12
+ #
13
+ # Validations
14
+ #
15
+
16
+ validates_presence_of :name, :when => [:default, :adding_to_encyclopedia]
17
+ validates_presence_of :population, :when => :adding_to_encyclopedia, :message => Proc.new { |record|
18
+ "population really needs to be specified when adding %s to encyclopedia" % [record.class.name]
19
+ }
20
+
21
+ validates_length_of :name, :in => (4..50)
22
+
23
+ #
24
+ # API
25
+ #
26
+
27
+ attr_accessor :name, :population
28
+
29
+ def initialize(name, population = nil)
30
+ @name = name
31
+ @population = population
32
+ end
33
+ end
34
+ end
35
+
36
+ describe 'PureRubyObjects::Country' do
37
+ before do
38
+ # Powerset says so
39
+ @model = PureRubyObjects::Country.new("Italy", 58_147_733)
40
+ end
41
+
42
+ describe "without name" do
43
+ before do
44
+ @model.name = nil
45
+ end
46
+
47
+ it_behaves_like 'object invalid in default context'
48
+
49
+ it "is not valid in encyclopedia context" do
50
+ expect(@model).not_to be_valid(:adding_to_encyclopedia)
51
+ expect(@model).not_to be_valid_for_adding_to_encyclopedia
52
+ end
53
+ end
54
+
55
+
56
+ describe "without name and without population information" do
57
+ before do
58
+ @model.name = nil
59
+ @model.population = nil
60
+ end
61
+
62
+ it_behaves_like 'object invalid in default context'
63
+
64
+ it "is not valid in encyclopedia context" do
65
+ expect(@model).not_to be_valid(:adding_to_encyclopedia)
66
+ expect(@model).not_to be_valid_for_adding_to_encyclopedia
67
+ end
68
+
69
+ it "has a meaningful error message" do
70
+ # trigger validation => have errors on the object
71
+ @model.valid_for_adding_to_encyclopedia?
72
+ expect(@model.errors.on(:population)).to eq ["population really needs to be specified when adding PureRubyObjects::Country to encyclopedia"]
73
+ end
74
+ end
75
+
76
+
77
+ describe "with name and without population information" do
78
+ before do
79
+ @model.population = nil
80
+ end
81
+
82
+ it_behaves_like 'object valid in default context'
83
+
84
+ it "is not valid in encyclopedia context" do
85
+ expect(@model).not_to be_valid(:adding_to_encyclopedia)
86
+ expect(@model).not_to be_valid_for_adding_to_encyclopedia
87
+ end
88
+ end
89
+
90
+
91
+ describe "with name and population information" do
92
+ it_behaves_like 'object valid in default context'
93
+
94
+ it "is valid in encyclopedia context" do
95
+ expect(@model).to be_valid(:adding_to_encyclopedia)
96
+ expect(@model).to be_valid_for_adding_to_encyclopedia
97
+ end
98
+ end
99
+
100
+
101
+ describe "with a 2 characters long name" do
102
+ before do
103
+ @model.name = "It"
104
+ @model.valid?
105
+ end
106
+
107
+ it_behaves_like 'object invalid in default context'
108
+
109
+ it "has errors on name" do
110
+ expect(@model.errors.on(:name)).not_to be_empty
111
+ end
112
+
113
+ it "is valid in encyclopedia context" do
114
+ expect(@model).to be_valid(:adding_to_encyclopedia)
115
+ expect(@model).to be_valid_for_adding_to_encyclopedia
116
+ end
117
+ end
118
+ end