dm-validations 0.9.11 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (159) hide show
  1. data/{History.txt → History.rdoc} +10 -3
  2. data/LICENSE +1 -0
  3. data/Manifest.txt +103 -33
  4. data/README.rdoc +172 -0
  5. data/Rakefile +4 -5
  6. data/lib/dm-validations.rb +73 -75
  7. data/lib/dm-validations/auto_validate.rb +98 -56
  8. data/lib/dm-validations/contextual_validators.rb +37 -14
  9. data/lib/dm-validations/exceptions.rb +3 -0
  10. data/lib/dm-validations/formats/url.rb +3 -1
  11. data/lib/dm-validations/support/context.rb +54 -0
  12. data/lib/dm-validations/validation_errors.rb +51 -27
  13. data/lib/dm-validations/{absent_field_validator.rb → validators/absent_field_validator.rb} +2 -8
  14. data/lib/dm-validations/{acceptance_validator.rb → validators/acceptance_validator.rb} +7 -7
  15. data/lib/dm-validations/{block_validator.rb → validators/block_validator.rb} +0 -0
  16. data/lib/dm-validations/{confirmation_validator.rb → validators/confirmation_validator.rb} +7 -7
  17. data/lib/dm-validations/{format_validator.rb → validators/format_validator.rb} +10 -16
  18. data/lib/dm-validations/{generic_validator.rb → validators/generic_validator.rb} +28 -6
  19. data/lib/dm-validations/validators/length_validator.rb +214 -0
  20. data/lib/dm-validations/validators/method_validator.rb +68 -0
  21. data/lib/dm-validations/validators/numeric_validator.rb +171 -0
  22. data/lib/dm-validations/{primitive_validator.rb → validators/primitive_validator.rb} +2 -7
  23. data/lib/dm-validations/{required_field_validator.rb → validators/required_field_validator.rb} +0 -6
  24. data/lib/dm-validations/{uniqueness_validator.rb → validators/uniqueness_validator.rb} +9 -20
  25. data/lib/dm-validations/{within_validator.rb → validators/within_validator.rb} +4 -4
  26. data/lib/dm-validations/version.rb +1 -1
  27. data/spec/fixtures/barcode.rb +32 -0
  28. data/spec/fixtures/basketball_court.rb +58 -0
  29. data/spec/fixtures/basketball_player.rb +37 -0
  30. data/spec/fixtures/beta_tester_account.rb +33 -0
  31. data/spec/fixtures/bill_of_landing.rb +42 -0
  32. data/spec/fixtures/boat_dock.rb +26 -0
  33. data/spec/fixtures/city.rb +25 -0
  34. data/spec/fixtures/company.rb +95 -0
  35. data/spec/fixtures/corporate_world.rb +47 -0
  36. data/spec/fixtures/country.rb +25 -0
  37. data/spec/fixtures/currency.rb +42 -0
  38. data/spec/fixtures/ethernet_frame.rb +56 -0
  39. data/spec/fixtures/event.rb +44 -0
  40. data/spec/fixtures/g3_concert.rb +57 -0
  41. data/spec/fixtures/jabberwock.rb +27 -0
  42. data/spec/fixtures/kayak.rb +28 -0
  43. data/spec/fixtures/lernean_hydra.rb +39 -0
  44. data/spec/fixtures/mathematical_function.rb +34 -0
  45. data/spec/fixtures/memory_object.rb +30 -0
  46. data/spec/fixtures/mittelschnauzer.rb +35 -0
  47. data/spec/fixtures/motor_launch.rb +21 -0
  48. data/spec/fixtures/page.rb +32 -0
  49. data/spec/fixtures/phone_number.rb +28 -0
  50. data/spec/fixtures/pirogue.rb +28 -0
  51. data/spec/fixtures/programming_language.rb +83 -0
  52. data/spec/fixtures/reservation.rb +38 -0
  53. data/spec/fixtures/scm_operation.rb +67 -0
  54. data/spec/fixtures/sms_message.rb +22 -0
  55. data/spec/fixtures/udp_packet.rb +49 -0
  56. data/spec/integration/absent_field_validator/absent_field_validator_spec.rb +86 -0
  57. data/spec/integration/absent_field_validator/spec_helper.rb +7 -0
  58. data/spec/integration/acceptance_validator/acceptance_validator_spec.rb +196 -0
  59. data/spec/integration/acceptance_validator/spec_helper.rb +7 -0
  60. data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +47 -0
  61. data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +41 -0
  62. data/spec/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +104 -0
  63. data/spec/integration/automatic_validation/inferred_float_property_validation_spec.rb +35 -0
  64. data/spec/integration/automatic_validation/inferred_format_validation_spec.rb +33 -0
  65. data/spec/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +73 -0
  66. data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +121 -0
  67. data/spec/integration/automatic_validation/inferred_presence_validation_spec.rb +41 -0
  68. data/spec/integration/automatic_validation/inferred_primitive_validation_spec.rb +20 -0
  69. data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +33 -0
  70. data/spec/integration/automatic_validation/spec_helper.rb +74 -0
  71. data/spec/integration/block_validator/block_validator_spec.rb +32 -0
  72. data/spec/integration/block_validator/spec_helper.rb +5 -0
  73. data/spec/integration/conditional_validation/if_condition_spec.rb +61 -0
  74. data/spec/integration/conditional_validation/spec_helper.rb +5 -0
  75. data/spec/integration/confirmation_validator/confirmation_validator_spec.rb +74 -0
  76. data/spec/integration/confirmation_validator/spec_helper.rb +5 -0
  77. data/spec/integration/datamapper_models/association_validation_spec.rb +23 -0
  78. data/spec/integration/datamapper_models/inheritance_spec.rb +78 -0
  79. data/spec/integration/duplicated_validations/duplicated_validations_spec.rb +22 -0
  80. data/spec/integration/duplicated_validations/spec_helper.rb +5 -0
  81. data/spec/integration/format_validator/email_format_validator_spec.rb +113 -0
  82. data/spec/integration/format_validator/format_validator_spec.rb +60 -0
  83. data/spec/integration/format_validator/regexp_validator_spec.rb +29 -0
  84. data/spec/integration/format_validator/spec_helper.rb +5 -0
  85. data/spec/integration/format_validator/url_format_validator_spec.rb +63 -0
  86. data/spec/integration/length_validator/default_value_spec.rb +12 -0
  87. data/spec/integration/length_validator/equality_spec.rb +79 -0
  88. data/spec/integration/length_validator/error_message_spec.rb +15 -18
  89. data/spec/integration/length_validator/maximum_spec.rb +40 -24
  90. data/spec/integration/length_validator/minimum_spec.rb +32 -21
  91. data/spec/integration/length_validator/range_spec.rb +50 -60
  92. data/spec/integration/length_validator/spec_helper.rb +7 -12
  93. data/spec/integration/method_validator/method_validator_spec.rb +239 -0
  94. data/spec/integration/method_validator/spec_helper.rb +5 -0
  95. data/spec/integration/numeric_validator/equality_with_float_type_spec.rb +61 -0
  96. data/spec/integration/numeric_validator/equality_with_integer_type_spec.rb +37 -0
  97. data/spec/integration/numeric_validator/float_type_spec.rb +42 -56
  98. data/spec/integration/numeric_validator/gt_with_float_type_spec.rb +35 -0
  99. data/spec/integration/numeric_validator/gte_with_float_type_spec.rb +35 -0
  100. data/spec/integration/numeric_validator/integer_only_true_spec.rb +3 -6
  101. data/spec/integration/numeric_validator/integer_type_spec.rb +8 -24
  102. data/spec/integration/numeric_validator/lt_with_float_type_spec.rb +35 -0
  103. data/spec/integration/numeric_validator/lte_with_float_type_spec.rb +35 -0
  104. data/spec/integration/numeric_validator/spec_helper.rb +5 -77
  105. data/spec/integration/primitive_validator/primitive_validator_spec.rb +90 -0
  106. data/spec/integration/primitive_validator/spec_helper.rb +5 -0
  107. data/spec/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +118 -0
  108. data/spec/integration/required_field_validator/association_spec.rb +5 -8
  109. data/spec/integration/required_field_validator/boolean_type_value_spec.rb +4 -7
  110. data/spec/integration/required_field_validator/date_type_value_spec.rb +3 -6
  111. data/spec/integration/required_field_validator/datetime_type_value_spec.rb +3 -6
  112. data/spec/integration/required_field_validator/float_type_value_spec.rb +3 -6
  113. data/spec/integration/required_field_validator/integer_type_value_spec.rb +2 -5
  114. data/spec/integration/required_field_validator/plain_old_ruby_object_spec.rb +5 -8
  115. data/spec/integration/required_field_validator/shared_examples.rb +1 -1
  116. data/spec/integration/required_field_validator/spec_helper.rb +6 -67
  117. data/spec/integration/required_field_validator/string_type_value_spec.rb +2 -5
  118. data/spec/integration/required_field_validator/text_type_value_spec.rb +2 -5
  119. data/spec/integration/shared/default_validation_context.rb +13 -0
  120. data/spec/integration/shared/valid_and_invalid_model.rb +27 -0
  121. data/spec/integration/uniqueness_validator/spec_helper.rb +5 -0
  122. data/spec/integration/uniqueness_validator/uniqueness_validator_spec.rb +114 -0
  123. data/spec/integration/within_validator/spec_helper.rb +5 -0
  124. data/spec/integration/within_validator/within_validator_spec.rb +164 -0
  125. data/spec/public/resource_spec.rb +68 -0
  126. data/spec/spec.opts +1 -0
  127. data/spec/spec_helper.rb +12 -4
  128. data/spec/unit/contextual_validators/emptiness_spec.rb +50 -0
  129. data/spec/unit/contextual_validators/execution_spec.rb +55 -0
  130. data/spec/unit/contextual_validators/spec_helper.rb +37 -0
  131. data/spec/unit/generic_validator/equality_operator_spec.rb +26 -0
  132. data/spec/unit/validation_errors/adding_spec.rb +54 -0
  133. data/spec/unit/validation_errors/emptiness_spec.rb +38 -0
  134. data/spec/unit/validation_errors/enumerable_spec.rb +32 -0
  135. data/tasks/install.rb +1 -1
  136. data/tasks/spec.rb +4 -4
  137. metadata +118 -55
  138. data/README.txt +0 -72
  139. data/lib/dm-validations/custom_validator.rb +0 -72
  140. data/lib/dm-validations/length_validator.rb +0 -113
  141. data/lib/dm-validations/method_validator.rb +0 -68
  142. data/lib/dm-validations/numeric_validator.rb +0 -83
  143. data/spec/integration/absent_field_validator_spec.rb +0 -36
  144. data/spec/integration/acceptance_validator_spec.rb +0 -87
  145. data/spec/integration/auto_validate_spec.rb +0 -342
  146. data/spec/integration/block_validator_spec.rb +0 -30
  147. data/spec/integration/confirmation_validator_spec.rb +0 -105
  148. data/spec/integration/contextual_validators_spec.rb +0 -27
  149. data/spec/integration/custom_validator_spec.rb +0 -9
  150. data/spec/integration/format_validator_spec.rb +0 -193
  151. data/spec/integration/generic_validator_spec.rb +0 -17
  152. data/spec/integration/length_validator/valid_objects_spec.rb +0 -13
  153. data/spec/integration/method_validator_spec.rb +0 -58
  154. data/spec/integration/numeric_validator_spec.rb +0 -253
  155. data/spec/integration/primitive_validator_spec.rb +0 -30
  156. data/spec/integration/uniqueness_validator_spec.rb +0 -97
  157. data/spec/integration/validation_errors_spec.rb +0 -18
  158. data/spec/integration/validation_spec.rb +0 -404
  159. data/spec/integration/within_validator_spec.rb +0 -79
