dm-validations 0.9.11 → 0.10.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 (159) hide show
  1. data/{History.txt → History.rdoc} +10 -3
  2. data/LICENSE +1 -0
  3. data/Manifest.txt +103 -33
  4. data/README.rdoc +172 -0
  5. data/Rakefile +4 -5
  6. data/lib/dm-validations.rb +73 -75
  7. data/lib/dm-validations/auto_validate.rb +98 -56
  8. data/lib/dm-validations/contextual_validators.rb +37 -14
  9. data/lib/dm-validations/exceptions.rb +3 -0
  10. data/lib/dm-validations/formats/url.rb +3 -1
  11. data/lib/dm-validations/support/context.rb +54 -0
  12. data/lib/dm-validations/validation_errors.rb +51 -27
  13. data/lib/dm-validations/{absent_field_validator.rb → validators/absent_field_validator.rb} +2 -8
  14. data/lib/dm-validations/{acceptance_validator.rb → validators/acceptance_validator.rb} +7 -7
  15. data/lib/dm-validations/{block_validator.rb → validators/block_validator.rb} +0 -0
  16. data/lib/dm-validations/{confirmation_validator.rb → validators/confirmation_validator.rb} +7 -7
  17. data/lib/dm-validations/{format_validator.rb → validators/format_validator.rb} +10 -16
  18. data/lib/dm-validations/{generic_validator.rb → validators/generic_validator.rb} +28 -6
  19. data/lib/dm-validations/validators/length_validator.rb +214 -0
  20. data/lib/dm-validations/validators/method_validator.rb +68 -0
  21. data/lib/dm-validations/validators/numeric_validator.rb +171 -0
  22. data/lib/dm-validations/{primitive_validator.rb → validators/primitive_validator.rb} +2 -7
  23. data/lib/dm-validations/{required_field_validator.rb → validators/required_field_validator.rb} +0 -6
  24. data/lib/dm-validations/{uniqueness_validator.rb → validators/uniqueness_validator.rb} +9 -20
  25. data/lib/dm-validations/{within_validator.rb → validators/within_validator.rb} +4 -4
  26. data/lib/dm-validations/version.rb +1 -1
  27. data/spec/fixtures/barcode.rb +32 -0
  28. data/spec/fixtures/basketball_court.rb +58 -0
  29. data/spec/fixtures/basketball_player.rb +37 -0
  30. data/spec/fixtures/beta_tester_account.rb +33 -0
  31. data/spec/fixtures/bill_of_landing.rb +42 -0
  32. data/spec/fixtures/boat_dock.rb +26 -0
  33. data/spec/fixtures/city.rb +25 -0
  34. data/spec/fixtures/company.rb +95 -0
  35. data/spec/fixtures/corporate_world.rb +47 -0
  36. data/spec/fixtures/country.rb +25 -0
  37. data/spec/fixtures/currency.rb +42 -0
  38. data/spec/fixtures/ethernet_frame.rb +56 -0
  39. data/spec/fixtures/event.rb +44 -0
  40. data/spec/fixtures/g3_concert.rb +57 -0
  41. data/spec/fixtures/jabberwock.rb +27 -0
  42. data/spec/fixtures/kayak.rb +28 -0
  43. data/spec/fixtures/lernean_hydra.rb +39 -0
  44. data/spec/fixtures/mathematical_function.rb +34 -0
  45. data/spec/fixtures/memory_object.rb +30 -0
  46. data/spec/fixtures/mittelschnauzer.rb +35 -0
  47. data/spec/fixtures/motor_launch.rb +21 -0
  48. data/spec/fixtures/page.rb +32 -0
  49. data/spec/fixtures/phone_number.rb +28 -0
  50. data/spec/fixtures/pirogue.rb +28 -0
  51. data/spec/fixtures/programming_language.rb +83 -0
  52. data/spec/fixtures/reservation.rb +38 -0
  53. data/spec/fixtures/scm_operation.rb +67 -0
  54. data/spec/fixtures/sms_message.rb +22 -0
  55. data/spec/fixtures/udp_packet.rb +49 -0
  56. data/spec/integration/absent_field_validator/absent_field_validator_spec.rb +86 -0
  57. data/spec/integration/absent_field_validator/spec_helper.rb +7 -0
  58. data/spec/integration/acceptance_validator/acceptance_validator_spec.rb +196 -0
  59. data/spec/integration/acceptance_validator/spec_helper.rb +7 -0
  60. data/spec/integration/automatic_validation/custom_messages_for_inferred_validation_spec.rb +47 -0
  61. data/spec/integration/automatic_validation/disabling_inferred_validation_spec.rb +41 -0
  62. data/spec/integration/automatic_validation/inferred_boolean_properties_validation_spec.rb +104 -0
  63. data/spec/integration/automatic_validation/inferred_float_property_validation_spec.rb +35 -0
  64. data/spec/integration/automatic_validation/inferred_format_validation_spec.rb +33 -0
  65. data/spec/integration/automatic_validation/inferred_integer_properties_validation_spec.rb +73 -0
  66. data/spec/integration/automatic_validation/inferred_length_validation_spec.rb +121 -0
  67. data/spec/integration/automatic_validation/inferred_presence_validation_spec.rb +41 -0
  68. data/spec/integration/automatic_validation/inferred_primitive_validation_spec.rb +20 -0
  69. data/spec/integration/automatic_validation/inferred_within_validation_spec.rb +33 -0
  70. data/spec/integration/automatic_validation/spec_helper.rb +74 -0
  71. data/spec/integration/block_validator/block_validator_spec.rb +32 -0
  72. data/spec/integration/block_validator/spec_helper.rb +5 -0
  73. data/spec/integration/conditional_validation/if_condition_spec.rb +61 -0
  74. data/spec/integration/conditional_validation/spec_helper.rb +5 -0
  75. data/spec/integration/confirmation_validator/confirmation_validator_spec.rb +74 -0
  76. data/spec/integration/confirmation_validator/spec_helper.rb +5 -0
  77. data/spec/integration/datamapper_models/association_validation_spec.rb +23 -0
  78. data/spec/integration/datamapper_models/inheritance_spec.rb +78 -0
  79. data/spec/integration/duplicated_validations/duplicated_validations_spec.rb +22 -0
  80. data/spec/integration/duplicated_validations/spec_helper.rb +5 -0
  81. data/spec/integration/format_validator/email_format_validator_spec.rb +113 -0
  82. data/spec/integration/format_validator/format_validator_spec.rb +60 -0
  83. data/spec/integration/format_validator/regexp_validator_spec.rb +29 -0
  84. data/spec/integration/format_validator/spec_helper.rb +5 -0
  85. data/spec/integration/format_validator/url_format_validator_spec.rb +63 -0
  86. data/spec/integration/length_validator/default_value_spec.rb +12 -0
  87. data/spec/integration/length_validator/equality_spec.rb +79 -0
  88. data/spec/integration/length_validator/error_message_spec.rb +15 -18
  89. data/spec/integration/length_validator/maximum_spec.rb +40 -24
  90. data/spec/integration/length_validator/minimum_spec.rb +32 -21
  91. data/spec/integration/length_validator/range_spec.rb +50 -60
  92. data/spec/integration/length_validator/spec_helper.rb +7 -12
  93. data/spec/integration/method_validator/method_validator_spec.rb +239 -0
  94. data/spec/integration/method_validator/spec_helper.rb +5 -0
  95. data/spec/integration/numeric_validator/equality_with_float_type_spec.rb +61 -0
  96. data/spec/integration/numeric_validator/equality_with_integer_type_spec.rb +37 -0
  97. data/spec/integration/numeric_validator/float_type_spec.rb +42 -56
  98. data/spec/integration/numeric_validator/gt_with_float_type_spec.rb +35 -0
  99. data/spec/integration/numeric_validator/gte_with_float_type_spec.rb +35 -0
  100. data/spec/integration/numeric_validator/integer_only_true_spec.rb +3 -6
  101. data/spec/integration/numeric_validator/integer_type_spec.rb +8 -24
  102. data/spec/integration/numeric_validator/lt_with_float_type_spec.rb +35 -0
  103. data/spec/integration/numeric_validator/lte_with_float_type_spec.rb +35 -0
  104. data/spec/integration/numeric_validator/spec_helper.rb +5 -77
  105. data/spec/integration/primitive_validator/primitive_validator_spec.rb +90 -0
  106. data/spec/integration/primitive_validator/spec_helper.rb +5 -0
  107. data/spec/integration/pure_ruby_objects/plain_old_ruby_object_validation_spec.rb +118 -0
  108. data/spec/integration/required_field_validator/association_spec.rb +5 -8
  109. data/spec/integration/required_field_validator/boolean_type_value_spec.rb +4 -7
  110. data/spec/integration/required_field_validator/date_type_value_spec.rb +3 -6
  111. data/spec/integration/required_field_validator/datetime_type_value_spec.rb +3 -6
  112. data/spec/integration/required_field_validator/float_type_value_spec.rb +3 -6
  113. data/spec/integration/required_field_validator/integer_type_value_spec.rb +2 -5
  114. data/spec/integration/required_field_validator/plain_old_ruby_object_spec.rb +5 -8
  115. data/spec/integration/required_field_validator/shared_examples.rb +1 -1
  116. data/spec/integration/required_field_validator/spec_helper.rb +6 -67
  117. data/spec/integration/required_field_validator/string_type_value_spec.rb +2 -5
  118. data/spec/integration/required_field_validator/text_type_value_spec.rb +2 -5
  119. data/spec/integration/shared/default_validation_context.rb +13 -0
  120. data/spec/integration/shared/valid_and_invalid_model.rb +27 -0
  121. data/spec/integration/uniqueness_validator/spec_helper.rb +5 -0
  122. data/spec/integration/uniqueness_validator/uniqueness_validator_spec.rb +114 -0
  123. data/spec/integration/within_validator/spec_helper.rb +5 -0
  124. data/spec/integration/within_validator/within_validator_spec.rb +164 -0
  125. data/spec/public/resource_spec.rb +68 -0
  126. data/spec/spec.opts +1 -0
  127. data/spec/spec_helper.rb +12 -4
  128. data/spec/unit/contextual_validators/emptiness_spec.rb +50 -0
  129. data/spec/unit/contextual_validators/execution_spec.rb +55 -0
  130. data/spec/unit/contextual_validators/spec_helper.rb +37 -0
  131. data/spec/unit/generic_validator/equality_operator_spec.rb +26 -0
  132. data/spec/unit/validation_errors/adding_spec.rb +54 -0
  133. data/spec/unit/validation_errors/emptiness_spec.rb +38 -0
  134. data/spec/unit/validation_errors/enumerable_spec.rb +32 -0
  135. data/tasks/install.rb +1 -1
  136. data/tasks/spec.rb +4 -4
  137. metadata +118 -55
  138. data/README.txt +0 -72
  139. data/lib/dm-validations/custom_validator.rb +0 -72
  140. data/lib/dm-validations/length_validator.rb +0 -113
  141. data/lib/dm-validations/method_validator.rb +0 -68
  142. data/lib/dm-validations/numeric_validator.rb +0 -83
  143. data/spec/integration/absent_field_validator_spec.rb +0 -36
  144. data/spec/integration/acceptance_validator_spec.rb +0 -87
  145. data/spec/integration/auto_validate_spec.rb +0 -342
  146. data/spec/integration/block_validator_spec.rb +0 -30
  147. data/spec/integration/confirmation_validator_spec.rb +0 -105
  148. data/spec/integration/contextual_validators_spec.rb +0 -27
  149. data/spec/integration/custom_validator_spec.rb +0 -9
  150. data/spec/integration/format_validator_spec.rb +0 -193
  151. data/spec/integration/generic_validator_spec.rb +0 -17
  152. data/spec/integration/length_validator/valid_objects_spec.rb +0 -13
  153. data/spec/integration/method_validator_spec.rb +0 -58
  154. data/spec/integration/numeric_validator_spec.rb +0 -253
  155. data/spec/integration/primitive_validator_spec.rb +0 -30
  156. data/spec/integration/uniqueness_validator_spec.rb +0 -97
  157. data/spec/integration/validation_errors_spec.rb +0 -18
  158. data/spec/integration/validation_spec.rb +0 -404
  159. data/spec/integration/within_validator_spec.rb +0 -79
