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.
Files changed (153) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +35 -0
  3. data/.travis.yml +11 -0
  4. data/Gemfile +51 -0
  5. data/LICENSE +21 -0
  6. data/README.rdoc +122 -0
  7. data/Rakefile +4 -0
  8. data/ardm-validations.gemspec +28 -0
  9. data/lib/ardm-validations.rb +1 -0
  10. data/lib/dm-validations.rb +169 -0
  11. data/lib/dm-validations/auto_validate.rb +252 -0
  12. data/lib/dm-validations/context.rb +66 -0
  13. data/lib/dm-validations/contextual_validators.rb +220 -0
  14. data/lib/dm-validations/exceptions.rb +5 -0
  15. data/lib/dm-validations/formats/email.rb +65 -0
  16. data/lib/dm-validations/formats/url.rb +27 -0
  17. data/lib/dm-validations/support/object.rb +18 -0
  18. data/lib/dm-validations/support/ordered_hash.rb +434 -0
  19. data/lib/dm-validations/validation_errors.rb +137 -0
  20. data/lib/dm-validations/validators/absent_field_validator.rb +58 -0
  21. data/lib/dm-validations/validators/acceptance_validator.rb +79 -0
  22. data/lib/dm-validations/validators/block_validator.rb +61 -0
  23. data/lib/dm-validations/validators/confirmation_validator.rb +92 -0
  24. data/lib/dm-validations/validators/format_validator.rb +124 -0
  25. data/lib/dm-validations/validators/generic_validator.rb +184 -0
  26. data/lib/dm-validations/validators/length_validator.rb +249 -0
  27. data/lib/dm-validations/validators/method_validator.rb +64 -0
  28. data/lib/dm-validations/validators/numeric_validator.rb +182 -0
  29. data/lib/dm-validations/validators/primitive_validator.rb +58 -0
  30. data/lib/dm-validations/validators/required_field_validator.rb +83 -0
  31. data/lib/dm-validations/validators/uniqueness_validator.rb +67 -0
  32. data/lib/dm-validations/validators/within_validator.rb +74 -0
  33. data/lib/dm-validations/version.rb +5 -0
  34. data/spec/fixtures/barcode.rb +40 -0
  35. data/spec/fixtures/basketball_court.rb +58 -0
  36. data/spec/fixtures/basketball_player.rb +34 -0
  37. data/spec/fixtures/beta_tester_account.rb +33 -0
  38. data/spec/fixtures/bill_of_landing.rb +47 -0
  39. data/spec/fixtures/boat_dock.rb +26 -0
  40. data/spec/fixtures/city.rb +24 -0
  41. data/spec/fixtures/company.rb +93 -0
  42. data/spec/fixtures/corporate_world.rb +39 -0
  43. data/spec/fixtures/country.rb +24 -0
  44. data/spec/fixtures/ethernet_frame.rb +56 -0
  45. data/spec/fixtures/event.rb +44 -0
  46. data/spec/fixtures/g3_concert.rb +57 -0
  47. data/spec/fixtures/jabberwock.rb +27 -0
  48. data/spec/fixtures/kayak.rb +28 -0
  49. data/spec/fixtures/lernean_hydra.rb +39 -0
  50. data/spec/fixtures/llama_spaceship.rb +15 -0
  51. data/spec/fixtures/mathematical_function.rb +34 -0
  52. data/spec/fixtures/memory_object.rb +30 -0
  53. data/spec/fixtures/mittelschnauzer.rb +39 -0
  54. data/spec/fixtures/motor_launch.rb +21 -0
  55. data/spec/fixtures/multibyte.rb +16 -0
  56. data/spec/fixtures/page.rb +32 -0
  57. data/spec/fixtures/phone_number.rb +28 -0
  58. data/spec/fixtures/pirogue.rb +28 -0
  59. data/spec/fixtures/programming_language.rb +83 -0
  60. data/spec/fixtures/reservation.rb +38 -0
  61. data/spec/fixtures/scm_operation.rb +56 -0
  62. data/spec/fixtures/sms_message.rb +22 -0
  63. data/spec/fixtures/udp_packet.rb +49 -0
  64. data/spec/integration/absent_field_validator/absent_field_validator_spec.rb +90 -0
  65. data/spec/integration/absent_field_validator/spec_helper.rb +7 -0
  66. data/spec/integration/acceptance_validator/acceptance_validator_spec.rb +196 -0
  67. data/spec/integration/acceptance_validator/spec_helper.rb +7 -0
  68. data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +57 -0
  69. data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +49 -0
  70. data/spec/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +100 -0
  71. data/spec/integration/automatic_validation/inferred_float_property_validation_spec.rb +45 -0
  72. data/spec/integration/automatic_validation/inferred_format_validation_spec.rb +35 -0
  73. data/spec/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +70 -0
  74. data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +142 -0
  75. data/spec/integration/automatic_validation/inferred_presence_validation_spec.rb +45 -0
  76. data/spec/integration/automatic_validation/inferred_primitive_validation_spec.rb +22 -0
  77. data/spec/integration/automatic_validation/inferred_uniqueness_validation_spec.rb +52 -0
  78. data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +39 -0
  79. data/spec/integration/automatic_validation/spec_helper.rb +57 -0
  80. data/spec/integration/block_validator/block_validator_spec.rb +32 -0
  81. data/spec/integration/block_validator/spec_helper.rb +5 -0
  82. data/spec/integration/conditional_validation/if_condition_spec.rb +63 -0
  83. data/spec/integration/conditional_validation/spec_helper.rb +5 -0
  84. data/spec/integration/confirmation_validator/confirmation_validator_spec.rb +76 -0
  85. data/spec/integration/confirmation_validator/spec_helper.rb +5 -0
  86. data/spec/integration/datamapper_models/association_validation_spec.rb +29 -0
  87. data/spec/integration/datamapper_models/inheritance_spec.rb +82 -0
  88. data/spec/integration/dirty_attributes/dirty_attributes_spec.rb +13 -0
  89. data/spec/integration/duplicated_validations/duplicated_validations_spec.rb +24 -0
  90. data/spec/integration/duplicated_validations/spec_helper.rb +5 -0
  91. data/spec/integration/format_validator/email_format_validator_spec.rb +139 -0
  92. data/spec/integration/format_validator/format_validator_spec.rb +64 -0
  93. data/spec/integration/format_validator/regexp_validator_spec.rb +33 -0
  94. data/spec/integration/format_validator/spec_helper.rb +5 -0
  95. data/spec/integration/format_validator/url_format_validator_spec.rb +93 -0
  96. data/spec/integration/length_validator/default_value_spec.rb +14 -0
  97. data/spec/integration/length_validator/equality_spec.rb +87 -0
  98. data/spec/integration/length_validator/error_message_spec.rb +22 -0
  99. data/spec/integration/length_validator/maximum_spec.rb +49 -0
  100. data/spec/integration/length_validator/minimum_spec.rb +54 -0
  101. data/spec/integration/length_validator/range_spec.rb +87 -0
  102. data/spec/integration/length_validator/spec_helper.rb +7 -0
  103. data/spec/integration/method_validator/method_validator_spec.rb +241 -0
  104. data/spec/integration/method_validator/spec_helper.rb +5 -0
  105. data/spec/integration/numeric_validator/equality_with_float_type_spec.rb +65 -0
  106. data/spec/integration/numeric_validator/equality_with_integer_type_spec.rb +41 -0
  107. data/spec/integration/numeric_validator/float_type_spec.rb +90 -0
  108. data/spec/integration/numeric_validator/gt_with_float_type_spec.rb +37 -0
  109. data/spec/integration/numeric_validator/gte_with_float_type_spec.rb +37 -0
  110. data/spec/integration/numeric_validator/integer_only_true_spec.rb +91 -0
  111. data/spec/integration/numeric_validator/integer_type_spec.rb +86 -0
  112. data/spec/integration/numeric_validator/lt_with_float_type_spec.rb +37 -0
  113. data/spec/integration/numeric_validator/lte_with_float_type_spec.rb +37 -0
  114. data/spec/integration/numeric_validator/spec_helper.rb +5 -0
  115. data/spec/integration/primitive_validator/primitive_validator_spec.rb +92 -0
  116. data/spec/integration/primitive_validator/spec_helper.rb +5 -0
  117. data/spec/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +118 -0
  118. data/spec/integration/required_field_validator/association_spec.rb +72 -0
  119. data/spec/integration/required_field_validator/boolean_type_value_spec.rb +155 -0
  120. data/spec/integration/required_field_validator/date_type_value_spec.rb +127 -0
  121. data/spec/integration/required_field_validator/datetime_type_value_spec.rb +127 -0
  122. data/spec/integration/required_field_validator/float_type_value_spec.rb +131 -0
  123. data/spec/integration/required_field_validator/integer_type_value_spec.rb +99 -0
  124. data/spec/integration/required_field_validator/plain_old_ruby_object_spec.rb +35 -0
  125. data/spec/integration/required_field_validator/shared_examples.rb +26 -0
  126. data/spec/integration/required_field_validator/spec_helper.rb +7 -0
  127. data/spec/integration/required_field_validator/string_type_value_spec.rb +167 -0
  128. data/spec/integration/required_field_validator/text_type_value_spec.rb +49 -0
  129. data/spec/integration/shared/default_validation_context.rb +13 -0
  130. data/spec/integration/shared/valid_and_invalid_model.rb +35 -0
  131. data/spec/integration/uniqueness_validator/spec_helper.rb +5 -0
  132. data/spec/integration/uniqueness_validator/uniqueness_validator_spec.rb +116 -0
  133. data/spec/integration/within_validator/spec_helper.rb +5 -0
  134. data/spec/integration/within_validator/within_validator_spec.rb +168 -0
  135. data/spec/public/resource_spec.rb +105 -0
  136. data/spec/rcov.opts +6 -0
  137. data/spec/spec.opts +4 -0
  138. data/spec/spec_helper.rb +29 -0
  139. data/spec/unit/contextual_validators/emptiness_spec.rb +50 -0
  140. data/spec/unit/contextual_validators/execution_spec.rb +48 -0
  141. data/spec/unit/contextual_validators/spec_helper.rb +37 -0
  142. data/spec/unit/generic_validator/equality_operator_spec.rb +26 -0
  143. data/spec/unit/generic_validator/optional_spec.rb +54 -0
  144. data/spec/unit/validation_errors/adding_spec.rb +54 -0
  145. data/spec/unit/validation_errors/emptiness_spec.rb +38 -0
  146. data/spec/unit/validation_errors/enumerable_spec.rb +32 -0
  147. data/spec/unit/validation_errors/reading_spec.rb +35 -0
  148. data/spec/unit/validation_errors/respond_to_spec.rb +15 -0
  149. data/spec/unit/validators/within_validator_spec.rb +23 -0
  150. data/tasks/spec.rake +38 -0
  151. data/tasks/yard.rake +9 -0
  152. data/tasks/yardstick.rake +19 -0
  153. 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,7 @@
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,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