@@ -1,12 +1,7 @@
1
- class MotorLaunch
2
- include DataMapper::Resource
3
- property :id, Integer, :serial => true
4
- property :name, String, :auto_validation => false
5
- end
6
-
7
- class BoatDock
8
- include DataMapper::Resource
9
- property :id, Integer, :serial => true
10
- property :name, String, :auto_validation => false, :default => "I'm a long string"
11
- validates_length :name, :min => 3
12
- end
1
+ # put validator specific fixture models and helpers here
2
+ #
3
+ # make sure you check out spec/fixtures to see fixture models
4
+ # already written
5
+ #
6
+ # DataMapper developers feels strongly against foobars in the spec
7
+ # suite
@@ -0,0 +1,239 @@
1
+ require 'spec_helper'
2
+ require 'integration/method_validator/spec_helper'
3
+
4
+ describe "a good fit for DSLs", :shared => true do
5
+ it "is a good fit for DSLs" do
6
+ @model.should be_valid_for_implementing_a_dsl
7
+ end
8
+
9
+ it "is totally fine for DSLs" do
10
+ @model.ensure_appropriate_for_dsls.should be_true
11
+ end
12
+ end
13
+
14
+ describe "a poor candidate for DSLs", :shared => true do
15
+ it "is a poor candidate for DSLs" do
16
+ @model.should_not be_valid_for_implementing_a_dsl
17
+ end
18
+
19
+ it "is unappropriate for DSLs" do
20
+ @model.ensure_appropriate_for_dsls.first.should be_false
21
+ end
22
+
23
+ it "has a (more or less) meaningful error message" do
24
+ @model.errors.on(:ensure_appropriate_for_dsls).should == [ 'may not be so good for domain specific languages' ]
25
+ end
26
+ end
27
+
28
+
29
+ describe "a good fit for game engine core", :shared => true do
30
+ it "is a good fit for game engine core" do
31
+ @model.should be_valid_for_implementing_a_game_engine_core
32
+ end
33
+
34
+ it "is appropriate for system programming" do
35
+ @model.ensure_appropriate_for_system_programming.should be_true
36
+ end
37
+ end
38
+
39
+ describe "a poor candidate for game engine core", :shared => true do
40
+ it "is a poor candidate for game engine core" do
41
+ @model.should_not be_valid_for_implementing_a_game_engine_core
42
+ end
43
+ end
44
+
45
+
46
+
47
+ describe "a good fit for kernel hacking", :shared => true do
48
+ it "is a good fit for kernel hacking" do
49
+ @model.should be_valid_for_hacking_on_the_kernel
50
+ end
51
+
52
+ it "is appropriate for system programming" do
53
+ @model.ensure_appropriate_for_system_programming.should be_true
54
+ end
55
+ end
56
+
57
+
58
+ describe "a poor candidate for kernel hacking", :shared => true do
59
+ it "is not a good fit for kernel hacking" do
60
+ @model.should_not be_valid_for_hacking_on_the_kernel
61
+ end
62
+ end
63
+
64
+ #
65
+ # Note that ProgrammingLanguage is not a DM resource,
66
+ # it is a plain old Ruby object (PORO), or simply put,
67
+ # just a "regular" Ruby class with a bunch of accessors.
68
+ #
69
+ # And yes, assumptions below are full of bullshit and
70
+ # author is a moron, and your favourite programming
71
+ # language is good for EVARYTHIN'!
72
+ #
73
+ #Please see spec_helper.rb next to this file
74
+ #
75
+
76
+ describe "C" do
77
+ before :all do
78
+ @model = ::DataMapper::Validate::Fixtures::ProgrammingLanguage.new(:name => "C",
79
+ :allows_system_calls => true,
80
+ :allows_manual_memory_management => true,
81
+ :approved_by_linus => true,
82
+ :compiler_excels_at_utilizing_cpu_cache => true,
83
+ :is_very_high_level => false,
84
+ :does_not_require_explicit_return_keyword => false,
85
+ :allows_operator_overload => false,
86
+ :allows_optional_parentheses => false
87
+ )
88
+ end
89
+
90
+ it_should_behave_like "a good fit for kernel hacking"
91
+
92
+ it_should_behave_like "a good fit for game engine core"
93
+
94
+ it_should_behave_like "a poor candidate for DSLs"
95
+ end
96
+
97
+
98
+
99
+ describe "C++" do
100
+ before :all do
101
+ @model = ::DataMapper::Validate::Fixtures::ProgrammingLanguage.new(:name => "C++",
102
+ :allows_system_calls => true,
103
+ :allows_manual_memory_management => true,
104
+ :approved_by_linus => false,
105
+ :compiler_excels_at_utilizing_cpu_cache => true,
106
+ :is_very_high_level => false,
107
+ :does_not_require_explicit_return_keyword => false,
108
+ :allows_operator_overload => true,
109
+ :allows_optional_parentheses => false
110
+ )
111
+ end
112
+
113
+ it_should_behave_like "a poor candidate for kernel hacking"
114
+
115
+ it_should_behave_like "a good fit for game engine core"
116
+
117
+ it_should_behave_like "a poor candidate for DSLs"
118
+
119
+ it "is not approved by Linus" do
120
+ @model.valid?(:hacking_on_the_kernel)
121
+ @model.errors.on(:ensure_approved_by_linus_himself).should_not be_blank
122
+ end
123
+ end
124
+
125
+
126
+ describe "Ruby" do
127
+ before :all do
128
+ @model = ::DataMapper::Validate::Fixtures::ProgrammingLanguage.new(:name => "Ruby",
129
+ # well, C extensions do not really count
130
+ :allows_system_calls => false,
131
+ :allows_manual_memory_management => false,
132
+ :approved_by_linus => false,
133
+ :compiler_excels_at_utilizing_cpu_cache => false,
134
+ :is_very_high_level => true,
135
+ :does_not_require_explicit_return_keyword => true,
136
+ :allows_operator_overload => true,
137
+ :allows_optional_parentheses => true
138
+ )
139
+ end
140
+
141
+ it_should_behave_like "a good fit for DSLs"
142
+
143
+ it_should_behave_like "a poor candidate for kernel hacking"
144
+
145
+ it_should_behave_like "a poor candidate for game engine core"
146
+
147
+ it "has a (more or less) meaningful error message" do
148
+ @model.valid?(:doing_system_programming)
149
+ @model.errors.on(:ensure_appropriate_for_system_programming).should == [ 'try something that is closer to the metal' ]
150
+ end
151
+ end
152
+
153
+
154
+ describe "Scala" do
155
+ before :all do
156
+ @model = ::DataMapper::Validate::Fixtures::ProgrammingLanguage.new(:name => "Scala",
157
+ :allows_system_calls => false,
158
+ :allows_manual_memory_management => false,
159
+ :approved_by_linus => false,
160
+ :compiler_excels_at_utilizing_cpu_cache => false,
161
+ :is_very_high_level => true,
162
+ :does_not_require_explicit_return_keyword => true,
163
+ :allows_operator_overload => true,
164
+ :allows_optional_parentheses => true
165
+ )
166
+ end
167
+
168
+ it_should_behave_like "a good fit for DSLs"
169
+
170
+ it_should_behave_like "a poor candidate for kernel hacking"
171
+
172
+ it_should_behave_like "a poor candidate for game engine core"
173
+
174
+ it "has a (more or less) meaningful error message" do
175
+ @model.valid?(:doing_system_programming)
176
+ @model.errors.on(:ensure_appropriate_for_system_programming).should == [ 'try something that is closer to the metal' ]
177
+ end
178
+ end
179
+
180
+
181
+
182
+ describe "Haskell" do
183
+ before :all do
184
+ @model = ::DataMapper::Validate::Fixtures::ProgrammingLanguage.new(:name => "Haskell",
185
+ :allows_system_calls => false,
186
+ :allows_manual_memory_management => false,
187
+ :approved_by_linus => false,
188
+ :compiler_excels_at_utilizing_cpu_cache => true,
189
+ :is_very_high_level => true,
190
+ :does_not_require_explicit_return_keyword => true,
191
+ # operators are not different from any other function
192
+ :allows_operator_overload => true,
193
+ # or, allows explicit parentheses? who cares, we
194
+ # are just trying to come up with a relatively
195
+ # non-stupid spec example
196
+ :allows_optional_parentheses => true
197
+ )
198
+ end
199
+
200
+ it_should_behave_like "a good fit for DSLs"
201
+
202
+ it_should_behave_like "a poor candidate for kernel hacking"
203
+
204
+ it_should_behave_like "a poor candidate for game engine core"
205
+
206
+ it "has a (more or less) meaningful error message" do
207
+ @model.valid?(:doing_system_programming)
208
+ @model.errors.on(:ensure_appropriate_for_system_programming).should == [ 'try something that is closer to the metal' ]
209
+ end
210
+ end
211
+
212
+
213
+ describe DataMapper::Validate::Fixtures::Event do
214
+ before :all do
215
+ @model = DataMapper::Validate::Fixtures::Event.new(:name => "Fools day 2009")
216
+ end
217
+
218
+ describe "with start time before end time" do
219
+ before :all do
220
+ @model.starts_at = DateTime.new(2009, 4, 1, 00, 00, 01)
221
+ @model.ends_at = DateTime.new(2009, 4, 1, 23, 59, 59)
222
+ end
223
+
224
+ it_should_behave_like "valid model"
225
+ end
226
+
227
+ describe "with start time after end time" do
228
+ before :all do
229
+ @model.starts_at = DateTime.new(2009, 4, 1, 23, 59, 59)
230
+ @model.ends_at = DateTime.new(2009, 4, 1, 00, 00, 01)
231
+ end
232
+
233
+ it_should_behave_like "invalid model"
234
+
235
+ it "uses custom error message for property starts_at" do
236
+ @model.errors.on(:starts_at).should == [ 'Start time cannot be after end time' ]
237
+ end
238
+ end
239
+ 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,61 @@
1
+ require 'spec_helper'
2
+ require 'integration/numeric_validator/spec_helper'
3
+
4
+ describe DataMapper::Validate::Fixtures::BasketballCourt do
5
+ describe "with valid set of attributes" do
6
+ before :all do
7
+ @model = DataMapper::Validate::Fixtures::BasketballCourt.valid_instance
8
+ @model.valid?
9
+ end
10
+
11
+ it_should_behave_like "valid model"
12
+ end
13
+
14
+
15
+ describe "with rim height of 3.05" do
16
+ before :all do
17
+ @model = DataMapper::Validate::Fixtures::BasketballCourt.valid_instance(:rim_height => 3.05)
18
+ @model.valid?
19
+ end
20
+
21
+ it_should_behave_like "valid model"
22
+ end
23
+
24
+
25
+ describe "with rim height of 3.30" do
26
+ before :all do
27
+ @model = DataMapper::Validate::Fixtures::BasketballCourt.valid_instance(:rim_height => 3.30)
28
+ @model.valid?
29
+ end
30
+
31
+ it_should_behave_like "invalid model"
32
+
33
+ it "has a meaningful error message" do
34
+ @model.errors.on(:rim_height).should == [ 'Rim height must be equal to 3.05' ]
35
+ end
36
+ end
37
+
38
+
39
+ describe "with free throw line distance of 4.57" do
40
+ before :all do
41
+ @model = DataMapper::Validate::Fixtures::BasketballCourt.valid_instance(:free_throw_line_distance => 4.57)
42
+ @model.valid?
43
+ end
44
+
45
+ it_should_behave_like "valid model"
46
+ end
47
+
48
+
49
+ describe "with free throw line distance of 3.10" do
50
+ before :all do
51
+ @model = DataMapper::Validate::Fixtures::BasketballCourt.valid_instance(:free_throw_line_distance => 3.10)
52
+ @model.valid?
53
+ end
54
+
55
+ it_should_behave_like "invalid model"
56
+
57
+ it "has a meaningful error message" do
58
+ @model.errors.on(:free_throw_line_distance).should == [ 'Free throw line distance must be equal to 4.57' ]
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,37 @@
1
+ require 'spec_helper'
2
+ require 'integration/numeric_validator/spec_helper'
3
+
4
+ describe DataMapper::Validate::Fixtures::LerneanHydra do
5
+ describe "with valid set of attributes" do
6
+ before :all do
7
+ @model = DataMapper::Validate::Fixtures::LerneanHydra.valid_instance
8
+ @model.valid?
9
+ end
10
+
11
+ it_should_behave_like "valid model"
12
+ end
13
+
14
+
15
+ describe "with 9 heads" do
16
+ before :all do
17
+ @model = DataMapper::Validate::Fixtures::LerneanHydra.valid_instance(:head_count => 9)
18
+ @model.valid?
19
+ end
20
+
21
+ it_should_behave_like "valid model"
22
+ end
23
+
24
+
25
+ describe "with only 3 heads" do
26
+ before :all do
27
+ @model = DataMapper::Validate::Fixtures::LerneanHydra.valid_instance(:head_count => 3)
28
+ @model.valid?
29
+ end
30
+
31
+ it_should_behave_like "invalid model"
32
+
33
+ it "has a meaningful error message" do
34
+ @model.errors.on(:head_count).should == [ 'Lernean hydra is said to have exactly 9 heads' ]
35
+ end
36
+ end
37
+ end
@@ -1,102 +1,88 @@
1
- require 'pathname'
2
- __dir__ = Pathname(__FILE__).dirname.expand_path
1
+ require 'spec_helper'
2
+ require 'integration/numeric_validator/spec_helper'
3
3
 