@@ -1,8 +1,5 @@
1
- require 'pathname'
2
- __dir__ = Pathname(__FILE__).dirname.expand_path
3
-
4
- require __dir__.parent.parent + 'spec_helper'
5
- require __dir__ + 'spec_helper'
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
6
3
 
7
4
  if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
8
5
  class Artist
@@ -16,7 +13,7 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
16
13
  # Properties
17
14
  #
18
15
 
19
- property :id, Integer, :serial => true
16
+ property :id, Serial
20
17
  property :name, String, :auto_validation => false
21
18
 
22
19
  #
@@ -43,7 +40,7 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
43
40
  # Properties
44
41
  #
45
42
 
46
- property :id, Integer, :serial => true
43
+ property :id, Serial
47
44
  property :name, String, :auto_validation => false
48
45
  property :artist_id, Integer, :index => :artist
49
46
 
@@ -81,7 +78,7 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
81
78
 
82
79
  it 'has a meaninful error messages on association key property' do
83
80
  @album.valid?
84
- @album.errors.on(:artist).should include("Artist must not be blank")
81
+ @album.errors.on(:artist).should == [ 'Artist must not be blank' ]
85
82
  end
86
83
  end
87
84
 
@@ -1,8 +1,5 @@
1
- require 'pathname'
2
- __dir__ = Pathname(__FILE__).dirname.expand_path
3
-
4
- require __dir__.parent.parent + 'spec_helper'
5
- require __dir__ + 'spec_helper'
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
6
3
 
