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,14 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/length_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BoatDock' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BoatDock.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = DataMapper::Validations::Fixtures::BoatDock.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "with default values that are valid" do
|
|
12
|
+
it_should_behave_like "valid model"
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
require 'integration/length_validator/spec_helper'
|
|
5
|
+
|
|
6
|
+
describe "entity with wrong destination MAC address length", :shared => true do
|
|
7
|
+
it "has error message with range bounds" do
|
|
8
|
+
@model.errors.on(:destination_mac).should == [ 'Destination mac must be 6 characters long' ]
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
describe 'DataMapper::Validations::Fixtures::EthernetFrame' do
|
|
14
|
+
before :all do
|
|
15
|
+
DataMapper::Validations::Fixtures::EthernetFrame.auto_migrate!
|
|
16
|
+
|
|
17
|
+
@model = DataMapper::Validations::Fixtures::EthernetFrame.valid_instance
|
|
18
|
+
@model.link_support_fragmentation = false
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it_should_behave_like "valid model"
|
|
22
|
+
|
|
23
|
+
describe "with destination MAC 3 'bits' long" do
|
|
24
|
+
before :all do
|
|
25
|
+
@model.destination_mac = "123"
|
|
26
|
+
@model.valid?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it_should_behave_like "invalid model"
|
|
30
|
+
|
|
31
|
+
it_should_behave_like "entity with wrong destination MAC address length"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "with destination MAC 8 'bits' long" do
|
|
35
|
+
before :all do
|
|
36
|
+
@model.destination_mac = "123abce8"
|
|
37
|
+
@model.valid?
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it_should_behave_like "invalid model"
|
|
41
|
+
|
|
42
|
+
it_should_behave_like "entity with wrong destination MAC address length"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# arguable but reasonable for 80% of cases
|
|
46
|
+
# to treat nil as a 0 lengh value
|
|
47
|
+
# reported in
|
|
48
|
+
# http://datamapper.lighthouseapp.com/projects/20609/tickets/646
|
|
49
|
+
describe "that has no destination MAC address" do
|
|
50
|
+
before :all do
|
|
51
|
+
@model.destination_mac = nil
|
|
52
|
+
@model.valid?
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it_should_behave_like "invalid model"
|
|
56
|
+
|
|
57
|
+
it_should_behave_like "entity with wrong destination MAC address length"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
describe "with a 6 'bits' destination MAC address" do
|
|
61
|
+
before :all do
|
|
62
|
+
@model.destination_mac = "a1b2c3"
|
|
63
|
+
@model.valid?
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it_should_behave_like "valid model"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
describe "with multibyte characters" do
|
|
70
|
+
before :all do
|
|
71
|
+
begin
|
|
72
|
+
# force normal encoding in this block
|
|
73
|
+
original, $KCODE = $KCODE, 'N' if RUBY_VERSION <= '1.8.6'
|
|
74
|
+
|
|
75
|
+
# example from: http://intertwingly.net/stories/2004/04/14/i18n.html
|
|
76
|
+
@model = DataMapper::Validations::Fixtures::Multibyte.new(
|
|
77
|
+
:name => 'Iñtërnâtiônàlizætiøn'
|
|
78
|
+
)
|
|
79
|
+
@model.should be_valid
|
|
80
|
+
ensure
|
|
81
|
+
$KCODE = original if RUBY_VERSION <= '1.8.6'
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it_should_behave_like "valid model"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/length_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::Jabberwock' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::Jabberwock.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = DataMapper::Validations::Fixtures::Jabberwock.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
describe "without snickersnack" do
|
|
12
|
+
before :all do
|
|
13
|
+
@model.snickersnack = nil
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it_should_behave_like "invalid model"
|
|
17
|
+
|
|
18
|
+
it "has custom error message" do
|
|
19
|
+
@model.errors.on(:snickersnack).should == [ 'worble warble' ]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/length_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe "barcode with invalid code length", :shared => true do
|
|
5
|
+
it "has a meaninful error message with length restrictions mentioned" do
|
|
6
|
+
@model.errors.on(:code).should == [ 'Code must be at most 10 characters long' ]
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe 'DataMapper::Validations::Fixtures::Barcode' do
|
|
11
|
+
before :all do
|
|
12
|
+
DataMapper::Validations::Fixtures::Barcode.auto_migrate!
|
|
13
|
+
|
|
14
|
+
@model = DataMapper::Validations::Fixtures::Barcode.valid_instance
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it_should_behave_like "valid model"
|
|
18
|
+
|
|
19
|
+
describe "with a 17 characters long code" do
|
|
20
|
+
before :all do
|
|
21
|
+
@model.code = "18283849284728124"
|
|
22
|
+
@model.valid?
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it_should_behave_like "invalid model"
|
|
26
|
+
|
|
27
|
+
it_should_behave_like "barcode with invalid code length"
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "with a 7 characters long code" do
|
|
31
|
+
before :all do
|
|
32
|
+
@model.code = "8372786"
|
|
33
|
+
@model.valid?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it_should_behave_like "valid model"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe "with an 11 characters long code" do
|
|
40
|
+
before :all do
|
|
41
|
+
@model.code = "83727868754"
|
|
42
|
+
@model.valid?
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it_should_behave_like "invalid model"
|
|
46
|
+
|
|
47
|
+
it_should_behave_like "barcode with invalid code length"
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/length_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe "entity with a name shorter than 2 characters", :shared => true do
|
|
5
|
+
it "has a meaninful error message with length restrictions mentioned" do
|
|
6
|
+
@model.errors.on(:name).should == [ 'Name must be at least 2 characters long' ]
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe 'DataMapper::Validations::Fixtures::Mittelschnauzer' do
|
|
11
|
+
before :all do
|
|
12
|
+
DataMapper::Validations::Fixtures::Mittelschnauzer.auto_migrate!
|
|
13
|
+
|
|
14
|
+
@model = DataMapper::Validations::Fixtures::Mittelschnauzer.valid_instance
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it_should_behave_like "valid model"
|
|
18
|
+
|
|
19
|
+
describe "with a 13 characters long name" do
|
|
20
|
+
it_should_behave_like "valid model"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
describe "with a single character name" do
|
|
24
|
+
before :all do
|
|
25
|
+
@model.name = "R"
|
|
26
|
+
@model.valid?
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it_should_behave_like "invalid model"
|
|
30
|
+
|
|
31
|
+
it_should_behave_like "entity with a name shorter than 2 characters"
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "with blank name" do
|
|
35
|
+
before :all do
|
|
36
|
+
@model.name = ""
|
|
37
|
+
@model.valid?
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it_should_behave_like "invalid model"
|
|
41
|
+
|
|
42
|
+
it_should_behave_like "entity with a name shorter than 2 characters"
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
describe "persisted, with a single character owner" do
|
|
46
|
+
before :all do
|
|
47
|
+
@model.save
|
|
48
|
+
@model.owner = 'a'
|
|
49
|
+
@model.valid?
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it_should_behave_like "invalid model"
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/length_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::EthernetFrame' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::EthernetFrame.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = DataMapper::Validations::Fixtures::EthernetFrame.valid_instance
|
|
9
|
+
@model.link_support_fragmentation = false
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_should_behave_like "valid model"
|
|
13
|
+
|
|
14
|
+
describe "with payload that is 7 'bits' long (too short)" do
|
|
15
|
+
before :all do
|
|
16
|
+
@model.payload = "1234567"
|
|
17
|
+
@model.valid?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it_should_behave_like "invalid model"
|
|
21
|
+
|
|
22
|
+
it "has error message with range bounds" do
|
|
23
|
+
@model.errors.on(:payload).should == [ 'Payload must be between 46 and 1500 characters long' ]
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
describe "with a one character long payload (too short)" do
|
|
29
|
+
before :all do
|
|
30
|
+
@model.payload = 'a'
|
|
31
|
+
@model.valid?
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it_should_behave_like "invalid model"
|
|
35
|
+
|
|
36
|
+
it "has error message with range bounds" do
|
|
37
|
+
@model.errors.on(:payload).should == [ 'Payload must be between 46 and 1500 characters long' ]
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
describe "with a 1600 'bits' long payload (needs fragmentation)" do
|
|
43
|
+
before :all do
|
|
44
|
+
@model.payload = 'a'
|
|
45
|
+
@model.valid?
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it_should_behave_like "invalid model"
|
|
49
|
+
|
|
50
|
+
it "has error message with range bounds" do
|
|
51
|
+
@model.errors.on(:payload).should == [ 'Payload must be between 46 and 1500 characters long' ]
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# arguable but reasonable for 80% of cases
|
|
57
|
+
# to treat nil as a 0 lengh value
|
|
58
|
+
# reported in
|
|
59
|
+
# http://datamapper.lighthouseapp.com/projects/20609/tickets/646
|
|
60
|
+
describe "that has no payload" do
|
|
61
|
+
before :all do
|
|
62
|
+
@model.payload = nil
|
|
63
|
+
@model.valid?
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
it_should_behave_like "invalid model"
|
|
67
|
+
|
|
68
|
+
it "has error message with range bounds" do
|
|
69
|
+
@model.errors.on(:payload).should == [ 'Payload must be between 46 and 1500 characters long' ]
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
describe "with a 50 characters long payload" do
|
|
76
|
+
before :all do
|
|
77
|
+
@model.payload = 'Imagine yourself a beautiful bag full of bits here'
|
|
78
|
+
@model.valid?
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it_should_behave_like "valid model"
|
|
82
|
+
|
|
83
|
+
it "has blank error message" do
|
|
84
|
+
@model.errors.on(:payload).should be_nil
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/method_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe "a good fit for DSLs", :shared => true do
|
|
5
|
+
it "is a good fit for DSLs" do
|
|
6
|
+
@model.should be_valid_for_implementing_a_dsl
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "is totally fine for DSLs" do
|
|
10
|
+
@model.ensure_appropriate_for_dsls.should be(true)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe "a poor candidate for DSLs", :shared => true do
|
|
15
|
+
it "is a poor candidate for DSLs" do
|
|
16
|
+
@model.should_not be_valid_for_implementing_a_dsl
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "is unappropriate for DSLs" do
|
|
20
|
+
@model.ensure_appropriate_for_dsls.first.should be(false)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "has a (more or less) meaningful error message" do
|
|
24
|
+
@model.errors.on(:ensure_appropriate_for_dsls).should == [ 'may not be so good for domain specific languages' ]
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
describe "a good fit for game engine core", :shared => true do
|
|
30
|
+
it "is a good fit for game engine core" do
|
|
31
|
+
@model.should be_valid_for_implementing_a_game_engine_core
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "is appropriate for system programming" do
|
|
35
|
+
@model.ensure_appropriate_for_system_programming.should be(true)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
describe "a poor candidate for game engine core", :shared => true do
|
|
40
|
+
it "is a poor candidate for game engine core" do
|
|
41
|
+
@model.should_not be_valid_for_implementing_a_game_engine_core
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
describe "a good fit for kernel hacking", :shared => true do
|
|
48
|
+
it "is a good fit for kernel hacking" do
|
|
49
|
+
@model.should be_valid_for_hacking_on_the_kernel
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "is appropriate for system programming" do
|
|
53
|
+
@model.ensure_appropriate_for_system_programming.should be(true)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
describe "a poor candidate for kernel hacking", :shared => true do
|
|
59
|
+
it "is not a good fit for kernel hacking" do
|
|
60
|
+
@model.should_not be_valid_for_hacking_on_the_kernel
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
#
|
|
65
|
+
# Note that ProgrammingLanguage is not a DM resource,
|
|
66
|
+
# it is a plain old Ruby object (PORO), or simply put,
|
|
67
|
+
# just a "regular" Ruby class with a bunch of accessors.
|
|
68
|
+
#
|
|
69
|
+
# And yes, assumptions below are full of bullshit and
|
|
70
|
+
# author is a moron, and your favourite programming
|
|
71
|
+
# language is good for EVARYTHIN'!
|
|
72
|
+
#
|
|
73
|
+
#Please see spec_helper.rb next to this file
|
|
74
|
+
#
|
|
75
|
+
|
|
76
|
+
describe "C" do
|
|
77
|
+
before :all do
|
|
78
|
+
@model = ::DataMapper::Validations::Fixtures::ProgrammingLanguage.new(:name => "C",
|
|
79
|
+
:allows_system_calls => true,
|
|
80
|
+
:allows_manual_memory_management => true,
|
|
81
|
+
:approved_by_linus => true,
|
|
82
|
+
:compiler_excels_at_utilizing_cpu_cache => true,
|
|
83
|
+
:is_very_high_level => false,
|
|
84
|
+
:does_not_require_explicit_return_keyword => false,
|
|
85
|
+
:allows_operator_overload => false,
|
|
86
|
+
:allows_optional_parentheses => false
|
|
87
|
+
)
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it_should_behave_like "a good fit for kernel hacking"
|
|
91
|
+
|
|
92
|
+
it_should_behave_like "a good fit for game engine core"
|
|
93
|
+
|
|
94
|
+
it_should_behave_like "a poor candidate for DSLs"
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
describe "C++" do
|
|
100
|
+
before :all do
|
|
101
|
+
@model = ::DataMapper::Validations::Fixtures::ProgrammingLanguage.new(:name => "C++",
|
|
102
|
+
:allows_system_calls => true,
|
|
103
|
+
:allows_manual_memory_management => true,
|
|
104
|
+
:approved_by_linus => false,
|
|
105
|
+
:compiler_excels_at_utilizing_cpu_cache => true,
|
|
106
|
+
:is_very_high_level => false,
|
|
107
|
+
:does_not_require_explicit_return_keyword => false,
|
|
108
|
+
:allows_operator_overload => true,
|
|
109
|
+
:allows_optional_parentheses => false
|
|
110
|
+
)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it_should_behave_like "a poor candidate for kernel hacking"
|
|
114
|
+
|
|
115
|
+
it_should_behave_like "a good fit for game engine core"
|
|
116
|
+
|
|
117
|
+
it_should_behave_like "a poor candidate for DSLs"
|
|
118
|
+
|
|
119
|
+
it "is not approved by Linus" do
|
|
120
|
+
@model.valid?(:hacking_on_the_kernel)
|
|
121
|
+
@model.errors.on(:ensure_approved_by_linus_himself).should_not be_empty
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
describe "Ruby" do
|
|
127
|
+
before :all do
|
|
128
|
+
@model = ::DataMapper::Validations::Fixtures::ProgrammingLanguage.new(:name => "Ruby",
|
|
129
|
+
# well, C extensions do not really count
|
|
130
|
+
:allows_system_calls => false,
|
|
131
|
+
:allows_manual_memory_management => false,
|
|
132
|
+
:approved_by_linus => false,
|
|
133
|
+
:compiler_excels_at_utilizing_cpu_cache => false,
|
|
134
|
+
:is_very_high_level => true,
|
|
135
|
+
:does_not_require_explicit_return_keyword => true,
|
|
136
|
+
:allows_operator_overload => true,
|
|
137
|
+
:allows_optional_parentheses => true
|
|
138
|
+
)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it_should_behave_like "a good fit for DSLs"
|
|
142
|
+
|
|
143
|
+
it_should_behave_like "a poor candidate for kernel hacking"
|
|
144
|
+
|
|
145
|
+
it_should_behave_like "a poor candidate for game engine core"
|
|
146
|
+
|
|
147
|
+
it "has a (more or less) meaningful error message" do
|
|
148
|
+
@model.valid?(:doing_system_programming)
|
|
149
|
+
@model.errors.on(:ensure_appropriate_for_system_programming).should == [ 'try something that is closer to the metal' ]
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
describe "Scala" do
|
|
155
|
+
before :all do
|
|
156
|
+
@model = ::DataMapper::Validations::Fixtures::ProgrammingLanguage.new(:name => "Scala",
|
|
157
|
+
:allows_system_calls => false,
|
|
158
|
+
:allows_manual_memory_management => false,
|
|
159
|
+
:approved_by_linus => false,
|
|
160
|
+
:compiler_excels_at_utilizing_cpu_cache => false,
|
|
161
|
+
:is_very_high_level => true,
|
|
162
|
+
:does_not_require_explicit_return_keyword => true,
|
|
163
|
+
:allows_operator_overload => true,
|
|
164
|
+
:allows_optional_parentheses => true
|
|
165
|
+
)
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
it_should_behave_like "a good fit for DSLs"
|
|
169
|
+
|
|
170
|
+
it_should_behave_like "a poor candidate for kernel hacking"
|
|
171
|
+
|
|
172
|
+
it_should_behave_like "a poor candidate for game engine core"
|
|
173
|
+
|
|
174
|
+
it "has a (more or less) meaningful error message" do
|
|
175
|
+
@model.valid?(:doing_system_programming)
|
|
176
|
+
@model.errors.on(:ensure_appropriate_for_system_programming).should == [ 'try something that is closer to the metal' ]
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
describe "Haskell" do
|
|
183
|
+
before :all do
|
|
184
|
+
@model = ::DataMapper::Validations::Fixtures::ProgrammingLanguage.new(:name => "Haskell",
|
|
185
|
+
:allows_system_calls => false,
|
|
186
|
+
:allows_manual_memory_management => false,
|
|
187
|
+
:approved_by_linus => false,
|
|
188
|
+
:compiler_excels_at_utilizing_cpu_cache => true,
|
|
189
|
+
:is_very_high_level => true,
|
|
190
|
+
:does_not_require_explicit_return_keyword => true,
|
|
191
|
+
# operators are not different from any other function
|
|
192
|
+
:allows_operator_overload => true,
|
|
193
|
+
# or, allows explicit parentheses? who cares, we
|
|
194
|
+
# are just trying to come up with a relatively
|
|
195
|
+
# non-stupid spec example
|
|
196
|
+
:allows_optional_parentheses => true
|
|
197
|
+
)
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
it_should_behave_like "a good fit for DSLs"
|
|
201
|
+
|
|
202
|
+
it_should_behave_like "a poor candidate for kernel hacking"
|
|
203
|
+
|
|
204
|
+
it_should_behave_like "a poor candidate for game engine core"
|
|
205
|
+
|
|
206
|
+
it "has a (more or less) meaningful error message" do
|
|
207
|
+
@model.valid?(:doing_system_programming)
|
|
208
|
+
@model.errors.on(:ensure_appropriate_for_system_programming).should == [ 'try something that is closer to the metal' ]
|
|
209
|
+
end
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
describe 'DataMapper::Validations::Fixtures::Event' do
|
|
214
|
+
before :all do
|
|
215
|
+
DataMapper::Validations::Fixtures::Event.auto_migrate!
|
|
216
|
+
|
|
217
|
+
@model = DataMapper::Validations::Fixtures::Event.new(:name => "Fools day 2009")
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
describe "with start time before end time" do
|
|
221
|
+
before :all do
|
|
222
|
+
@model.starts_at = DateTime.new(2009, 4, 1, 00, 00, 01)
|
|
223
|
+
@model.ends_at = DateTime.new(2009, 4, 1, 23, 59, 59)
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
it_should_behave_like "valid model"
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
describe "with start time after end time" do
|
|
230
|
+
before :all do
|
|
231
|
+
@model.starts_at = DateTime.new(2009, 4, 1, 23, 59, 59)
|
|
232
|
+
@model.ends_at = DateTime.new(2009, 4, 1, 00, 00, 01)
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
it_should_behave_like "invalid model"
|
|
236
|
+
|
|
237
|
+
it "uses custom error message for property starts_at" do
|
|
238
|
+
@model.errors.on(:starts_at).should == [ 'Start time cannot be after end time' ]
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|