ardm-validations 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +35 -0
- data/.travis.yml +11 -0
- data/Gemfile +51 -0
- data/LICENSE +21 -0
- data/README.rdoc +122 -0
- data/Rakefile +4 -0
- data/ardm-validations.gemspec +28 -0
- data/lib/ardm-validations.rb +1 -0
- data/lib/dm-validations.rb +169 -0
- data/lib/dm-validations/auto_validate.rb +252 -0
- data/lib/dm-validations/context.rb +66 -0
- data/lib/dm-validations/contextual_validators.rb +220 -0
- data/lib/dm-validations/exceptions.rb +5 -0
- data/lib/dm-validations/formats/email.rb +65 -0
- data/lib/dm-validations/formats/url.rb +27 -0
- data/lib/dm-validations/support/object.rb +18 -0
- data/lib/dm-validations/support/ordered_hash.rb +434 -0
- data/lib/dm-validations/validation_errors.rb +137 -0
- data/lib/dm-validations/validators/absent_field_validator.rb +58 -0
- data/lib/dm-validations/validators/acceptance_validator.rb +79 -0
- data/lib/dm-validations/validators/block_validator.rb +61 -0
- data/lib/dm-validations/validators/confirmation_validator.rb +92 -0
- data/lib/dm-validations/validators/format_validator.rb +124 -0
- data/lib/dm-validations/validators/generic_validator.rb +184 -0
- data/lib/dm-validations/validators/length_validator.rb +249 -0
- data/lib/dm-validations/validators/method_validator.rb +64 -0
- data/lib/dm-validations/validators/numeric_validator.rb +182 -0
- data/lib/dm-validations/validators/primitive_validator.rb +58 -0
- data/lib/dm-validations/validators/required_field_validator.rb +83 -0
- data/lib/dm-validations/validators/uniqueness_validator.rb +67 -0
- data/lib/dm-validations/validators/within_validator.rb +74 -0
- data/lib/dm-validations/version.rb +5 -0
- data/spec/fixtures/barcode.rb +40 -0
- data/spec/fixtures/basketball_court.rb +58 -0
- data/spec/fixtures/basketball_player.rb +34 -0
- data/spec/fixtures/beta_tester_account.rb +33 -0
- data/spec/fixtures/bill_of_landing.rb +47 -0
- data/spec/fixtures/boat_dock.rb +26 -0
- data/spec/fixtures/city.rb +24 -0
- data/spec/fixtures/company.rb +93 -0
- data/spec/fixtures/corporate_world.rb +39 -0
- data/spec/fixtures/country.rb +24 -0
- data/spec/fixtures/ethernet_frame.rb +56 -0
- data/spec/fixtures/event.rb +44 -0
- data/spec/fixtures/g3_concert.rb +57 -0
- data/spec/fixtures/jabberwock.rb +27 -0
- data/spec/fixtures/kayak.rb +28 -0
- data/spec/fixtures/lernean_hydra.rb +39 -0
- data/spec/fixtures/llama_spaceship.rb +15 -0
- data/spec/fixtures/mathematical_function.rb +34 -0
- data/spec/fixtures/memory_object.rb +30 -0
- data/spec/fixtures/mittelschnauzer.rb +39 -0
- data/spec/fixtures/motor_launch.rb +21 -0
- data/spec/fixtures/multibyte.rb +16 -0
- data/spec/fixtures/page.rb +32 -0
- data/spec/fixtures/phone_number.rb +28 -0
- data/spec/fixtures/pirogue.rb +28 -0
- data/spec/fixtures/programming_language.rb +83 -0
- data/spec/fixtures/reservation.rb +38 -0
- data/spec/fixtures/scm_operation.rb +56 -0
- data/spec/fixtures/sms_message.rb +22 -0
- data/spec/fixtures/udp_packet.rb +49 -0
- data/spec/integration/absent_field_validator/absent_field_validator_spec.rb +90 -0
- data/spec/integration/absent_field_validator/spec_helper.rb +7 -0
- data/spec/integration/acceptance_validator/acceptance_validator_spec.rb +196 -0
- data/spec/integration/acceptance_validator/spec_helper.rb +7 -0
- data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +57 -0
- data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +49 -0
- data/spec/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +100 -0
- data/spec/integration/automatic_validation/inferred_float_property_validation_spec.rb +45 -0
- data/spec/integration/automatic_validation/inferred_format_validation_spec.rb +35 -0
- data/spec/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +70 -0
- data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +142 -0
- data/spec/integration/automatic_validation/inferred_presence_validation_spec.rb +45 -0
- data/spec/integration/automatic_validation/inferred_primitive_validation_spec.rb +22 -0
- data/spec/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +52 -0
- data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +39 -0
- data/spec/integration/automatic_validation/spec_helper.rb +57 -0
- data/spec/integration/block_validator/block_validator_spec.rb +32 -0
- data/spec/integration/block_validator/spec_helper.rb +5 -0
- data/spec/integration/conditional_validation/if_condition_spec.rb +63 -0
- data/spec/integration/conditional_validation/spec_helper.rb +5 -0
- data/spec/integration/confirmation_validator/confirmation_validator_spec.rb +76 -0
- data/spec/integration/confirmation_validator/spec_helper.rb +5 -0
- data/spec/integration/datamapper_models/association_validation_spec.rb +29 -0
- data/spec/integration/datamapper_models/inheritance_spec.rb +82 -0
- data/spec/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
- data/spec/integration/duplicated_validations/duplicated_validations_spec.rb +24 -0
- data/spec/integration/duplicated_validations/spec_helper.rb +5 -0
- data/spec/integration/format_validator/email_format_validator_spec.rb +139 -0
- data/spec/integration/format_validator/format_validator_spec.rb +64 -0
- data/spec/integration/format_validator/regexp_validator_spec.rb +33 -0
- data/spec/integration/format_validator/spec_helper.rb +5 -0
- data/spec/integration/format_validator/url_format_validator_spec.rb +93 -0
- data/spec/integration/length_validator/default_value_spec.rb +14 -0
- data/spec/integration/length_validator/equality_spec.rb +87 -0
- data/spec/integration/length_validator/error_message_spec.rb +22 -0
- data/spec/integration/length_validator/maximum_spec.rb +49 -0
- data/spec/integration/length_validator/minimum_spec.rb +54 -0
- data/spec/integration/length_validator/range_spec.rb +87 -0
- data/spec/integration/length_validator/spec_helper.rb +7 -0
- data/spec/integration/method_validator/method_validator_spec.rb +241 -0
- data/spec/integration/method_validator/spec_helper.rb +5 -0
- data/spec/integration/numeric_validator/equality_with_float_type_spec.rb +65 -0
- data/spec/integration/numeric_validator/equality_with_integer_type_spec.rb +41 -0
- data/spec/integration/numeric_validator/float_type_spec.rb +90 -0
- data/spec/integration/numeric_validator/gt_with_float_type_spec.rb +37 -0
- data/spec/integration/numeric_validator/gte_with_float_type_spec.rb +37 -0
- data/spec/integration/numeric_validator/integer_only_true_spec.rb +91 -0
- data/spec/integration/numeric_validator/integer_type_spec.rb +86 -0
- data/spec/integration/numeric_validator/lt_with_float_type_spec.rb +37 -0
- data/spec/integration/numeric_validator/lte_with_float_type_spec.rb +37 -0
- data/spec/integration/numeric_validator/spec_helper.rb +5 -0
- data/spec/integration/primitive_validator/primitive_validator_spec.rb +92 -0
- data/spec/integration/primitive_validator/spec_helper.rb +5 -0
- data/spec/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +118 -0
- data/spec/integration/required_field_validator/association_spec.rb +72 -0
- data/spec/integration/required_field_validator/boolean_type_value_spec.rb +155 -0
- data/spec/integration/required_field_validator/date_type_value_spec.rb +127 -0
- data/spec/integration/required_field_validator/datetime_type_value_spec.rb +127 -0
- data/spec/integration/required_field_validator/float_type_value_spec.rb +131 -0
- data/spec/integration/required_field_validator/integer_type_value_spec.rb +99 -0
- data/spec/integration/required_field_validator/plain_old_ruby_object_spec.rb +35 -0
- data/spec/integration/required_field_validator/shared_examples.rb +26 -0
- data/spec/integration/required_field_validator/spec_helper.rb +7 -0
- data/spec/integration/required_field_validator/string_type_value_spec.rb +167 -0
- data/spec/integration/required_field_validator/text_type_value_spec.rb +49 -0
- data/spec/integration/shared/default_validation_context.rb +13 -0
- data/spec/integration/shared/valid_and_invalid_model.rb +35 -0
- data/spec/integration/uniqueness_validator/spec_helper.rb +5 -0
- data/spec/integration/uniqueness_validator/uniqueness_validator_spec.rb +116 -0
- data/spec/integration/within_validator/spec_helper.rb +5 -0
- data/spec/integration/within_validator/within_validator_spec.rb +168 -0
- data/spec/public/resource_spec.rb +105 -0
- data/spec/rcov.opts +6 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +29 -0
- data/spec/unit/contextual_validators/emptiness_spec.rb +50 -0
- data/spec/unit/contextual_validators/execution_spec.rb +48 -0
- data/spec/unit/contextual_validators/spec_helper.rb +37 -0
- data/spec/unit/generic_validator/equality_operator_spec.rb +26 -0
- data/spec/unit/generic_validator/optional_spec.rb +54 -0
- data/spec/unit/validation_errors/adding_spec.rb +54 -0
- data/spec/unit/validation_errors/emptiness_spec.rb +38 -0
- data/spec/unit/validation_errors/enumerable_spec.rb +32 -0
- data/spec/unit/validation_errors/reading_spec.rb +35 -0
- data/spec/unit/validation_errors/respond_to_spec.rb +15 -0
- data/spec/unit/validators/within_validator_spec.rb +23 -0
- data/tasks/spec.rake +38 -0
- data/tasks/yard.rake +9 -0
- data/tasks/yardstick.rake +19 -0
- metadata +256 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/automatic_validation/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'SailBoat' do
|
|
5
|
+
before :all do
|
|
6
|
+
SailBoat.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = SailBoat.new(:id => 1)
|
|
9
|
+
@model.name = 'Float'
|
|
10
|
+
@model.should be_valid_for_presence_test
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "without name" do
|
|
14
|
+
before :all do
|
|
15
|
+
@model.name = nil
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# has validates_is_present for name thanks to :required => true
|
|
19
|
+
it "is invalid" do
|
|
20
|
+
@model.should_not be_valid_for_presence_test
|
|
21
|
+
@model.errors.on(:name).should == [ 'Name must not be blank' ]
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
describe 'SailBoat' do
|
|
29
|
+
before :all do
|
|
30
|
+
SailBoat.auto_migrate!
|
|
31
|
+
|
|
32
|
+
@model = SailBoat.new(:id => 1)
|
|
33
|
+
@model.name = 'Float'
|
|
34
|
+
@model.should be_valid_for_presence_test
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "with a name" do
|
|
38
|
+
before :all do
|
|
39
|
+
# no op
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# has validates_is_present for name thanks to :required => true
|
|
43
|
+
it_should_behave_like "valid model"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/automatic_validation/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'SailBoat' do
|
|
5
|
+
before :all do
|
|
6
|
+
SailBoat.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = SailBoat.new(:id => 1)
|
|
9
|
+
@model.should be_valid_for_primitive_test
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "with invlid value assigned to primitive column" do
|
|
13
|
+
before :all do
|
|
14
|
+
@model.build_date = 'ABC'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "is invalid" do
|
|
18
|
+
@model.should_not be_valid_for_primitive_test
|
|
19
|
+
@model.errors.on(:build_date).should == [ 'Build date must be of type Date' ]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/automatic_validation/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'uniqueness' do
|
|
5
|
+
describe 'single column' do
|
|
6
|
+
before :all do
|
|
7
|
+
@klass = Class.new do
|
|
8
|
+
include DataMapper::Resource
|
|
9
|
+
|
|
10
|
+
def self.name
|
|
11
|
+
'UniqueEventsSingle'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
property :id, Integer, :key => true
|
|
15
|
+
property :start_year, Integer, :unique => true
|
|
16
|
+
end
|
|
17
|
+
@klass.auto_migrate!
|
|
18
|
+
|
|
19
|
+
@existing = @klass.create(:id => 1, :start_year => 2008)
|
|
20
|
+
@new = @klass.new(:id => 2, :start_year => 2008)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'validates' do
|
|
24
|
+
@new.should_not be_valid
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe 'multiple columns' do
|
|
29
|
+
before :all do
|
|
30
|
+
@klass = Class.new do
|
|
31
|
+
include DataMapper::Resource
|
|
32
|
+
|
|
33
|
+
def self.name
|
|
34
|
+
'UniqueEventsMultiple'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
property :id, Integer, :key => true
|
|
38
|
+
property :start_year, Integer, :unique => :years
|
|
39
|
+
property :stop_year, Integer, :unique => :years
|
|
40
|
+
end
|
|
41
|
+
@klass.auto_migrate!
|
|
42
|
+
|
|
43
|
+
@new = @klass.new(:id => 1, :start_year => 2008, :stop_year => 2009)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'validates uniquness' do
|
|
47
|
+
lambda {
|
|
48
|
+
@new.should_not be_valid
|
|
49
|
+
}.should raise_error(ArgumentError)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/automatic_validation/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'A model with a :set & :default options on a property' do
|
|
5
|
+
before :all do
|
|
6
|
+
class ::LimitedBoat
|
|
7
|
+
include DataMapper::Resource
|
|
8
|
+
property :id, DataMapper::Property::Serial
|
|
9
|
+
property :limited, String, :set => %w[ foo bar bang ], :default => 'foo'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
DataMapper.finalize
|
|
13
|
+
|
|
14
|
+
if DataMapper.respond_to?(:auto_migrate!)
|
|
15
|
+
DataMapper.auto_migrate!
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe "without value on that property" do
|
|
20
|
+
before :all do
|
|
21
|
+
@model = LimitedBoat.new
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# default value is respected
|
|
25
|
+
it_should_behave_like "valid model"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
describe "without value on that property that is not in allowed range/set" do
|
|
29
|
+
before :all do
|
|
30
|
+
@model = LimitedBoat.new(:limited => "blah")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it_should_behave_like "invalid model"
|
|
34
|
+
|
|
35
|
+
it "has a meaningful error message" do
|
|
36
|
+
@model.errors.on(:limited).should == [ 'Limited must be one of foo, bar, bang' ]
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
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
|
|
8
|
+
|
|
9
|
+
# TODO: one day we need to get rid of this remaining foobarness
|
|
10
|
+
# and use a few more realistic models with ParanoidBoolean and all
|
|
11
|
+
# that
|
|
12
|
+
|
|
13
|
+
class SailBoat
|
|
14
|
+
include DataMapper::Resource
|
|
15
|
+
|
|
16
|
+
# this one is not Serial intentionally
|
|
17
|
+
# use Serial in real world apps
|
|
18
|
+
property :id, Integer, :key => true, :min => 1, :max => 10
|
|
19
|
+
|
|
20
|
+
property :name, String, :required => true, :validates => :presence_test
|
|
21
|
+
property :description, String, :length => 10, :validates => :length_test_1
|
|
22
|
+
property :notes, String, :length => 2..10, :validates => :length_test_2
|
|
23
|
+
property :no_validation, String, :auto_validation => false
|
|
24
|
+
property :salesman, String, :required => true, :validates => [:multi_context_1, :multi_context_2]
|
|
25
|
+
property :code, String, :format => Proc.new { |code| code =~ /A\d{4}\z/ }, :validates => :format_test
|
|
26
|
+
property :allow_nil, String, :length => 5..10, :required => false, :validates => :nil_test
|
|
27
|
+
property :build_date, Date, :validates => :primitive_test
|
|
28
|
+
property :float, Float, :precision => 2, :scale => 1
|
|
29
|
+
property :big_decimal, Decimal, :precision => 2, :scale => 1
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class HasNullableBoolean
|
|
33
|
+
include DataMapper::Resource
|
|
34
|
+
|
|
35
|
+
# this one is not Serial intentionally
|
|
36
|
+
# use Serial in real world apps
|
|
37
|
+
property :id, Integer, :key => true
|
|
38
|
+
property :bool, Boolean # :required => false by default
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
class HasRequiredBoolean
|
|
42
|
+
include DataMapper::Resource
|
|
43
|
+
|
|
44
|
+
# this one is not Serial intentionally
|
|
45
|
+
# use Serial in real world apps
|
|
46
|
+
property :id, Integer, :key => true
|
|
47
|
+
property :bool, Boolean, :required => true
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
class HasRequiredParanoidBoolean
|
|
51
|
+
include DataMapper::Resource
|
|
52
|
+
|
|
53
|
+
# this one is not Serial intentionally
|
|
54
|
+
# use Serial in real world apps
|
|
55
|
+
property :id, Integer, :key => true
|
|
56
|
+
property :bool, ParanoidBoolean, :required => true
|
|
57
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/block_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::G3Concert' do
|
|
5
|
+
before :all do
|
|
6
|
+
@model = DataMapper::Validations::Fixtures::G3Concert.new(:year => 2004, :participants => "Joe Satriani, Steve Vai, Yngwie Malmsteen", :city => "Denver")
|
|
7
|
+
@model.should be_valid
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe "some non existing year/participants/city combination" do
|
|
11
|
+
before :all do
|
|
12
|
+
@model.year = 2015
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it_should_behave_like "invalid model"
|
|
16
|
+
|
|
17
|
+
it "uses error messages returned by the validation block" do
|
|
18
|
+
@model.errors.on(:participants).should == [ 'this G3 is probably yet to take place' ]
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
describe "existing year/participants/city combination" do
|
|
24
|
+
before :all do
|
|
25
|
+
@model.year = 2001
|
|
26
|
+
@model.city = "Los Angeles"
|
|
27
|
+
@model.participants = "Joe Satriani, Steve Vai, John Petrucci"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it_should_behave_like "valid model"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/conditional_validation/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::UDPPacket' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::UDPPacket.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = DataMapper::Validations::Fixtures::UDPPacket.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "that is transported encapsulated into IPv4 packet" do
|
|
12
|
+
before :all do
|
|
13
|
+
@model.underlying_ip_version = 4
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "and has no checksum" do
|
|
17
|
+
before :all do
|
|
18
|
+
@model.checksum = nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it_should_behave_like "valid model"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
describe "and has no checksum algorithm" do
|
|
25
|
+
before :all do
|
|
26
|
+
@model.checksum_algorithm = nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it_should_behave_like "valid model"
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
describe "that is transported encapsulated into IPv6 packet" do
|
|
35
|
+
before :all do
|
|
36
|
+
@model.underlying_ip_version = 6
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe "and has no checksum" do
|
|
40
|
+
before :all do
|
|
41
|
+
@model.checksum = nil
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it_should_behave_like "invalid model"
|
|
45
|
+
|
|
46
|
+
it "has a meaningful error message" do
|
|
47
|
+
@model.errors.on(:checksum).should == [ 'Checksum is mandatory when used with IPv6' ]
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe "and has no checksum algorithm" do
|
|
52
|
+
before :all do
|
|
53
|
+
@model.checksum_algorithm = nil
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it_should_behave_like "invalid model"
|
|
57
|
+
|
|
58
|
+
it "has a meaningful error message" do
|
|
59
|
+
@model.errors.on(:checksum_algorithm).should == [ 'Checksum is mandatory when used with IPv6' ]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/confirmation_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe "reservation with mismatched person name", :shared => true do
|
|
5
|
+
it "has meaningful error message" do
|
|
6
|
+
@model.errors.on(:person_name).should == [ 'Person name does not match the confirmation' ]
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe "reservation with mismatched seats number", :shared => true do
|
|
11
|
+
it "has meaningful error message" do
|
|
12
|
+
# Proc gets expanded here
|
|
13
|
+
@model.errors.on(:number_of_seats).should == [ 'Reservation requires confirmation for number_of_seats' ]
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
describe 'DataMapper::Validations::Fixtures::Reservation' do
|
|
19
|
+
before :all do
|
|
20
|
+
DataMapper::Validations::Fixtures::Reservation.auto_migrate!
|
|
21
|
+
|
|
22
|
+
@model = DataMapper::Validations::Fixtures::Reservation.new(:person_name => "Tyler Durden",
|
|
23
|
+
:person_name_confirmation => "Tyler Durden",
|
|
24
|
+
:number_of_seats => 2,
|
|
25
|
+
:seats_confirmation => 2)
|
|
26
|
+
@model.should be_valid
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
describe "with matching person name and confirmation" do
|
|
30
|
+
before :all do
|
|
31
|
+
@model.person_name = "mismatch"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it_should_behave_like "invalid model"
|
|
35
|
+
it_should_behave_like "reservation with mismatched person name"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
describe "with a blank person name and confirmation" do
|
|
40
|
+
before :all do
|
|
41
|
+
@model.person_name = ""
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it_should_behave_like "invalid model"
|
|
45
|
+
it_should_behave_like "reservation with mismatched person name"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
describe "with a missing person name and confirmation" do
|
|
50
|
+
before :all do
|
|
51
|
+
@model.person_name = nil
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it_should_behave_like "invalid model"
|
|
55
|
+
it_should_behave_like "reservation with mismatched person name"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
describe "with mismatching number of seats and confirmation" do
|
|
60
|
+
before :all do
|
|
61
|
+
@model.number_of_seats = -1
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it_should_behave_like "invalid model"
|
|
65
|
+
it_should_behave_like "reservation with mismatched seats number"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
describe "with a blank number of seats and confirmation" do
|
|
70
|
+
before :all do
|
|
71
|
+
@model.number_of_seats = nil
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it_should_behave_like "valid model"
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'DataMapper::Validations::Fixtures::Product' do
|
|
4
|
+
before :all do
|
|
5
|
+
DataMapper::Validations::Fixtures::ProductCompany.auto_migrate!
|
|
6
|
+
DataMapper::Validations::Fixtures::Product.auto_migrate!
|
|
7
|
+
|
|
8
|
+
parent_model = DataMapper::Validations::Fixtures::ProductCompany
|
|
9
|
+
@parent = parent_model.new(:title => "Apple", :flagship_product => "Macintosh")
|
|
10
|
+
@parent.should be_valid
|
|
11
|
+
@parent.save.should be_true
|
|
12
|
+
|
|
13
|
+
model_model = DataMapper::Validations::Fixtures::Product
|
|
14
|
+
@model = model_model.new(:name => "MacBook Pro", :company => @parent)
|
|
15
|
+
@model.should be_valid
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "without company" do
|
|
19
|
+
before :all do
|
|
20
|
+
@model.company = nil
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it_should_behave_like "invalid model"
|
|
24
|
+
|
|
25
|
+
it "has a meaningful error message" do
|
|
26
|
+
@model.errors.on(:company).should == [ 'Company must not be blank' ]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|