7
4
  if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
8
5
  # keep in mind any ScmOperation has a default value for brand property
@@ -39,13 +36,13 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
39
36
  it "is not valid for pushing" do
40
37
  @operation.should_not be_valid_for_pushing
41
38
  @operation.errors.on(:network_connection).
42
- first[:pushing].should include("cannot push without network connectivity")
39
+ first[:pushing].should == 'though git is advanced, it cannot push without network connectivity'
43
40
  end
44
41
 
45
42
  it "is not valid for pulling" do
46
43
  @operation.should_not be_valid_for_pulling
47
44
  @operation.errors.on(:network_connection).
48
- first[:pulling].should include("you must have network connectivity to pull from others")
45
+ first[:pulling].should == 'you must have network connectivity to pull from others'
49
46
  end
50
47
 
51
48
  it "is not valid in default context" do
@@ -1,8 +1,5 @@
1
- require 'pathname'
2
- __dir__ = Pathname(__FILE__).dirname.expand_path
3
-
4
- require __dir__.parent.parent + 'spec_helper'
5
- require __dir__ + 'spec_helper'
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
6
3
 
7
4
  if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
8
5
  class Holiday
@@ -16,7 +13,7 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
16
13
  # Properties
17
14
  #
18
15
 
19
- property :id, Integer, :serial => true
16
+ property :id, Serial
20
17
  property :on, Date, :auto_validation => false
