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,83 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
module DataMapper
|
|
4
|
+
module Validations
|
|
5
|
+
module Fixtures
|
|
6
|
+
# If you think that this particular fixture class
|
|
7
|
+
# and assumptions made below are full of bullshit
|
|
8
|
+
# and author is a moron, you are 100% right. I am,
|
|
9
|
+
# but it's me who rewrites poor dm-validations
|
|
10
|
+
# spec suite this time, so unless someone smart
|
|
11
|
+
# steps up to do it, we have to roll on with
|
|
12
|
+
# this crappy example of method validation. — MK
|
|
13
|
+
class ProgrammingLanguage
|
|
14
|
+
#
|
|
15
|
+
# Behaviors
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
include ::DataMapper::Validations
|
|
19
|
+
|
|
20
|
+
#
|
|
21
|
+
# Attributes
|
|
22
|
+
#
|
|
23
|
+
|
|
24
|
+
attr_accessor :name, :allows_system_calls, :allows_manual_memory_management, :allows_optional_parentheses,
|
|
25
|
+
:allows_operator_overload, :approved_by_linus, :compiler_excels_at_utilizing_cpu_cache,
|
|
26
|
+
:is_very_high_level, :does_not_require_explicit_return_keyword, :standard_library_support_parallel_programming_out_of_the_box
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
# Validations
|
|
30
|
+
#
|
|
31
|
+
|
|
32
|
+
validates_with_method :ensure_appropriate_for_system_programming, :when => [:doing_system_programming, :hacking_on_the_kernel, :implementing_a_game_engine]
|
|
33
|
+
validates_with_method :ensure_appropriate_for_dsls, :when => [:implementing_a_dsl]
|
|
34
|
+
validates_with_method :ensure_appropriate_for_cpu_intensive_tasks, :when => [:implementing_a_game_engine_core]
|
|
35
|
+
validates_with_method :ensure_approved_by_linus_himself, :when => [:hacking_on_the_kernel]
|
|
36
|
+
|
|
37
|
+
#
|
|
38
|
+
# API
|
|
39
|
+
#
|
|
40
|
+
|
|
41
|
+
def initialize(args = {})
|
|
42
|
+
args.each do |key, value|
|
|
43
|
+
self.send("#{key}=", value)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def ensure_appropriate_for_system_programming
|
|
48
|
+
if allows_manual_memory_management && allows_system_calls
|
|
49
|
+
true
|
|
50
|
+
else
|
|
51
|
+
[false, "try something that is closer to the metal"]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def ensure_appropriate_for_dsls
|
|
56
|
+
if allows_optional_parentheses && allows_operator_overload && is_very_high_level && does_not_require_explicit_return_keyword
|
|
57
|
+
true
|
|
58
|
+
else
|
|
59
|
+
[false, "may not be so good for domain specific languages"]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def ensure_appropriate_for_cpu_intensive_tasks
|
|
64
|
+
if compiler_excels_at_utilizing_cpu_cache && allows_manual_memory_management
|
|
65
|
+
true
|
|
66
|
+
else
|
|
67
|
+
[false, "may not be so good for CPU intensive tasks"]
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def ensure_approved_by_linus_himself
|
|
72
|
+
if name.downcase == "c++"
|
|
73
|
+
[false, "Quite frankly, even if the choice of C were to do *nothing*
|
|
74
|
+
but keep the C++ programmers out, that in itself would be
|
|
75
|
+
a huge reason to use C."]
|
|
76
|
+
else
|
|
77
|
+
true
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end # ProgrammingLanguage
|
|
81
|
+
end # Fixtures
|
|
82
|
+
end # Validations
|
|
83
|
+
end # DataMapper
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
module DataMapper
|
|
4
|
+
module Validations
|
|
5
|
+
module Fixtures
|
|
6
|
+
class Reservation
|
|
7
|
+
#
|
|
8
|
+
# Behaviors
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
include ::DataMapper::Resource
|
|
12
|
+
|
|
13
|
+
#
|
|
14
|
+
# Attributes
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
attr_accessor :person_name_confirmation, :seats_confirmation
|
|
18
|
+
|
|
19
|
+
#
|
|
20
|
+
# Properties
|
|
21
|
+
#
|
|
22
|
+
|
|
23
|
+
property :id, Serial
|
|
24
|
+
property :person_name, String, :auto_validation => false
|
|
25
|
+
property :number_of_seats, Integer, :auto_validation => false
|
|
26
|
+
|
|
27
|
+
#
|
|
28
|
+
# Validations
|
|
29
|
+
#
|
|
30
|
+
|
|
31
|
+
validates_confirmation_of :person_name, :allow_nil => false, :allow_blank => false
|
|
32
|
+
validates_confirmation_of :number_of_seats, :confirm => :seats_confirmation, :message => Proc.new { |resource, property|
|
|
33
|
+
'%s requires confirmation for %s' % [DataMapper::Inflector.demodulize(resource.model.name), property.name]
|
|
34
|
+
}
|
|
35
|
+
end # Reservation
|
|
36
|
+
end # Fixtures
|
|
37
|
+
end # Validations
|
|
38
|
+
end # DataMapper
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#
|
|
2
|
+
# SCMs
|
|
3
|
+
#
|
|
4
|
+
# This example may look stupid (I am sure it is),
|
|
5
|
+
# but it is way better than foobars and easier to read/add cases
|
|
6
|
+
# compared to gardening examples because every software engineer has idea
|
|
7
|
+
# about SCMs and not every software engineer does gardening often.
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
class ScmOperation
|
|
11
|
+
include DataMapper::Resource
|
|
12
|
+
|
|
13
|
+
#
|
|
14
|
+
# Property
|
|
15
|
+
#
|
|
16
|
+
|
|
17
|
+
property :id, Serial
|
|
18
|
+
|
|
19
|
+
# operation name
|
|
20
|
+
property :name, String, :auto_validation => false
|
|
21
|
+
|
|
22
|
+
property :committer_name, String, :auto_validation => false, :default => "Just another Ruby hacker"
|
|
23
|
+
property :author_name, String, :auto_validation => false, :default => "Just another Ruby hacker"
|
|
24
|
+
property :network_connection, Boolean, :auto_validation => false
|
|
25
|
+
property :message, Text, :auto_validation => false
|
|
26
|
+
property :clean_working_copy, Boolean, :auto_validation => false
|
|
27
|
+
|
|
28
|
+
#
|
|
29
|
+
# Validations
|
|
30
|
+
#
|
|
31
|
+
|
|
32
|
+
validates_presence_of :name
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class SubversionOperation < ScmOperation
|
|
36
|
+
#
|
|
37
|
+
# Validations
|
|
38
|
+
#
|
|
39
|
+
|
|
40
|
+
validates_presence_of :network_connection, :when => [:committing, :log_viewing]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class GitOperation < ScmOperation
|
|
44
|
+
#
|
|
45
|
+
# Validations
|
|
46
|
+
#
|
|
47
|
+
|
|
48
|
+
validates_presence_of :author_name, :committer_name, :when => :committing
|
|
49
|
+
|
|
50
|
+
validates_presence_of :message, :when => :committing
|
|
51
|
+
validates_presence_of :network_connection, :when => [:pushing, :pulling], :message => {
|
|
52
|
+
:pushing => "though git is advanced, it cannot push without network connectivity",
|
|
53
|
+
:pulling => "you must have network connectivity to pull from others"
|
|
54
|
+
}
|
|
55
|
+
validates_presence_of :clean_working_copy, :when => :pulling
|
|
56
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
module DataMapper
|
|
2
|
+
module Validations
|
|
3
|
+
module Fixtures
|
|
4
|
+
|
|
5
|
+
class SmsMessage
|
|
6
|
+
#
|
|
7
|
+
# Behaviors
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
include DataMapper::Resource
|
|
11
|
+
|
|
12
|
+
#
|
|
13
|
+
# Properties
|
|
14
|
+
#
|
|
15
|
+
|
|
16
|
+
property :id, Serial
|
|
17
|
+
property :body, Text, :length => (1..500)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
module DataMapper
|
|
4
|
+
module Validations
|
|
5
|
+
module Fixtures
|
|
6
|
+
|
|
7
|
+
class UDPPacket
|
|
8
|
+
#
|
|
9
|
+
# Behaviors
|
|
10
|
+
#
|
|
11
|
+
|
|
12
|
+
include DataMapper::Resource
|
|
13
|
+
|
|
14
|
+
#
|
|
15
|
+
# Properties
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
property :id, Serial
|
|
19
|
+
|
|
20
|
+
property :source_port, Integer, :auto_validation => false
|
|
21
|
+
property :destination_port, Integer, :auto_validation => false
|
|
22
|
+
|
|
23
|
+
property :length, Integer, :auto_validation => false
|
|
24
|
+
property :checksum, String, :auto_validation => false
|
|
25
|
+
# consider that there are multiple algorithms
|
|
26
|
+
# available to the app, and it is allowed
|
|
27
|
+
# to be chosed
|
|
28
|
+
#
|
|
29
|
+
# yes, to some degree, this is a made up
|
|
30
|
+
# property ;)
|
|
31
|
+
property :checksum_algorithm, String, :auto_validation => false
|
|
32
|
+
property :data, Text, :auto_validation => false
|
|
33
|
+
|
|
34
|
+
#
|
|
35
|
+
# Volatile attributes
|
|
36
|
+
#
|
|
37
|
+
|
|
38
|
+
attr_accessor :underlying_ip_version
|
|
39
|
+
|
|
40
|
+
#
|
|
41
|
+
# Validations
|
|
42
|
+
#
|
|
43
|
+
|
|
44
|
+
validates_presence_of :checksum_algorithm, :checksum, :if => Proc.new { |packet| packet.underlying_ip_version == 6 }, :message => "Checksum is mandatory when used with IPv6"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end # Fixtures
|
|
48
|
+
end # Validations
|
|
49
|
+
end # DataMapper
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/absent_field_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::Kayak' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::Kayak.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@kayak = DataMapper::Validations::Fixtures::Kayak.new
|
|
9
|
+
@kayak.should be_valid_for_sale
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
describe "with salesman being non blank" do
|
|
13
|
+
before :all do
|
|
14
|
+
@kayak.salesman = 'Joe'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "is invalid" do
|
|
18
|
+
@kayak.should_not be_valid_for_sale
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "has meaningful error message" do
|
|
22
|
+
@kayak.errors.on(:salesman).should == [ 'Salesman must be absent' ]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
describe "with salesman being nil" do
|
|
28
|
+
before :all do
|
|
29
|
+
@kayak.salesman = nil
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "is valid" do
|
|
33
|
+
@kayak.should be_valid_for_sale
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "has no error messages" do
|
|
37
|
+
@kayak.errors.on(:salesman).should be_nil
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
describe "with salesman being an empty string" do
|
|
43
|
+
before :all do
|
|
44
|
+
@kayak.salesman = ''
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "is valid" do
|
|
48
|
+
@kayak.should be_valid_for_sale
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "has no error messages" do
|
|
52
|
+
@kayak.errors.on(:salesman).should be_nil
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
describe "with salesman being a string of white spaces" do
|
|
58
|
+
before :all do
|
|
59
|
+
@kayak.salesman = ' '
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "is valid" do
|
|
63
|
+
@kayak.should be_valid_for_sale
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it "has no error messages" do
|
|
67
|
+
@kayak.errors.on(:salesman).should be_nil
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
describe 'DataMapper::Validations::Fixtures::Pirogue' do
|
|
74
|
+
before :all do
|
|
75
|
+
DataMapper::Validations::Fixtures::Pirogue.auto_migrate!
|
|
76
|
+
|
|
77
|
+
@kayak = DataMapper::Validations::Fixtures::Pirogue.new
|
|
78
|
+
@kayak.should_not be_valid_for_sale
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
describe "by default" do
|
|
82
|
+
it "is invalid" do
|
|
83
|
+
@kayak.should_not be_valid_for_sale
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "has meaningful error message" do
|
|
87
|
+
@kayak.errors.on(:salesman).should == [ 'Salesman must be absent' ]
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/acceptance_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BetaTesterAccount' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BetaTesterAccount.auto_migrate!
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@model = DataMapper::Validations::Fixtures::BetaTesterAccount.new(:user_agreement => true,
|
|
11
|
+
:newsletter_signup => nil,
|
|
12
|
+
:privacy_agreement => "accept")
|
|
13
|
+
@model.should be_valid
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "with a missing newsletter signup field" do
|
|
17
|
+
before do
|
|
18
|
+
@model.newsletter_signup = nil
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it "is perfectly valid" do
|
|
22
|
+
@model.should be_valid
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
describe "with a blank newsletter signup field" do
|
|
27
|
+
before do
|
|
28
|
+
@model.newsletter_signup = ""
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "is NOT valid" do
|
|
32
|
+
@model.should_not be_valid
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe "with a blank user agreement field" do
|
|
37
|
+
before do
|
|
38
|
+
@model.user_agreement = ""
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "is NOT valid" do
|
|
42
|
+
@model.should_not be_valid
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
describe "with a nil user agreement field" do
|
|
47
|
+
before do
|
|
48
|
+
@model.user_agreement = nil
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "is NOT valid" do
|
|
52
|
+
@model.should_not be_valid
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
describe "with user agreement field having value of 1 (as integer)" do
|
|
57
|
+
before do
|
|
58
|
+
@model.user_agreement = 1
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "is valid" do
|
|
62
|
+
@model.should be_valid
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
describe "with user agreement field having value of 1 (as a string)" do
|
|
67
|
+
before do
|
|
68
|
+
@model.user_agreement = "1"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "is valid" do
|
|
72
|
+
@model.should be_valid
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
describe "with user agreement field having value of 'true' (as a string)" do
|
|
77
|
+
before do
|
|
78
|
+
@model.user_agreement = 'true'
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it "is valid" do
|
|
82
|
+
@model.should be_valid
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
describe "with user agreement field having value of true (TrueClass instance)" do
|
|
87
|
+
before do
|
|
88
|
+
@model.user_agreement = true
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "is valid" do
|
|
92
|
+
@model.should be_valid
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
describe "with user agreement field having value of 't' (The Lisp Way)" do
|
|
97
|
+
before do
|
|
98
|
+
@model.user_agreement = 't'
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it "is valid" do
|
|
102
|
+
@model.should be_valid
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
describe "with user agreement field having value of 'f'" do
|
|
107
|
+
before do
|
|
108
|
+
@model.user_agreement = 'f'
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "is NOT valid" do
|
|
112
|
+
@model.should_not be_valid
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
describe "with user agreement field having value of false" do
|
|
117
|
+
before do
|
|
118
|
+
@model.user_agreement = false
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it "is NOT valid" do
|
|
122
|
+
@model.should_not be_valid
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
describe "with privacy agreement field having value of 1" do
|
|
127
|
+
before do
|
|
128
|
+
@model.privacy_agreement = 1
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "is NOT valid" do
|
|
132
|
+
@model.should_not be_valid
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
describe "with privacy agreement field having value of true" do
|
|
137
|
+
before do
|
|
138
|
+
@model.privacy_agreement = true
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it "is NOT valid" do
|
|
142
|
+
@model.should_not be_valid
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
describe "with privacy agreement field having value of '1'" do
|
|
147
|
+
before do
|
|
148
|
+
@model.privacy_agreement = '1'
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it "is NOT valid" do
|
|
152
|
+
@model.should_not be_valid
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
describe "with privacy agreement field having value of 't'" do
|
|
157
|
+
before do
|
|
158
|
+
@model.privacy_agreement = 't'
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
it "is NOT valid" do
|
|
162
|
+
@model.should_not be_valid
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
describe "with privacy agreement field having value of 'accept'" do
|
|
167
|
+
before do
|
|
168
|
+
@model.privacy_agreement = 'accept'
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
it "is valid" do
|
|
172
|
+
@model.should be_valid
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
describe "with privacy agreement field having value of 'agreed'" do
|
|
177
|
+
before do
|
|
178
|
+
@model.privacy_agreement = 'agreed'
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it "is valid" do
|
|
182
|
+
@model.should be_valid
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
describe "with privacy agreement field having value of 'ah, greed'" do
|
|
187
|
+
before do
|
|
188
|
+
@model.privacy_agreement = 'ah, greed'
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
it "is NOT valid" do
|
|
192
|
+
# greed is invalid? can't be
|
|
193
|
+
@model.should_not be_valid
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
end
|