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,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,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,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,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,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