21
18
 
22
19
  #
@@ -1,8 +1,5 @@
1
- require 'pathname'
2
- __dir__ = Pathname(__FILE__).dirname.expand_path
3
-
4
- require __dir__.parent.parent + 'spec_helper'
5
- require __dir__ + 'spec_helper'
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
6
3
 
7
4
  if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
8
5
  class ScheduledOperation
@@ -16,7 +13,7 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
16
13
  # Properties
17
14
  #
18
15
 
19
- property :id, Integer, :serial => true
16
+ property :id, Serial
20
17
  property :at, DateTime, :auto_validation => false
21
18
 
22
19
  #
@@ -1,8 +1,5 @@
1
- require 'pathname'
2
- __dir__ = Pathname(__FILE__).dirname.expand_path
3
-
4
- require __dir__.parent.parent + 'spec_helper'
5
- require __dir__ + 'spec_helper'
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
6
3
 
7
4
  if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
8
5
  #
@@ -21,7 +18,7 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
21
18
  # Properties
22
19
  #
23
20
 
24
- property :id, Integer, :serial => true
21
+ property :id, Serial
25
22
  property :percent, Float, :auto_validation => false
26
23
 
27
24
  #
@@ -1,8 +1,5 @@
1
- require 'pathname'
2
- __dir__ = Pathname(__FILE__).dirname.expand_path
3
-
4
- require __dir__.parent.parent + 'spec_helper'
5
- require __dir__ + 'spec_helper'
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
6
3
 
