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,82 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'DataMapper::Validations::Fixtures::ServiceCompany' do
|
|
4
|
+
before :all do
|
|
5
|
+
DataMapper::Validations::Fixtures::ServiceCompany.auto_migrate!
|
|
6
|
+
|
|
7
|
+
@model = DataMapper::Validations::Fixtures::ServiceCompany.new(:title => "Monsters, Inc.", :area_of_expertise => "Little children's nightmares")
|
|
8
|
+
@model.valid?
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "without title" do
|
|
12
|
+
before :all do
|
|
13
|
+
@model.title = nil
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it_should_behave_like "invalid model"
|
|
17
|
+
|
|
18
|
+
it "has a meaningful error message for inherited property" do
|
|
19
|
+
@model.errors.on(:title).should == [ 'Company name is a required field' ]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "without area of expertise" do
|
|
24
|
+
before :all do
|
|
25
|
+
@model.area_of_expertise = nil
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it_should_behave_like "invalid model"
|
|
29
|
+
|
|
30
|
+
it "has a meaningful error message for own property" do
|
|
31
|
+
@model.errors.on(:area_of_expertise).should == [ 'Area of expertise must not be blank' ]
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
describe 'DataMapper::Validations::Fixtures::ProductCompany' do
|
|
39
|
+
before :all do
|
|
40
|
+
DataMapper::Validations::Fixtures::ProductCompany.auto_migrate!
|
|
41
|
+
|
|
42
|
+
@model = DataMapper::Validations::Fixtures::ProductCompany.new(:title => "Apple", :flagship_product => "Macintosh")
|
|
43
|
+
@model.valid?
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it_should_behave_like "valid model"
|
|
47
|
+
|
|
48
|
+
describe "without title" do
|
|
49
|
+
before :all do
|
|
50
|
+
@model.title = nil
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it_should_behave_like "invalid model"
|
|
54
|
+
|
|
55
|
+
it "has error message from the subclass itself" do
|
|
56
|
+
@model.errors.on(:title).should include('Product company must have a name')
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# this may or may not be a desired behavior,
|
|
60
|
+
# but append vs. replace is a matter of opinion
|
|
61
|
+
# anyway
|
|
62
|
+
#
|
|
63
|
+
# TODO: there should be a way to clear validations for a field
|
|
64
|
+
# that subclasses can use
|
|
65
|
+
it "has error message from superclass" do
|
|
66
|
+
@model.errors.on(:title).should include('Company name is a required field')
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
describe "without flagship product" do
|
|
72
|
+
before :all do
|
|
73
|
+
@model.flagship_product = nil
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it_should_behave_like "invalid model"
|
|
77
|
+
|
|
78
|
+
it "has a meaningful error message for own property" do
|
|
79
|
+
@model.errors.on(:flagship_product).should == [ 'Flagship product must not be blank' ]
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'DataMapper::Validations::Fixtures::LlamaSpaceship' do
|
|
4
|
+
before :all do
|
|
5
|
+
DataMapper::Validations::Fixtures::LlamaSpaceship.auto_migrate!
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
it "validates even non dirty attributes" do
|
|
9
|
+
spaceship = DataMapper::Validations::Fixtures::LlamaSpaceship.create(:type => "custom", :color => "pink")
|
|
10
|
+
spaceship.type = "standard"
|
|
11
|
+
spaceship.should_not be_valid
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
require 'integration/duplicated_validations/spec_helper'
|
|
5
|
+
|
|
6
|
+
describe 'DataMapper::Validations::Fixtures::Page' do
|
|
7
|
+
before :all do
|
|
8
|
+
DataMapper::Validations::Fixtures::Page.auto_migrate!
|
|
9
|
+
|
|
10
|
+
@model = DataMapper::Validations::Fixtures::Page.new(:id => 1024)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "without body" do
|
|
14
|
+
before :all do
|
|
15
|
+
@model.body = nil
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it_should_behave_like "invalid model"
|
|
19
|
+
|
|
20
|
+
it "does not have duplicated error messages" do
|
|
21
|
+
@model.errors.on(:body).should == ["Body must not be blank"]
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# encoding: UTF-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
require 'integration/format_validator/spec_helper'
|
|
4
|
+
|
|
5
|
+
describe 'DataMapper::Validations::Fixtures::BillOfLading' do
|
|
6
|
+
before :all do
|
|
7
|
+
DataMapper::Validations::Fixtures::BillOfLading.auto_migrate!
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def valid_attributes
|
|
11
|
+
{ :id => 1, :doc_no => 'A1234', :email => 'user@example.com', :url => 'http://example.com' }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
@valid_email_addresses = [
|
|
15
|
+
'+1~1+@example.com',
|
|
16
|
+
'{_dave_}@example.com',
|
|
17
|
+
'"[[ dave ]]"@example.com',
|
|
18
|
+
'dave."dave"@example.com',
|
|
19
|
+
'test@example.com',
|
|
20
|
+
'test@example.co.uk',
|
|
21
|
+
'test@example.com.br',
|
|
22
|
+
'"J. P. \'s-Gravezande, a.k.a. The Hacker!"@example.com',
|
|
23
|
+
'me@[187.223.45.119]',
|
|
24
|
+
'someone@123.com',
|
|
25
|
+
'simon&garfunkel@songs.com'].each do |email|
|
|
26
|
+
|
|
27
|
+
describe "with email value of #{email} (RFC2822 compliant)" do
|
|
28
|
+
before :all do
|
|
29
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:email => email))
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it_should_behave_like "valid model"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
@invalid_email_addresses = [
|
|
38
|
+
'-- dave --@example.com',
|
|
39
|
+
'[dave]@example.com',
|
|
40
|
+
'.dave@example.com',
|
|
41
|
+
'Max@Job 3:14',
|
|
42
|
+
'Job@Book of Job',
|
|
43
|
+
'test@localhost',
|
|
44
|
+
'J. P. \'s-Gravezande, a.k.a. The Hacker!@example.com',
|
|
45
|
+
"test@example.com\nsomething after the newline"].each do |email|
|
|
46
|
+
describe "with email value of #{email} (non RFC2822 compliant)" do
|
|
47
|
+
before :all do
|
|
48
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:email => email))
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it_should_behave_like "invalid model"
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe "with valid email including unicode characters" do
|
|
56
|
+
before :all do
|
|
57
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:email => 'pelé@gmail.com'))
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
if (RUBY_VERSION == '1.9.2' && RUBY_ENGINE == 'jruby') || RUBY_VERSION == '1.9.3'
|
|
61
|
+
# Not supported on jruby 1.9 or 1.9.3 yet - see formats/email.rb
|
|
62
|
+
it 'should not raise an error' do
|
|
63
|
+
lambda { @model.valid? }.should_not raise_error
|
|
64
|
+
end
|
|
65
|
+
else
|
|
66
|
+
# Unicode emails not supported on MRI18
|
|
67
|
+
unless !defined?(RUBY_ENGINE) && RUBY_VERSION == '1.8.7'
|
|
68
|
+
it 'should behave like valid model' do
|
|
69
|
+
@model.should be_valid
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
it 'should have a pre-defined URL format' do
|
|
77
|
+
bad = [ 'http:// example.com',
|
|
78
|
+
'ftp://example.com',
|
|
79
|
+
'http://.com',
|
|
80
|
+
'http://',
|
|
81
|
+
'test',
|
|
82
|
+
'...'
|
|
83
|
+
]
|
|
84
|
+
|
|
85
|
+
good = [
|
|
86
|
+
'http://example.com',
|
|
87
|
+
'http://www.example.com',
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
bol = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.except(:url))
|
|
91
|
+
bol.should_not be_valid
|
|
92
|
+
bol.errors.on(:url).should == [ 'Url has an invalid format' ]
|
|
93
|
+
|
|
94
|
+
bad.map do |e|
|
|
95
|
+
bol.url = e
|
|
96
|
+
bol.valid?
|
|
97
|
+
bol.errors.on(:url).should == [ 'Url has an invalid format' ]
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
good.map do |e|
|
|
101
|
+
bol.url = e
|
|
102
|
+
bol.valid?
|
|
103
|
+
bol.errors.on(:url).should be_nil
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
describe 'with a regexp' do
|
|
109
|
+
before do
|
|
110
|
+
@bol = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes)
|
|
111
|
+
@bol.should be_valid
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
describe 'if matched' do
|
|
115
|
+
before do
|
|
116
|
+
@bol.username = 'a12345'
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it 'should validate' do
|
|
120
|
+
@bol.should be_valid
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
describe 'if not matched' do
|
|
125
|
+
before do
|
|
126
|
+
@bol.username = '12345'
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it 'should not validate' do
|
|
130
|
+
@bol.should_not be_valid
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it 'should set an error message' do
|
|
134
|
+
@bol.valid?
|
|
135
|
+
@bol.errors.on(:username).should == [ 'Username must have at least one letter' ]
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
end
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/format_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BillOfLading' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BillOfLading.auto_migrate!
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def valid_attributes
|
|
10
|
+
{ :id => 1, :doc_no => 'A1234', :email => 'user@example.com', :url => 'http://example.com' }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "with doc no with value of 'BAD CODE :)'" do
|
|
14
|
+
before :all do
|
|
15
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:doc_no => 'BAD CODE :)'))
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it_should_behave_like 'invalid model'
|
|
19
|
+
|
|
20
|
+
it "has meaningful error message on invalid field" do
|
|
21
|
+
@model.errors.on(:doc_no).should == [ 'Doc no has an invalid format' ]
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe "with doc no with value of 'A1234'" do
|
|
26
|
+
before :all do
|
|
27
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:doc_no => 'A1234'))
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it_should_behave_like 'valid model'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
describe "with doc no with value of 'B123456X12'" do
|
|
34
|
+
before :all do
|
|
35
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:doc_no => 'B123456X12'))
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it_should_behave_like 'valid model'
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "with missing url" do
|
|
42
|
+
before :all do
|
|
43
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.except(:url))
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it_should_behave_like 'invalid model'
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
describe "with blank name" do
|
|
50
|
+
before :all do
|
|
51
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:username => ''))
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it_should_behave_like 'valid model'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe "with blank email" do
|
|
58
|
+
before :all do
|
|
59
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:email => ''))
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it_should_behave_like 'valid model'
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/format_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BillOfLading' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BillOfLading.auto_migrate!
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def valid_attributes
|
|
10
|
+
{ :id => 1, :doc_no => 'A1234', :email => 'user@example.com', :url => 'http://example.com' }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "with code of 123456" do
|
|
14
|
+
before :all do
|
|
15
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:code => '123456'))
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it_should_behave_like 'valid model'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
describe "with code of 12" do
|
|
23
|
+
before :all do
|
|
24
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:code => '12'))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it_should_behave_like 'invalid model'
|
|
28
|
+
|
|
29
|
+
it "has a meaningful error message" do
|
|
30
|
+
@model.errors.on(:code).should == [ 'Code format is invalid' ]
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/format_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BillOfLading' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BillOfLading.auto_migrate!
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def valid_attributes
|
|
10
|
+
{ :id => 1, :doc_no => 'A1234', :email => 'user@example.com', :url => 'http://example.com' }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
invalid_uris = [ 'http:// example.com', 'ftp://example.com', 'http://.com', 'http://', 'test', '...',
|
|
14
|
+
# these are valid URIs from RFC perspective,
|
|
15
|
+
# but too often not the case for web apps
|
|
16
|
+
#
|
|
17
|
+
# TODO: add another format that is strictly
|
|
18
|
+
# RFC compliant so it can be used, for instance,
|
|
19
|
+
# for internal apps that may refer to local domains
|
|
20
|
+
# like http://backend:8080
|
|
21
|
+
"http://localhost:4000", "http://localhost" ]
|
|
22
|
+
|
|
23
|
+
invalid_uris.each do |uri|
|
|
24
|
+
describe "with URL of #{uri}" do
|
|
25
|
+
before :all do
|
|
26
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:url => uri))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it_should_behave_like "invalid model"
|
|
30
|
+
|
|
31
|
+
it "has a meaningful error message" do
|
|
32
|
+
@model.errors.on(:url).should == [ 'Url has an invalid format' ]
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# http:// throws an exception in Addressable::URI, so it wouldn't make it to the validation part anyway :)
|
|
38
|
+
(invalid_uris - ['http://']).each do |uri|
|
|
39
|
+
describe "with dm-type URI of #{uri}" do
|
|
40
|
+
before(:all) do
|
|
41
|
+
@model = DataMapper::Validations::Fixtures::SurrenderBillOfLading.new(valid_attributes.merge(:bank_url => uri))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it_should_behave_like "invalid model"
|
|
45
|
+
|
|
46
|
+
it "has a meaningful error message" do
|
|
47
|
+
@model.errors.on(:bank_url).should == [ 'Bank url has an invalid format' ]
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
[ 'http://apple.com',
|
|
55
|
+
'http://www.apple.com',
|
|
56
|
+
"http://apple.com/",
|
|
57
|
+
"http://apple.com/iphone",
|
|
58
|
+
"http://www.google.com/search?client=safari&rls=en-us&q=LED&ie=UTF-8&oe=UTF-8",
|
|
59
|
+
"http://books.google.com",
|
|
60
|
+
"http://books.google.com/",
|
|
61
|
+
"http://db2.clouds.megacorp.net:8080",
|
|
62
|
+
"https://github.com",
|
|
63
|
+
"https://github.com/",
|
|
64
|
+
"http://www.example.com:8088/never/ending/path/segments/",
|
|
65
|
+
"http://db2.clouds.megacorp.net:8080/resources/10",
|
|
66
|
+
"http://www.example.com:8088/never/ending/path/segments",
|
|
67
|
+
"http://books.google.com/books?id=uSUJ3VhH4BsC&printsec=frontcover&dq=subject:%22+Linguistics+%22&as_brr=3&ei=DAHPSbGQE5rEzATk1sShAQ&rview=1",
|
|
68
|
+
"http://books.google.com:80/books?uid=14472359158468915761&rview=1",
|
|
69
|
+
"http://books.google.com/books?id=Ar3-TXCYXUkC&printsec=frontcover&rview=1",
|
|
70
|
+
"http://books.google.com/books/vp6ae081e454d30f89b6bca94e0f96fc14.js",
|
|
71
|
+
"http://www.google.com/images/cleardot.gif",
|
|
72
|
+
"http://books.google.com:80/books?id=Ar3-TXCYXUkC&printsec=frontcover&rview=1#PPA5,M1",
|
|
73
|
+
"http://www.hulu.com/watch/64923/terminator-the-sarah-connor-chronicles-to-the-lighthouse",
|
|
74
|
+
"http://hulu.com:80/browse/popular/tv",
|
|
75
|
+
"http://www.hulu.com/watch/62475/the-simpsons-gone-maggie-gone#s-p1-so-i0"
|
|
76
|
+
].each do |uri|
|
|
77
|
+
describe "with URL of #{uri}" do
|
|
78
|
+
before :all do
|
|
79
|
+
@model = DataMapper::Validations::Fixtures::BillOfLading.new(valid_attributes.merge(:url => uri))
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it_should_behave_like "valid model"
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
describe "with dm-type URI of #{uri}" do
|
|
86
|
+
before(:all) do
|
|
87
|
+
@model = DataMapper::Validations::Fixtures::SurrenderBillOfLading.new(valid_attributes.merge(:bank_url => uri))
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it_should_behave_like "valid model"
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|