shoulda-matchers 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +1 -0
- data/Appraisals +3 -3
- data/Gemfile.lock +2 -2
- data/NEWS.md +20 -0
- data/README.md +1 -1
- data/gemfiles/3.0.gemfile +1 -1
- data/gemfiles/3.0.gemfile.lock +27 -27
- data/gemfiles/3.1.gemfile +1 -1
- data/gemfiles/3.1.gemfile.lock +36 -36
- data/gemfiles/3.2.gemfile +1 -1
- data/gemfiles/3.2.gemfile.lock +35 -35
- data/lib/shoulda/matchers/action_controller/set_the_flash_matcher.rb +4 -1
- data/lib/shoulda/matchers/active_model.rb +14 -0
- data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +45 -21
- data/lib/shoulda/matchers/active_model/ensure_exclusion_of_matcher.rb +28 -6
- data/lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb +22 -4
- data/lib/shoulda/matchers/active_model/ensure_length_of_matcher.rb +1 -0
- data/lib/shoulda/matchers/active_model/errors.rb +7 -0
- data/lib/shoulda/matchers/active_model/exception_message_finder.rb +58 -0
- data/lib/shoulda/matchers/active_model/validate_uniqueness_of_matcher.rb +9 -1
- data/lib/shoulda/matchers/active_model/validation_matcher.rb +27 -8
- data/lib/shoulda/matchers/active_model/validation_message_finder.rb +69 -0
- data/lib/shoulda/matchers/active_record/association_matcher.rb +14 -5
- data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +8 -5
- data/lib/shoulda/matchers/version.rb +1 -1
- data/shoulda-matchers.gemspec +1 -1
- data/spec/shoulda/action_controller/set_the_flash_matcher_spec.rb +6 -0
- data/spec/shoulda/active_model/allow_value_matcher_spec.rb +32 -0
- data/spec/shoulda/active_model/ensure_exclusion_of_matcher_spec.rb +23 -1
- data/spec/shoulda/active_model/ensure_inclusion_of_matcher_spec.rb +49 -0
- data/spec/shoulda/active_model/ensure_length_of_matcher_spec.rb +13 -0
- data/spec/shoulda/active_model/exception_message_finder_spec.rb +112 -0
- data/spec/shoulda/active_model/validate_presence_of_matcher_spec.rb +15 -0
- data/spec/shoulda/active_model/validation_message_finder_spec.rb +107 -0
- data/spec/shoulda/active_record/association_matcher_spec.rb +8 -0
- data/spec/shoulda/active_record/have_db_index_matcher_spec.rb +17 -0
- metadata +18 -6
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Shoulda::Matchers::ActiveModel::ValidationMessageFinder do
|
4
|
+
context '#allow_description' do
|
5
|
+
it 'describes its attribute' do
|
6
|
+
finder = build_finder(:attribute => :attr)
|
7
|
+
|
8
|
+
description = finder.allow_description('allowed values')
|
9
|
+
|
10
|
+
description.should == 'allow attr to be set to allowed values'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
context '#expected_message_from' do
|
15
|
+
it 'returns the message as-is' do
|
16
|
+
finder = build_finder
|
17
|
+
|
18
|
+
message = finder.expected_message_from('some message')
|
19
|
+
|
20
|
+
message.should == 'some message'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context '#has_messages?' do
|
25
|
+
it 'has messages when some validations fail' do
|
26
|
+
finder = build_finder(:format => /abc/, :value => 'xyz')
|
27
|
+
|
28
|
+
result = finder.has_messages?
|
29
|
+
|
30
|
+
result.should be_true
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'has no messages when all validations pass' do
|
34
|
+
finder = build_finder(:format => /abc/, :value => 'abc')
|
35
|
+
|
36
|
+
result = finder.has_messages?
|
37
|
+
|
38
|
+
result.should be_false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context '#messages' do
|
43
|
+
it 'returns errors for the given attribute' do
|
44
|
+
finder = build_finder(:format => /abc/, :value => 'xyz')
|
45
|
+
|
46
|
+
messages = finder.messages
|
47
|
+
|
48
|
+
messages.should == ['is invalid']
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context '#messages_description' do
|
53
|
+
it 'describes errors for the given attribute' do
|
54
|
+
value = 'xyz'
|
55
|
+
finder = build_finder(
|
56
|
+
:attribute => :attr,
|
57
|
+
:format => /abc/,
|
58
|
+
:value => 'xyz'
|
59
|
+
)
|
60
|
+
|
61
|
+
description = finder.messages_description
|
62
|
+
|
63
|
+
expected_messages = ['attr is invalid ("xyz")']
|
64
|
+
description.should == "errors: #{expected_messages}"
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'describes errors when there are none' do
|
68
|
+
finder = build_finder(:format => /abc/, :value => 'abc')
|
69
|
+
|
70
|
+
description = finder.messages_description
|
71
|
+
|
72
|
+
description.should == 'no errors'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context '#source_description' do
|
77
|
+
it 'describes the source of its messages' do
|
78
|
+
finder = build_finder
|
79
|
+
|
80
|
+
description = finder.source_description
|
81
|
+
|
82
|
+
description.should == 'errors'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def build_finder(arguments = {})
|
87
|
+
arguments[:attribute] ||= :attr
|
88
|
+
instance = build_instance_validating(
|
89
|
+
arguments[:attribute],
|
90
|
+
arguments[:format] || /abc/,
|
91
|
+
arguments[:value] || 'abc'
|
92
|
+
)
|
93
|
+
Shoulda::Matchers::ActiveModel::ValidationMessageFinder.new(
|
94
|
+
instance,
|
95
|
+
arguments[:attribute]
|
96
|
+
)
|
97
|
+
end
|
98
|
+
|
99
|
+
def build_instance_validating(attribute, format, value)
|
100
|
+
model_class = define_model(:example, attribute => :string) do
|
101
|
+
attr_accessible attribute
|
102
|
+
validates_format_of attribute, :with => format
|
103
|
+
end
|
104
|
+
|
105
|
+
model_class.new(attribute => value)
|
106
|
+
end
|
107
|
+
end
|
@@ -370,6 +370,14 @@ describe Shoulda::Matchers::ActiveRecord::AssociationMatcher do
|
|
370
370
|
Person.new.should_not @matcher
|
371
371
|
end
|
372
372
|
|
373
|
+
it "should accept an association with an existing custom foreign key" do
|
374
|
+
define_model :detail, :detailed_person_id => :integer
|
375
|
+
define_model :person do
|
376
|
+
has_one :detail, :foreign_key => :detailed_person_id
|
377
|
+
end
|
378
|
+
Person.new.should @matcher.with_foreign_key(:detailed_person_id)
|
379
|
+
end
|
380
|
+
|
373
381
|
it "should reject an association with a bad :as option" do
|
374
382
|
define_model :detail, :detailable_id => :integer,
|
375
383
|
:detailable_type => :string
|
@@ -85,4 +85,21 @@ describe Shoulda::Matchers::ActiveRecord::HaveDbIndexMatcher do
|
|
85
85
|
it "should not context an index's uniqueness when it isn't important" do
|
86
86
|
have_db_index(:user_id).description.should_not =~ /unique/
|
87
87
|
end
|
88
|
+
|
89
|
+
it "allows an IndexDefinition to have a truthy value for unique" do
|
90
|
+
db_connection = create_table 'superheros' do |table|
|
91
|
+
table.integer :age
|
92
|
+
end
|
93
|
+
db_connection.add_index :superheros, :age
|
94
|
+
define_model_class 'Superhero'
|
95
|
+
|
96
|
+
@matcher = have_db_index(:age).unique(true)
|
97
|
+
|
98
|
+
index_definition = stub("ActiveRecord::ConnectionAdapters::IndexDefinition",
|
99
|
+
:unique => 7,
|
100
|
+
:name => :age)
|
101
|
+
@matcher.stubs(:matched_index => index_definition)
|
102
|
+
|
103
|
+
Superhero.new.should @matcher
|
104
|
+
end
|
88
105
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shoulda-matchers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2012-
|
17
|
+
date: 2012-10-05 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: activesupport
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
requirements:
|
88
88
|
- - ~>
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: 1.1
|
90
|
+
version: '1.1'
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
97
97
|
- !ruby/object:Gem::Version
|
98
|
-
version: 1.1
|
98
|
+
version: '1.1'
|
99
99
|
- !ruby/object:Gem::Dependency
|
100
100
|
name: cucumber
|
101
101
|
requirement: !ruby/object:Gem::Requirement
|
@@ -206,6 +206,8 @@ files:
|
|
206
206
|
- lib/shoulda/matchers/active_model/ensure_exclusion_of_matcher.rb
|
207
207
|
- lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb
|
208
208
|
- lib/shoulda/matchers/active_model/ensure_length_of_matcher.rb
|
209
|
+
- lib/shoulda/matchers/active_model/errors.rb
|
210
|
+
- lib/shoulda/matchers/active_model/exception_message_finder.rb
|
209
211
|
- lib/shoulda/matchers/active_model/helpers.rb
|
210
212
|
- lib/shoulda/matchers/active_model/validate_acceptance_of_matcher.rb
|
211
213
|
- lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb
|
@@ -214,6 +216,7 @@ files:
|
|
214
216
|
- lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb
|
215
217
|
- lib/shoulda/matchers/active_model/validate_uniqueness_of_matcher.rb
|
216
218
|
- lib/shoulda/matchers/active_model/validation_matcher.rb
|
219
|
+
- lib/shoulda/matchers/active_model/validation_message_finder.rb
|
217
220
|
- lib/shoulda/matchers/active_record.rb
|
218
221
|
- lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb
|
219
222
|
- lib/shoulda/matchers/active_record/association_matcher.rb
|
@@ -250,6 +253,7 @@ files:
|
|
250
253
|
- spec/shoulda/active_model/ensure_exclusion_of_matcher_spec.rb
|
251
254
|
- spec/shoulda/active_model/ensure_inclusion_of_matcher_spec.rb
|
252
255
|
- spec/shoulda/active_model/ensure_length_of_matcher_spec.rb
|
256
|
+
- spec/shoulda/active_model/exception_message_finder_spec.rb
|
253
257
|
- spec/shoulda/active_model/helpers_spec.rb
|
254
258
|
- spec/shoulda/active_model/validate_acceptance_of_matcher_spec.rb
|
255
259
|
- spec/shoulda/active_model/validate_confirmation_of_matcher_spec.rb
|
@@ -257,6 +261,7 @@ files:
|
|
257
261
|
- spec/shoulda/active_model/validate_numericality_of_matcher_spec.rb
|
258
262
|
- spec/shoulda/active_model/validate_presence_of_matcher_spec.rb
|
259
263
|
- spec/shoulda/active_model/validate_uniqueness_of_matcher_spec.rb
|
264
|
+
- spec/shoulda/active_model/validation_message_finder_spec.rb
|
260
265
|
- spec/shoulda/active_record/accept_nested_attributes_for_matcher_spec.rb
|
261
266
|
- spec/shoulda/active_record/association_matcher_spec.rb
|
262
267
|
- spec/shoulda/active_record/have_db_column_matcher_spec.rb
|
@@ -282,15 +287,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
282
287
|
- - ! '>='
|
283
288
|
- !ruby/object:Gem::Version
|
284
289
|
version: '0'
|
290
|
+
segments:
|
291
|
+
- 0
|
292
|
+
hash: 813377459972856034
|
285
293
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
286
294
|
none: false
|
287
295
|
requirements:
|
288
296
|
- - ! '>='
|
289
297
|
- !ruby/object:Gem::Version
|
290
298
|
version: '0'
|
299
|
+
segments:
|
300
|
+
- 0
|
301
|
+
hash: 813377459972856034
|
291
302
|
requirements: []
|
292
303
|
rubyforge_project:
|
293
|
-
rubygems_version: 1.8.
|
304
|
+
rubygems_version: 1.8.24
|
294
305
|
signing_key:
|
295
306
|
specification_version: 3
|
296
307
|
summary: Making tests easy on the fingers and eyes
|
@@ -321,6 +332,7 @@ test_files:
|
|
321
332
|
- spec/shoulda/active_model/ensure_exclusion_of_matcher_spec.rb
|
322
333
|
- spec/shoulda/active_model/ensure_inclusion_of_matcher_spec.rb
|
323
334
|
- spec/shoulda/active_model/ensure_length_of_matcher_spec.rb
|
335
|
+
- spec/shoulda/active_model/exception_message_finder_spec.rb
|
324
336
|
- spec/shoulda/active_model/helpers_spec.rb
|
325
337
|
- spec/shoulda/active_model/validate_acceptance_of_matcher_spec.rb
|
326
338
|
- spec/shoulda/active_model/validate_confirmation_of_matcher_spec.rb
|
@@ -328,6 +340,7 @@ test_files:
|
|
328
340
|
- spec/shoulda/active_model/validate_numericality_of_matcher_spec.rb
|
329
341
|
- spec/shoulda/active_model/validate_presence_of_matcher_spec.rb
|
330
342
|
- spec/shoulda/active_model/validate_uniqueness_of_matcher_spec.rb
|
343
|
+
- spec/shoulda/active_model/validation_message_finder_spec.rb
|
331
344
|
- spec/shoulda/active_record/accept_nested_attributes_for_matcher_spec.rb
|
332
345
|
- spec/shoulda/active_record/association_matcher_spec.rb
|
333
346
|
- spec/shoulda/active_record/have_db_column_matcher_spec.rb
|
@@ -341,4 +354,3 @@ test_files:
|
|
341
354
|
- spec/support/controller_builder.rb
|
342
355
|
- spec/support/mailer_builder.rb
|
343
356
|
- spec/support/model_builder.rb
|
344
|
-
has_rdoc:
|