7
4
  if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
8
5
  #
@@ -1,8 +1,5 @@
1
- require 'pathname'
2
- __dir__ = Pathname(__FILE__).dirname.expand_path
3
-
4
- require __dir__.parent.parent + 'spec_helper'
5
- require __dir__ + 'spec_helper'
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
6
3
 
7
4
  if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
8
5
  describe "A plain old Ruby object (not a DM resource)" do
@@ -22,9 +19,9 @@ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
22
19
 
23
20
  it "should fail validation with empty, nil, or blank fields" do
24
21
  @pc.should_not be_valid
25
- @pc.errors.on(:empty).should include("Empty must not be blank")
26
- @pc.errors.on(:nil).should include("Nil must not be blank")
27
- @pc.errors.on(:accessor).should include("Accessor must not be blank")
22
+ @pc.errors.on(:empty).should == [ 'Empty must not be blank' ]
23
+ @pc.errors.on(:nil).should == [ 'Nil must not be blank' ]
24
+ @pc.errors.on(:accessor).should == [ 'Accessor must not be blank' ]
28
25
  end
29
26
 
30
27
  it "giving accessor a value should remove validation error" do
@@ -18,7 +18,7 @@ describe GitOperation do
18
18
  end
19
19
 
20
20
  it "points to blank name in the error message" do
21
- @operation.errors.on(:name).should include('Name must not be blank')
21
+ @operation.errors.on(:name).should == [ 'Name must not be blank' ]
22
22
  end
23
23
  end
24
24
  end
@@ -1,68 +1,7 @@
1
- if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
1
+ # make sure you check out spec/fixtures to see fixture models
2
+ # already written
3
+ #
4
+ # DataMapper developers feels strongly against foobars in the spec
5
+ # suite
2
6
 