4
- require __dir__.parent.parent + 'spec_helper'
5
- require __dir__ + 'spec_helper'
6
-
7
- describe BasketballPlayer do
8
- before(:each) do
9
- @mj = BasketballPlayer.new(:name => "Michael Jordan", :height => 198.1, :weight => 97.2)
4
+ describe DataMapper::Validate::Fixtures::BasketballPlayer do
5
+ before :all do
6
+ @model = DataMapper::Validate::Fixtures::BasketballPlayer.new(:name => "Michael Jordan", :height => 198.1, :weight => 97.2)
10
7
  end
11
8
 
12
9
  describe "with height as float" do
13
- before(:each) do
10
+ before :all do
14
11
  # no op in this case
15
12
  end
16
13
 
17
- it "is valid" do
18
- @mj.should be_valid
19
- end
14
+ it_should_behave_like "valid model"
20
15
  end
21
16
 
22
-
23
17
  describe "with height as integer" do
24
- before(:each) do
25
- @mj.height = 198
18
+ before :all do
19
+ @model.height = 198
26
20
  end
27
21
 
28
- it "is valid" do
29
- @mj.should be_valid
30
- end
22
+ it_should_behave_like "valid model"
31
23
  end
32
24
 
33
-
34
25
  describe "with height as string containing only integers" do
