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,37 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/numeric_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BasketballCourt' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BasketballCourt.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance
|
|
9
|
+
@model.valid?
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_should_behave_like "valid model"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
describe "with three point line distance of 6.8" do
|
|
16
|
+
before :all do
|
|
17
|
+
@model.three_point_line_distance = 6.8
|
|
18
|
+
@model.valid?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it_should_behave_like "valid model"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
describe "with three point line distance of 10.0" do
|
|
26
|
+
before :all do
|
|
27
|
+
@model.three_point_line_distance = 10.0
|
|
28
|
+
@model.valid?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it_should_behave_like "invalid model"
|
|
32
|
+
|
|
33
|
+
it "has a meaningful error message" do
|
|
34
|
+
@model.errors.on(:three_point_line_distance).should == [ 'Three point line distance must be less than 7.24' ]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/numeric_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::BasketballCourt' do
|
|
5
|
+
before :all do
|
|
6
|
+
DataMapper::Validations::Fixtures::BasketballCourt.auto_migrate!
|
|
7
|
+
|
|
8
|
+
@model = DataMapper::Validations::Fixtures::BasketballCourt.valid_instance
|
|
9
|
+
@model.valid?
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it_should_behave_like "valid model"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
describe "with length of 15.24" do
|
|
16
|
+
before :all do
|
|
17
|
+
@model.length = 15.24
|
|
18
|
+
@model.valid?
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it_should_behave_like "valid model"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
describe "with length of 20.0" do
|
|
26
|
+
before :all do
|
|
27
|
+
@model.length = 20.0
|
|
28
|
+
@model.valid?
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it_should_behave_like "invalid model"
|
|
32
|
+
|
|
33
|
+
it "has a meaningful error message" do
|
|
34
|
+
@model.errors.on(:length).should == [ 'Length must be less than or equal to 15.24' ]
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/primitive_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'DataMapper::Validations::Fixtures::MemoryObject' do
|
|
5
|
+
include DataMapper::Validations::Fixtures
|
|
6
|
+
|
|
7
|
+
before :all do
|
|
8
|
+
DataMapper::Validations::Fixtures::MemoryObject.auto_migrate!
|
|
9
|
+
|
|
10
|
+
@model = DataMapper::Validations::Fixtures::MemoryObject.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "with color given as a string" do
|
|
14
|
+
before :all do
|
|
15
|
+
@model.color = "grey"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "is valid" do
|
|
19
|
+
@model.should be_valid
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
describe "with color given as an object" do
|
|
25
|
+
before :all do
|
|
26
|
+
# we have to go through the back door
|
|
27
|
+
# since writer= method does typecasting
|
|
28
|
+
# and Object is casted to String
|
|
29
|
+
@model.instance_variable_set(:@color, Object.new)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "is NOT valid" do
|
|
33
|
+
@model.should_not be_valid
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
describe "with mark flag set to true" do
|
|
39
|
+
before :all do
|
|
40
|
+
@model.marked = true
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "is valid" do
|
|
44
|
+
@model.should be_valid
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
describe "with mark flag set to false" do
|
|
50
|
+
before :all do
|
|
51
|
+
@model.marked = false
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "is valid" do
|
|
55
|
+
@model.should be_valid
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
describe "with mark flag set to an object" do
|
|
60
|
+
before :all do
|
|
61
|
+
# go through the back door to avoid typecasting
|
|
62
|
+
@model.instance_variable_set(:@marked, Object.new)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "is NOT valid" do
|
|
66
|
+
@model.should_not be_valid
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
describe "with color set to nil" do
|
|
72
|
+
before :all do
|
|
73
|
+
# go through the back door to avoid typecasting
|
|
74
|
+
@model.color = nil
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "is valid" do
|
|
78
|
+
@model.should be_valid
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
describe "with mark flag set to nil" do
|
|
84
|
+
before :all do
|
|
85
|
+
@model.marked = nil
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
it "is valid" do
|
|
89
|
+
@model.should be_valid
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
module PureRubyObjects
|
|
4
|
+
# notice that it is a pure Ruby class, not a DataMapper resource
|
|
5
|
+
class Country
|
|
6
|
+
#
|
|
7
|
+
# Behaviors
|
|
8
|
+
#
|
|
9
|
+
|
|
10
|
+
include DataMapper::Validations
|
|
11
|
+
|
|
12
|
+
#
|
|
13
|
+
# Validations
|
|
14
|
+
#
|
|
15
|
+
|
|
16
|
+
validates_presence_of :name, :when => [:default, :adding_to_encyclopedia]
|
|
17
|
+
validates_presence_of :population, :when => :adding_to_encyclopedia, :message => Proc.new { |record|
|
|
18
|
+
"population really needs to be specified when adding %s to encyclopedia" % [record.class.name]
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
validates_length_of :name, :in => (4..50)
|
|
22
|
+
|
|
23
|
+
#
|
|
24
|
+
# API
|
|
25
|
+
#
|
|
26
|
+
|
|
27
|
+
attr_accessor :name, :population
|
|
28
|
+
|
|
29
|
+
def initialize(name, population = nil)
|
|
30
|
+
@name = name
|
|
31
|
+
@population = population
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
describe 'PureRubyObjects::Country' do
|
|
37
|
+
before do
|
|
38
|
+
# Powerset says so
|
|
39
|
+
@model = PureRubyObjects::Country.new("Italy", 58_147_733)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
describe "without name" do
|
|
43
|
+
before do
|
|
44
|
+
@model.name = nil
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it_should_behave_like "object invalid in default context"
|
|
48
|
+
|
|
49
|
+
it "is not valid in encyclopedia context" do
|
|
50
|
+
@model.should_not be_valid(:adding_to_encyclopedia)
|
|
51
|
+
@model.should_not be_valid_for_adding_to_encyclopedia
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
describe "without name and without population information" do
|
|
57
|
+
before do
|
|
58
|
+
@model.name = nil
|
|
59
|
+
@model.population = nil
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it_should_behave_like "object invalid in default context"
|
|
63
|
+
|
|
64
|
+
it "is not valid in encyclopedia context" do
|
|
65
|
+
@model.should_not be_valid(:adding_to_encyclopedia)
|
|
66
|
+
@model.should_not be_valid_for_adding_to_encyclopedia
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it "has a meaningful error message" do
|
|
70
|
+
# trigger validation => have errors on the object
|
|
71
|
+
@model.valid_for_adding_to_encyclopedia?
|
|
72
|
+
@model.errors.on(:population).should == ["population really needs to be specified when adding PureRubyObjects::Country to encyclopedia"]
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
describe "with name and without population information" do
|
|
78
|
+
before do
|
|
79
|
+
@model.population = nil
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it_should_behave_like "object valid in default context"
|
|
83
|
+
|
|
84
|
+
it "is not valid in encyclopedia context" do
|
|
85
|
+
@model.should_not be_valid(:adding_to_encyclopedia)
|
|
86
|
+
@model.should_not be_valid_for_adding_to_encyclopedia
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
describe "with name and population information" do
|
|
92
|
+
it_should_behave_like "object valid in default context"
|
|
93
|
+
|
|
94
|
+
it "is valid in encyclopedia context" do
|
|
95
|
+
@model.should be_valid(:adding_to_encyclopedia)
|
|
96
|
+
@model.should be_valid_for_adding_to_encyclopedia
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
describe "with a 2 characters long name" do
|
|
102
|
+
before do
|
|
103
|
+
@model.name = "It"
|
|
104
|
+
@model.valid?
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
it_should_behave_like "object invalid in default context"
|
|
108
|
+
|
|
109
|
+
it "has errors on name" do
|
|
110
|
+
@model.errors.on(:name).should_not be_empty
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it "is valid in encyclopedia context" do
|
|
114
|
+
@model.should be_valid(:adding_to_encyclopedia)
|
|
115
|
+
@model.should be_valid_for_adding_to_encyclopedia
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/required_field_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'required_field_validator/association_spec' do
|
|
5
|
+
|
|
6
|
+
before :all do
|
|
7
|
+
|
|
8
|
+
class ::Artist
|
|
9
|
+
|
|
10
|
+
include DataMapper::Resource
|
|
11
|
+
|
|
12
|
+
property :id, Serial
|
|
13
|
+
property :name, String, :auto_validation => false
|
|
14
|
+
|
|
15
|
+
has n, :albums
|
|
16
|
+
|
|
17
|
+
validates_presence_of :name
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
class ::Album
|
|
22
|
+
|
|
23
|
+
include DataMapper::Resource
|
|
24
|
+
|
|
25
|
+
property :id, Serial
|
|
26
|
+
property :name, String, :auto_validation => false
|
|
27
|
+
property :artist_id, Integer, :index => :artist
|
|
28
|
+
|
|
29
|
+
belongs_to :artist
|
|
30
|
+
|
|
31
|
+
validates_presence_of :name, :artist
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
DataMapper.finalize
|
|
36
|
+
|
|
37
|
+
if DataMapper.respond_to?(:auto_migrate!)
|
|
38
|
+
DataMapper.auto_migrate!
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
describe 'Album' do
|
|
44
|
+
|
|
45
|
+
before do
|
|
46
|
+
@artist = Artist.create(:name => "Oceanlab")
|
|
47
|
+
@album = @artist.albums.new(:name => "Sirens of the sea")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
describe 'with a missing artist' do
|
|
51
|
+
before do
|
|
52
|
+
@album.artist = nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'is not valid' do
|
|
56
|
+
@album.should_not be_valid
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'has a meaninful error messages on association key property' do
|
|
60
|
+
@album.valid?
|
|
61
|
+
@album.errors.on(:artist).should == [ 'Artist must not be blank' ]
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
describe 'with specified artist and name' do
|
|
66
|
+
it 'is valid' do
|
|
67
|
+
@album.should be_valid
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'integration/required_field_validator/spec_helper'
|
|
3
|
+
|
|
4
|
+
describe 'required_field_validator/boolean_type_value_spec' do
|
|
5
|
+
|
|
6
|
+
# keep in mind any ScmOperation has a default value for brand property
|
|
7
|
+
# so it is used
|
|
8
|
+
describe 'GitOperation' do
|
|
9
|
+
before :all do
|
|
10
|
+
GitOperation.auto_migrate!
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
before do
|
|
14
|
+
@operation = GitOperation.new(:network_connection => true,
|
|
15
|
+
:clean_working_copy => true,
|
|
16
|
+
:message => "I did it! I did it!! Hell yeah!!!")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe "without operation name" do
|
|
20
|
+
before do
|
|
21
|
+
@operation.name = nil
|
|
22
|
+
end
|
|
23
|
+
it_should_behave_like "unnamed SCM operation"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
describe "without network connection" do
|
|
29
|
+
before do
|
|
30
|
+
# now note that false make sense from readability
|
|
31
|
+
# point of view but is incorrect from validator
|
|
32
|
+
# point of view ;)
|
|
33
|
+
@operation.network_connection = nil
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "is valid for committing" do
|
|
37
|
+
@operation.should be_valid_for_committing
|
|
38
|
+
@operation.errors.on(:network_connection).should be_nil
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "is not valid for pushing" do
|
|
42
|
+
@operation.should_not be_valid_for_pushing
|
|
43
|
+
@operation.errors.on(:network_connection).
|
|
44
|
+
first[:pushing].should == 'though git is advanced, it cannot push without network connectivity'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "is not valid for pulling" do
|
|
48
|
+
@operation.should_not be_valid_for_pulling
|
|
49
|
+
@operation.errors.on(:network_connection).
|
|
50
|
+
first[:pulling].should == 'you must have network connectivity to pull from others'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "is not valid in default context" do
|
|
54
|
+
@operation.should_not be_valid
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
describe "with a network connection" do
|
|
59
|
+
before do
|
|
60
|
+
@operation.network_connection = false
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "is valid for committing" do
|
|
64
|
+
@operation.should be_valid_for_committing
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "is valid for pushing" do
|
|
68
|
+
@operation.should be_valid_for_pushing
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "is valid for pulling" do
|
|
72
|
+
@operation.should be_valid_for_pulling
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it "is not valid in default context" do
|
|
76
|
+
@operation.should_not be_valid
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
describe "WITHOUT a clean working copy" do
|
|
82
|
+
before do
|
|
83
|
+
@operation.clean_working_copy = nil
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "is valid for committing" do
|
|
87
|
+
@operation.should be_valid_for_committing
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it "is valid for pushing" do
|
|
91
|
+
@operation.should be_valid_for_pushing
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
it "is not valid for pulling" do
|
|
95
|
+
@operation.should_not be_valid_for_pulling
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it "is not valid in default context" do
|
|
99
|
+
@operation.should_not be_valid
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe "with a clean working copy" do
|
|
104
|
+
before do
|
|
105
|
+
@operation.clean_working_copy = true
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it "is valid for committing" do
|
|
109
|
+
@operation.should be_valid_for_committing
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "is valid for pushing" do
|
|
113
|
+
@operation.should be_valid_for_pushing
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it "is valid for pulling" do
|
|
117
|
+
@operation.should be_valid_for_pulling
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it "is not valid in default context" do
|
|
121
|
+
@operation.should_not be_valid
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
describe 'SubversionOperation' do
|
|
128
|
+
before do
|
|
129
|
+
SubversionOperation.auto_migrate!
|
|
130
|
+
|
|
131
|
+
@operation = SubversionOperation.new :name => "ci", :network_connection => true,
|
|
132
|
+
:message => "v1.5.8", :clean_working_copy => true
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
describe "without operation name" do
|
|
136
|
+
before do
|
|
137
|
+
@operation.name = nil
|
|
138
|
+
end
|
|
139
|
+
it_should_behave_like "unnamed SCM operation"
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
describe "without network connection" do
|
|
143
|
+
before do
|
|
144
|
+
@operation.network_connection = nil
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it "virtually useless" do
|
|
148
|
+
@operation.should_not be_valid_for_committing
|
|
149
|
+
@operation.should_not be_valid_for_log_viewing
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
end
|