3
- #
4
- # SCMs
5
- #
6
- # This example may look stupid (I am sure it is),
7
- # but it is way better than foobars and easier to read/add cases
8
- # compared to gardening examples because every software engineer has idea
9
- # about SCMs and not every software engineer does gardening often.
10
- #
11
-
12
- class ScmOperation
13
- include DataMapper::Resource
14
-
15
- #
16
- # Property
17
- #
18
-
19
- property :id, Integer, :serial => true
20
-
21
- # operation name
22
- property :name, String, :auto_validation => false
23
-
24
- property :committer_name, String, :auto_validation => false, :default => "Just another Ruby hacker"
25
- property :author_name, String, :auto_validation => false, :default => "Just another Ruby hacker"
26
- property :network_connection, Boolean, :auto_validation => false
27
- property :message, Text, :auto_validation => false
28
- property :clean_working_copy, Boolean, :auto_validation => false
29
-
30
- #
31
- # Validations
32
- #
33
-
34
- validates_present :name
35
- end
36
-
37
- class SubversionOperation < ScmOperation
38
- #
39
- # Validations
40
- #
41
-
42
- validates_present :network_connection, :when => [:committing, :log_viewing]
43
- end
44
-
45
- class GitOperation < ScmOperation
46
- #
47
- # Validations
48
- #
49
-
50
- validates_present :author_name, :when => :committing
51
- validates_present :committer_name, :when => :committing
52
-
53
- validates_present :message, :when => :committing
54
- validates_present :network_connection, :when => [:pushing, :pulling], :message => {
55
- :pushing => "though git is advanced, it cannot push without network connectivity",
56
- :pulling => "you must have network connectivity to pull from others"
57
- }
58
- validates_present :clean_working_copy, :when => :pulling
59
- end
60
-
61
-
62
- [ScmOperation, SubversionOperation, GitOperation].each do |dm_resource|
63
- dm_resource.auto_migrate!
64
- end
65
-
66
- __dir__ = File.dirname(__FILE__)
67
- require File.join(__dir__, "shared_examples")
68
- end
7
+ require 'integration/required_field_validator/shared_examples'
@@ -1,8 +1,5 @@
1
- require 'pathname'
2
- __dir__ = Pathname(__FILE__).dirname.expand_path
3
-
4
- require __dir__.parent.parent + 'spec_helper'
5
- require __dir__ + 'spec_helper'
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
6
3
 
7
4
  if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
8
5
  # keep in mind any ScmOperation has a default value for brand property
@@ -1,8 +1,5 @@
1
- require 'pathname'
2
- __dir__ = Pathname(__FILE__).dirname.expand_path
3
-
4
- require __dir__.parent.parent + 'spec_helper'
5
- require __dir__ + 'spec_helper'
1
+ require 'spec_helper'
2
+ require 'integration/required_field_validator/spec_helper'
6
3
 
7
4
  if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
8
5
  # keep in mind any ScmOperation has a default value for brand property