35
- before(:each) do
36
- @mj.height = "198"
26
+ before :all do
27
+ @model.height = "198"
37
28
  end
38
29
 
39
- it "is valid" do
40
- @mj.should be_valid
41
- end
30
+ it_should_behave_like "valid model"
42
31
  end
43
32
 
44
-
45
33
  describe "with height as string containing a float" do
46
- before(:each) do
47
- @mj.height = "198.1"
34
+ before :all do
35
+ @model.height = "198.1"
48
36
  end
49
37
 
50
- it "is valid" do
51
- @mj.should be_valid
52
- end
38
+ it_should_behave_like "valid model"
53
39
  end
54
40
 
41
+ describe "with height as string containing a float that will be represented in scientific notation" do
42
+ before :all do
43
+ @model.height = '0.00004'
44
+ end
45
+
46
+ it_should_behave_like "valid model"
47
+ end
55
48
 
56
49
  describe "with height as string containing random alphanumeric characters" do
57
- before(:each) do
58
- @mj.height = "height=198.1"
50
+ before :all do
51
+ @height = 'height=198.1'
52
+ @model.height = "height=198.1"
59
53
  end
60
54
 
61
- it "is set to 0.0" do
62
- @mj.height.should == 0.0
55
+ it "is should not change the value" do
56
+ @model.height.should == @height
63
57
  end
64
58
 
65
- it "IS valid" do
66
- # float property is set to 0.0 here
67
- @mj.should be_valid
68
- end
59
+ it_should_behave_like "invalid model"
69
60
  end
70
61
 
71
-
72
62
  describe "with height as string containing random punctuation characters" do
73
- before(:each) do
74
- @mj.height = "$$ * $?"
63
+ before :all do
64
+ @height = '$$ * $?'
65
+ @model.height = @height
75
66
  end
76
67
 
77
- it "is set to 0.0" do
78
- @mj.height.should == 0.0
68
+ it "is should not change the value" do
69
+ @model.height.should == @height
79
70
  end
80
71
 
81
- it "IS valid" do
82
- # float property is set to 0.0 here
83
- @mj.should be_valid
84
- end
72
+ it_should_behave_like "invalid model"
85
73
  end
86
74
 
87
-
88
75
  describe "with nil height" do
89
- before(:each) do
90
- @mj.height = nil
76
+ before :all do
77
+ @model.height = nil
78
+ @model.valid?
91
79
  end
92
80
 
93
- it "is NOT valid" do
94
- @mj.should_not be_valid
95
- end
81
+ # typecasting kicks in
82
+ it_should_behave_like "invalid model"
96
83
 
97
- it "has a meaningful error message on for the property" do
98
- @mj.valid?
99
- @mj.errors.on(:height).should include("Height must be a number")
84
+ it "has a meaningful error message" do
85
+ @model.errors.on(:height).should == [ 'Height must be a number' ]
100
86
  end
101
87
  end
102
88
  end