@@ -0,0 +1,13 @@
1
+ describe "object invalid in default context", :shared => true do
2
+ it "is not valid in default context" do
3
+ @model.should_not be_valid
4
+ @model.should_not be_valid(:default)
5
+ end
6
+ end
7
+
8
+ describe "object valid in default context", :shared => true do
9
+ it "is valid in default context" do
10
+ @model.should be_valid
11
+ @model.should be_valid(:default)
12
+ end
13
+ end
@@ -0,0 +1,27 @@
1
+ describe "valid model", :shared => true do
2
+ it "is valid" do
3
+ @model.should be_valid
4
+ end
5
+
6
+ it "has no error messages" do
7
+ @model.errors.should be_empty
8
+ end
9
+
10
+ it "has empty list of full error messages" do
11
+ @model.errors.full_messages.should be_empty
12
+ end
13
+ end
14
+
15
+ describe "invalid model", :shared => true do
16
+ it "is NOT valid" do
17
+ @model.should_not be_valid
18
+ end
19
+
20
+ it "has error messages" do
21
+ @model.errors.should_not be_blank
22
+ end
23
+
24
+ it "has list of full error messages" do
25
+ @model.errors.full_messages.should_not be_blank
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ # make sure you check out spec/fixtures to see fixture models
2
+ # already written
3
+ #
4
+ # DataMapper developers feels strongly against foobars in the spec
5
+ # suite
@@ -0,0 +1,114 @@
1
+ require 'spec_helper'
2
+ require 'integration/uniqueness_validator/spec_helper'
3
+
4
+
5
+ if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
6
+ describe DataMapper::Validate::Fixtures::Department do
7
+ before :all do
8
+ ::DataMapper::Validate::Fixtures::Department.create(:name => "HR")
9
+ end
10
+
11
+ describe "with unique name" do
12
+ before :all do
13
+ @model = ::DataMapper::Validate::Fixtures::Department.new(:name => "R & D")
14
+ end
15
+
16
+ it_should_behave_like "valid model"
17
+ end
18
+
19
+ describe "with a duplicate name" do
20
+ before :all do
21
+ @model = ::DataMapper::Validate::Fixtures::Department.new(:name => "HR")
22
+ end
23
+
24
+ it_should_behave_like "invalid model"
25
+ end
26
+ end
27
+
28
+
29
+
30
+ describe DataMapper::Validate::Fixtures::Organisation do
31
+ before :all do
32
+ DataMapper.repository do
33
+ @model = ::DataMapper::Validate::Fixtures::Organisation.create(:name => 'Apple', :domain => 'apple.com')
34
+ end
35
+ end
36
+
37
+ describe "with missing domain" do
38
+ before :all do
39
+ @model.domain = nil
40
+ end
41
+
42
+ it_should_behave_like "valid model"
43
+ end
44
+
45
+ describe "with a duplicate domain" do
46
+ before :all do
47
+ @model.name = "Fake Apple"
48
+ @model.domain = "apple.com"
49
+ end
50
+
51
+ it_should_behave_like "invalid model"
52
+
53
+ it "has a meaningful error message" do
54
+ @model.valid?
55
+ @model.errors.on(:domain).should == [ 'Domain is already taken' ]
56
+ end
57
+ end
58
+
59
+ it "shouldn't fail on itself when checking for records with identical fields" do
60
+ @model.name = "Steve Job's Pony Express"
61
+ @model.should be_valid
62
+ end
63
+ end
64
+
65
+
66
+
67
+ describe DataMapper::Validate::Fixtures::User do
68
+ before :all do
69
+ # remove data from previous spec runs
70
+ ::DataMapper::Validate::Fixtures::Organisation.all.destroy!
71
+ ::DataMapper::Validate::Fixtures::Department.all.destroy!
72
+ ::DataMapper::Validate::Fixtures::User.all.destroy!
73
+
74
+ DataMapper.repository do
75
+ @organization = ::DataMapper::Validate::Fixtures::Organisation.create(:name => 'Org 101', :domain => '101')
76
+ @dept = ::DataMapper::Validate::Fixtures::Department.create(:name => 'accounting')
77
+ @user = ::DataMapper::Validate::Fixtures::User.create(:organisation => @organization, :user_name => 'guy', :department => @dept)
78
+
79
+ @organization.should be_saved
80
+ @dept.should be_saved
81
+ @user.should be_saved
82
+ end
83
+ end
84
+
85
+ describe "with username not valid across the organization" do
86
+ before :all do
87
+ @model = ::DataMapper::Validate::Fixtures::User.new(:organisation => @organization, :user_name => 'guy')
88
+ end
89
+
90
+ it "is not valid for signing up" do
91
+ @model.should_not be_valid_for_signing_up_for_organization_account
92
+ end
93
+
94
+ it "has a meaningful error message" do
95
+ @model.errors.on(:user_name).should == [ 'User name is already taken' ]
96
+ end
97
+ end
98
+
99
+
100
+ describe "with username not valid across the department" do
101
+ before :all do
102
+ @model = ::DataMapper::Validate::Fixtures::User.new(:user_name => 'guy', :department => @dept)
103
+ end
104
+
105
+ it "is not valid for setting up the account" do
106
+ @model.should_not be_valid_for_signing_up_for_department_account
107
+ end
108
+
109
+ it "has a meaningful error message" do
110
+ @model.errors.on(:user_name).should == [ 'User name is already taken' ]
111
+ end
112
+ end
113
+ end # describe DataMapper::Validate::Fixtures::User
114
+ end # if HAS_SQLITE3 || HAS_MYSQL || HAS_POSTGRES
@@ -0,0 +1,5 @@
1
+ # make sure you check out spec/fixtures to see fixture models
2
+ # already written
3
+ #
4
+ # DataMapper developers feels strongly against foobars in the spec
5
+ # suite