shoulda-matchers 1.4.2 → 1.5.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 (135) hide show
  1. data/.travis.yml +11 -3
  2. data/Appraisals +3 -3
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +69 -70
  5. data/MIT-LICENSE +1 -1
  6. data/NEWS.md +22 -4
  7. data/README.md +3 -1
  8. data/Rakefile +9 -5
  9. data/features/step_definitions/rails_steps.rb +7 -7
  10. data/features/support/env.rb +1 -1
  11. data/gemfiles/3.0.gemfile +1 -1
  12. data/gemfiles/3.0.gemfile.lock +25 -22
  13. data/gemfiles/3.1.gemfile +1 -1
  14. data/gemfiles/3.1.gemfile.lock +27 -24
  15. data/gemfiles/3.2.gemfile +1 -1
  16. data/gemfiles/3.2.gemfile.lock +56 -52
  17. data/lib/shoulda/matchers/action_controller.rb +3 -2
  18. data/lib/shoulda/matchers/action_controller/assign_to_matcher.rb +10 -8
  19. data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +2 -4
  20. data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +3 -4
  21. data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +3 -4
  22. data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +6 -6
  23. data/lib/shoulda/matchers/action_controller/respond_with_content_type_matcher.rb +5 -2
  24. data/lib/shoulda/matchers/action_controller/respond_with_matcher.rb +2 -2
  25. data/lib/shoulda/matchers/action_controller/route_matcher.rb +12 -12
  26. data/lib/shoulda/matchers/action_controller/set_session_matcher.rb +3 -4
  27. data/lib/shoulda/matchers/action_controller/set_the_flash_matcher.rb +10 -11
  28. data/lib/shoulda/matchers/action_controller/strong_parameters_matcher.rb +121 -0
  29. data/lib/shoulda/matchers/action_mailer/have_sent_email_matcher.rb +7 -4
  30. data/lib/shoulda/matchers/active_model.rb +1 -1
  31. data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +8 -8
  32. data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +5 -4
  33. data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +3 -3
  34. data/lib/shoulda/matchers/active_model/ensure_inclusion_of_matcher.rb +2 -2
  35. data/lib/shoulda/matchers/active_model/exception_message_finder.rb +0 -1
  36. data/lib/shoulda/matchers/active_model/helpers.rb +16 -7
  37. data/lib/shoulda/matchers/active_model/only_integer_matcher.rb +3 -3
  38. data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +8 -6
  39. data/lib/shoulda/matchers/active_model/validate_format_of_matcher.rb +19 -10
  40. data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +4 -4
  41. data/lib/shoulda/matchers/active_model/validate_uniqueness_of_matcher.rb +19 -21
  42. data/lib/shoulda/matchers/active_model/validation_matcher.rb +7 -7
  43. data/lib/shoulda/matchers/active_model/validation_message_finder.rb +1 -1
  44. data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +5 -5
  45. data/lib/shoulda/matchers/active_record/association_matcher.rb +3 -3
  46. data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +11 -7
  47. data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +2 -2
  48. data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +5 -5
  49. data/lib/shoulda/matchers/active_record/query_the_database_matcher.rb +5 -2
  50. data/lib/shoulda/matchers/active_record/serialize_matcher.rb +3 -3
  51. data/lib/shoulda/matchers/assertion_error.rb +4 -1
  52. data/lib/shoulda/matchers/independent/delegate_matcher.rb +17 -7
  53. data/lib/shoulda/matchers/integrations/rspec.rb +19 -33
  54. data/lib/shoulda/matchers/version.rb +1 -1
  55. data/shoulda-matchers.gemspec +6 -4
  56. data/spec/shoulda/matchers/action_controller/assign_to_matcher_spec.rb +66 -0
  57. data/spec/shoulda/matchers/action_controller/filter_param_matcher_spec.rb +22 -0
  58. data/spec/shoulda/matchers/action_controller/redirect_to_matcher_spec.rb +42 -0
  59. data/spec/shoulda/matchers/action_controller/render_template_matcher_spec.rb +78 -0
  60. data/spec/shoulda/matchers/action_controller/render_with_layout_matcher_spec.rb +58 -0
  61. data/spec/shoulda/matchers/action_controller/respond_with_content_type_matcher_spec.rb +31 -0
  62. data/spec/shoulda/matchers/action_controller/respond_with_matcher_spec.rb +31 -0
  63. data/spec/shoulda/matchers/action_controller/route_matcher_spec.rb +65 -0
  64. data/spec/shoulda/matchers/action_controller/set_session_matcher_spec.rb +51 -0
  65. data/spec/shoulda/matchers/action_controller/set_the_flash_matcher_spec.rb +153 -0
  66. data/spec/shoulda/matchers/action_controller/strong_parameters_matcher_spec.rb +142 -0
  67. data/spec/shoulda/matchers/action_mailer/have_sent_email_spec.rb +324 -0
  68. data/spec/shoulda/matchers/active_model/allow_mass_assignment_of_matcher_spec.rb +111 -0
  69. data/spec/shoulda/matchers/active_model/allow_value_matcher_spec.rb +124 -0
  70. data/spec/shoulda/matchers/active_model/disallow_value_matcher_spec.rb +43 -0
  71. data/spec/shoulda/matchers/active_model/ensure_exclusion_of_matcher_spec.rb +74 -0
  72. data/spec/shoulda/matchers/active_model/ensure_inclusion_of_matcher_spec.rb +171 -0
  73. data/spec/shoulda/matchers/active_model/ensure_length_of_matcher_spec.rb +113 -0
  74. data/spec/shoulda/{active_model → matchers/active_model}/exception_message_finder_spec.rb +2 -2
  75. data/spec/shoulda/matchers/active_model/helpers_spec.rb +158 -0
  76. data/spec/shoulda/matchers/active_model/only_integer_matcher_spec.rb +52 -0
  77. data/spec/shoulda/matchers/active_model/validate_acceptance_of_matcher_spec.rb +41 -0
  78. data/spec/shoulda/matchers/active_model/validate_confirmation_of_matcher_spec.rb +41 -0
  79. data/spec/shoulda/matchers/active_model/validate_format_of_matcher_spec.rb +75 -0
  80. data/spec/shoulda/matchers/active_model/validate_numericality_of_matcher_spec.rb +73 -0
  81. data/spec/shoulda/matchers/active_model/validate_presence_of_matcher_spec.rb +127 -0
  82. data/spec/shoulda/matchers/active_model/validate_uniqueness_of_matcher_spec.rb +175 -0
  83. data/spec/shoulda/{active_model → matchers/active_model}/validation_message_finder_spec.rb +0 -1
  84. data/spec/shoulda/matchers/active_record/accept_nested_attributes_for_matcher_spec.rb +106 -0
  85. data/spec/shoulda/matchers/active_record/association_matcher_spec.rb +534 -0
  86. data/spec/shoulda/matchers/active_record/have_db_column_matcher_spec.rb +111 -0
  87. data/spec/shoulda/matchers/active_record/have_db_index_matcher_spec.rb +78 -0
  88. data/spec/shoulda/matchers/active_record/have_readonly_attributes_matcher_spec.rb +41 -0
  89. data/spec/shoulda/{active_record → matchers/active_record}/query_the_database_matcher_spec.rb +10 -10
  90. data/spec/shoulda/matchers/active_record/serialize_matcher_spec.rb +86 -0
  91. data/spec/shoulda/{independent → matchers/independent}/delegate_matcher_spec.rb +55 -34
  92. data/spec/spec_helper.rb +1 -2
  93. data/spec/support/active_model_versions.rb +4 -0
  94. data/spec/support/activemodel_helpers.rb +19 -0
  95. data/spec/support/controller_builder.rb +38 -12
  96. data/spec/support/model_builder.rb +8 -2
  97. metadata +106 -98
  98. data/spec/fixtures/addresses.yml +0 -3
  99. data/spec/fixtures/friendships.yml +0 -0
  100. data/spec/fixtures/posts.yml +0 -5
  101. data/spec/fixtures/products.yml +0 -0
  102. data/spec/fixtures/taggings.yml +0 -0
  103. data/spec/fixtures/tags.yml +0 -9
  104. data/spec/fixtures/users.yml +0 -6
  105. data/spec/shoulda/action_controller/assign_to_matcher_spec.rb +0 -63
  106. data/spec/shoulda/action_controller/filter_param_matcher_spec.rb +0 -20
  107. data/spec/shoulda/action_controller/redirect_to_matcher_spec.rb +0 -40
  108. data/spec/shoulda/action_controller/render_template_matcher_spec.rb +0 -69
  109. data/spec/shoulda/action_controller/render_with_layout_matcher_spec.rb +0 -55
  110. data/spec/shoulda/action_controller/respond_with_content_type_matcher_spec.rb +0 -28
  111. data/spec/shoulda/action_controller/respond_with_matcher_spec.rb +0 -83
  112. data/spec/shoulda/action_controller/route_matcher_spec.rb +0 -65
  113. data/spec/shoulda/action_controller/set_session_matcher_spec.rb +0 -46
  114. data/spec/shoulda/action_controller/set_the_flash_matcher_spec.rb +0 -130
  115. data/spec/shoulda/action_mailer/have_sent_email_spec.rb +0 -333
  116. data/spec/shoulda/active_model/allow_mass_assignment_of_matcher_spec.rb +0 -115
  117. data/spec/shoulda/active_model/allow_value_matcher_spec.rb +0 -131
  118. data/spec/shoulda/active_model/disallow_value_matcher_spec.rb +0 -65
  119. data/spec/shoulda/active_model/ensure_exclusion_of_matcher_spec.rb +0 -79
  120. data/spec/shoulda/active_model/ensure_inclusion_of_matcher_spec.rb +0 -181
  121. data/spec/shoulda/active_model/ensure_length_of_matcher_spec.rb +0 -138
  122. data/spec/shoulda/active_model/helpers_spec.rb +0 -129
  123. data/spec/shoulda/active_model/only_integer_matcher_spec.rb +0 -69
  124. data/spec/shoulda/active_model/validate_acceptance_of_matcher_spec.rb +0 -43
  125. data/spec/shoulda/active_model/validate_confirmation_of_matcher_spec.rb +0 -48
  126. data/spec/shoulda/active_model/validate_format_of_matcher_spec.rb +0 -79
  127. data/spec/shoulda/active_model/validate_numericality_of_matcher_spec.rb +0 -112
  128. data/spec/shoulda/active_model/validate_presence_of_matcher_spec.rb +0 -135
  129. data/spec/shoulda/active_model/validate_uniqueness_of_matcher_spec.rb +0 -154
  130. data/spec/shoulda/active_record/accept_nested_attributes_for_matcher_spec.rb +0 -84
  131. data/spec/shoulda/active_record/association_matcher_spec.rb +0 -642
  132. data/spec/shoulda/active_record/have_db_column_matcher_spec.rb +0 -185
  133. data/spec/shoulda/active_record/have_db_index_matcher_spec.rb +0 -105
  134. data/spec/shoulda/active_record/have_readonly_attributes_matcher_spec.rb +0 -46
  135. data/spec/shoulda/active_record/serialize_matcher_spec.rb +0 -81
@@ -29,7 +29,7 @@ module Shoulda
29
29
 
30
30
  def messages_description
31
31
  if errors.empty?
32
- "no errors"
32
+ 'no errors'
33
33
  else
34
34
  "errors: #{pretty_error_messages(validated_instance)}"
35
35
  end
@@ -50,11 +50,11 @@ module Shoulda
50
50
  update_only_correct?
51
51
  end
52
52
 
53
- def failure_message
53
+ def failure_message_for_should
54
54
  "Expected #{expectation} (#{@problem})"
55
55
  end
56
56
 
57
- def negative_failure_message
57
+ def failure_message_for_should_not
58
58
  "Did not expect #{expectation}"
59
59
  end
60
60
 
@@ -78,7 +78,7 @@ module Shoulda
78
78
  if config
79
79
  true
80
80
  else
81
- @problem = "is not declared"
81
+ @problem = 'is not declared'
82
82
  false
83
83
  end
84
84
  end
@@ -129,9 +129,9 @@ module Shoulda
129
129
 
130
130
  def should_or_should_not(value)
131
131
  if value
132
- "should"
132
+ 'should'
133
133
  else
134
- "should not"
134
+ 'should not'
135
135
  end
136
136
  end
137
137
  end
@@ -124,11 +124,11 @@ module Shoulda # :nodoc:
124
124
  validate_correct?
125
125
  end
126
126
 
127
- def failure_message
127
+ def failure_message_for_should
128
128
  "Expected #{expectation} (#{@missing})"
129
129
  end
130
130
 
131
- def negative_failure_message
131
+ def failure_message_for_should_not
132
132
  "Did not expect #{expectation}"
133
133
  end
134
134
 
@@ -260,7 +260,7 @@ module Shoulda # :nodoc:
260
260
  if !@validate && !reflection.options[:validate] || @validate == reflection.options[:validate]
261
261
  true
262
262
  else
263
- @missing = "#{@name} should have #{@validate} as validate"
263
+ @missing = "#{@name} should have :validate => #{@validate}"
264
264
  false
265
265
  end
266
266
  end
@@ -51,11 +51,11 @@ module Shoulda # :nodoc:
51
51
  correct_primary?
52
52
  end
53
53
 
54
- def failure_message
54
+ def failure_message_for_should
55
55
  "Expected #{expectation} (#{@missing})"
56
56
  end
57
57
 
58
- def negative_failure_message
58
+ def failure_message_for_should_not
59
59
  "Did not expect #{expectation}"
60
60
  end
61
61
 
@@ -149,11 +149,11 @@ module Shoulda # :nodoc:
149
149
  def correct_scale?
150
150
  return true unless @options.key?(:scale)
151
151
 
152
- if matched_column.scale.to_s == @options[:scale].to_s
152
+ if actual_scale.to_s == @options[:scale].to_s
153
153
  true
154
154
  else
155
- @missing = "#{model_class} has a db column named #{@column} " <<
156
- "of scale #{matched_column.scale}, not #{@options[:scale]}."
155
+ @missing = "#{model_class} has a db column named #{@column} "
156
+ @missing << "of scale #{actual_scale}, not #{@options[:scale]}."
157
157
  false
158
158
  end
159
159
  end
@@ -166,9 +166,9 @@ module Shoulda # :nodoc:
166
166
  else
167
167
  @missing = "#{model_class} has a db column named #{@column} "
168
168
  if @options[:primary]
169
- @missing << "that is not primary, but should be"
169
+ @missing << 'that is not primary, but should be'
170
170
  else
171
- @missing << "that is primary, but should not be"
171
+ @missing << 'that is primary, but should not be'
172
172
  end
173
173
  false
174
174
  end
@@ -182,6 +182,10 @@ module Shoulda # :nodoc:
182
182
  @subject.class
183
183
  end
184
184
 
185
+ def actual_scale
186
+ matched_column.scale
187
+ end
188
+
185
189
  def expectation
186
190
  expected = "#{model_class.name} to #{description}"
187
191
  end
@@ -37,11 +37,11 @@ module Shoulda # :nodoc:
37
37
  index_exists? && correct_unique?
38
38
  end
39
39
 
40
- def failure_message
40
+ def failure_message_for_should
41
41
  "Expected #{expectation} (#{@missing})"
42
42
  end
43
43
 
44
- def negative_failure_message
44
+ def failure_message_for_should_not
45
45
  "Did not expect #{expectation}"
46
46
  end
47
47
 
@@ -16,19 +16,19 @@ module Shoulda # :nodoc:
16
16
  @attribute = attribute.to_s
17
17
  end
18
18
 
19
- attr_reader :failure_message, :negative_failure_message
19
+ attr_reader :failure_message_for_should, :failure_message_for_should_not
20
20
 
21
21
  def matches?(subject)
22
22
  @subject = subject
23
23
  if readonly_attributes.include?(@attribute)
24
- @negative_failure_message = "Did not expect #{@attribute} to be read-only"
24
+ @failure_message_for_should_not = "Did not expect #{@attribute} to be read-only"
25
25
  true
26
26
  else
27
27
  if readonly_attributes.empty?
28
- @failure_message = "#{class_name} attribute #{@attribute} " <<
29
- "is not read-only"
28
+ @failure_message_for_should = "#{class_name} attribute #{@attribute} " <<
29
+ 'is not read-only'
30
30
  else
31
- @failure_message = "#{class_name} is making " <<
31
+ @failure_message_for_should = "#{class_name} is making " <<
32
32
  "#{readonly_attributes.to_a.to_sentence} " <<
33
33
  "read-only, but not #{@attribute}."
34
34
  end
@@ -1,3 +1,5 @@
1
+ require 'active_support/deprecation'
2
+
1
3
  module Shoulda # :nodoc:
2
4
  module Matchers
3
5
  module ActiveRecord # :nodoc:
@@ -20,6 +22,7 @@ module Shoulda # :nodoc:
20
22
 
21
23
  class QueryTheDatabaseMatcher # :nodoc:
22
24
  def initialize(times)
25
+ ActiveSupport::Deprecation.warn 'The query_the_database matcher is deprecated and will be removed in 2.0'
23
26
  @queries = []
24
27
  @options = {}
25
28
 
@@ -67,7 +70,7 @@ module Shoulda # :nodoc:
67
70
  end
68
71
  end
69
72
 
70
- def failure_message
73
+ def failure_message_for_should
71
74
  if @options.key?(:expected_query_count)
72
75
  "Expected ##{@options[:method_name]} to cause #{@options[:expected_query_count]} database queries but it actually caused #{@queries.length} queries:" + friendly_queries
73
76
  else
@@ -75,7 +78,7 @@ module Shoulda # :nodoc:
75
78
  end
76
79
  end
77
80
 
78
- def negative_failure_message
81
+ def failure_message_for_should_not
79
82
  if @options[:expected_query_count]
80
83
  "Expected ##{@options[:method_name]} to not cause #{@options[:expected_query_count]} database queries but it actually caused #{@queries.length} queries:" + friendly_queries
81
84
  else
@@ -1,7 +1,6 @@
1
1
  module Shoulda # :nodoc:
2
2
  module Matchers
3
3
  module ActiveRecord # :nodoc:
4
-
5
4
  # Ensure that the field becomes serialized.
6
5
  #
7
6
  # Options:
@@ -10,6 +9,7 @@ module Shoulda # :nodoc:
10
9
  # Example:
11
10
  # it { should serialize(:details) }
12
11
  # it { should serialize(:details).as(Hash) }
12
+ # it { should serialize(:details).as_instance_of(ExampleSerializer) }
13
13
  #
14
14
  def serialize(name)
15
15
  SerializeMatcher.new(name)
@@ -36,11 +36,11 @@ module Shoulda # :nodoc:
36
36
  serialization_valid? && type_valid?
37
37
  end
38
38
 
39
- def failure_message
39
+ def failure_message_for_should
40
40
  "Expected #{expectation} (#{@missing})"
41
41
  end
42
42
 
43
- def negative_failure_message
43
+ def failure_message_for_should_not
44
44
  "Did not expect #{expectation}"
45
45
  end
46
46
 
@@ -3,11 +3,14 @@ module Shoulda
3
3
  if Gem.ruby_version >= Gem::Version.new('1.8') && Gem.ruby_version < Gem::Version.new('1.9')
4
4
  require 'test/unit'
5
5
  AssertionError = Test::Unit::AssertionFailedError
6
+ elsif defined?(Test::Unit::AssertionFailedError)
7
+ # Test::Unit has been loaded already, so we use it
8
+ AssertionError = Test::Unit::AssertionFailedError
6
9
  elsif Gem.ruby_version >= Gem::Version.new("1.9")
7
10
  require 'minitest/unit'
8
11
  AssertionError = MiniTest::Assertion
9
12
  else
10
- raise "No unit test library available"
13
+ raise 'No unit test library available'
11
14
  end
12
15
  end
13
16
  end
@@ -1,4 +1,5 @@
1
1
  require 'bourne'
2
+ require 'active_support/deprecation'
2
3
 
3
4
  module Shoulda # :nodoc:
4
5
  module Matchers
@@ -10,12 +11,15 @@ module Shoulda # :nodoc:
10
11
  # it { should delegate_method(:deliver_mail).to(:mailman) }
11
12
  #
12
13
  # Options:
13
- # * <tt>:as</tt> - tests that the object being delegated to is called with a certain method (defaults to same name as delegating method)
14
- # * <tt>:with_arguments</tt> - tests that the method on the object being delegated to is called with certain arguments
14
+ # * <tt>:as</tt> - tests that the object being delegated to is called with a certain method
15
+ # (defaults to same name as delegating method)
16
+ # * <tt>:with_arguments</tt> - tests that the method on the object being delegated to is
17
+ # called with certain arguments
15
18
  #
16
19
  # Examples:
17
20
  # it { should delegate_method(:deliver_mail).to(:mailman).as(:deliver_with_haste)
18
- # it { should delegate_method(:deliver_mail).to(:mailman).with_arguments('221B Baker St.', :hastily => true)
21
+ # it { should delegate_method(:deliver_mail).to(:mailman).
22
+ # with_arguments('221B Baker St.', :hastily => true) }
19
23
  #
20
24
  def delegate_method(delegating_method)
21
25
  DelegateMatcher.new(delegating_method)
@@ -23,6 +27,7 @@ module Shoulda # :nodoc:
23
27
 
24
28
  class DelegateMatcher
25
29
  def initialize(delegating_method)
30
+ ActiveSupport::Deprecation.warn 'The delegate_method matcher is deprecated and will be removed in 2.0'
26
31
  @delegating_method = delegating_method
27
32
  end
28
33
 
@@ -37,12 +42,17 @@ module Shoulda # :nodoc:
37
42
  subject.stubs(@target_method).returns(stubbed_object)
38
43
  subject.send(@delegating_method)
39
44
 
40
- stubbed_object.should have_received(method_on_target).with(*@delegated_arguments)
41
- rescue NoMethodError, RSpec::Expectations::ExpectationNotMetError, Mocha::ExpectationError
45
+ matcher = Mocha::API::HaveReceived.new(method_on_target).with(*@delegated_arguments)
46
+ matcher.matches?(stubbed_object)
47
+ rescue NoMethodError, Mocha::ExpectationError
42
48
  false
43
49
  end
44
50
  end
45
51
 
52
+ def description
53
+ add_clarifications_to("delegate method ##{@delegating_method} to :#{@target_method}")
54
+ end
55
+
46
56
  def does_not_match?(subject)
47
57
  raise InvalidDelegateMatcher
48
58
  end
@@ -62,7 +72,7 @@ module Shoulda # :nodoc:
62
72
  self
63
73
  end
64
74
 
65
- def failure_message
75
+ def failure_message_for_should
66
76
  base = "Expected #{delegating_method_name} to delegate to #{target_method_name}"
67
77
  add_clarifications_to(base)
68
78
  end
@@ -75,7 +85,7 @@ module Shoulda # :nodoc:
75
85
  end
76
86
 
77
87
  if @method_on_target.present?
78
- message << " as :#{@method_on_target}"
88
+ message << " as ##{@method_on_target}"
79
89
  end
80
90
 
81
91
  message
@@ -1,42 +1,28 @@
1
1
  # :enddoc:
2
+ require 'rspec'
2
3
 
3
- require 'shoulda/matchers/independent'
4
- module RSpec::Matchers
5
- include Shoulda::Matchers::Independent
6
- end
4
+ RSpec.configure do |config|
5
+ require 'shoulda/matchers/independent'
6
+ config.include Shoulda::Matchers::Independent
7
7
 
8
- if defined?(::ActiveRecord)
9
- require 'shoulda/matchers/active_record'
10
- require 'shoulda/matchers/active_model'
11
- module RSpec::Matchers
12
- include Shoulda::Matchers::ActiveRecord
13
- include Shoulda::Matchers::ActiveModel
14
- end
15
- elsif defined?(::ActiveModel)
16
- require 'shoulda/matchers/active_model'
17
- module RSpec::Matchers
18
- include Shoulda::Matchers::ActiveModel
8
+ if defined?(::ActiveRecord)
9
+ require 'shoulda/matchers/active_record'
10
+ require 'shoulda/matchers/active_model'
11
+ config.include Shoulda::Matchers::ActiveRecord
12
+ config.include Shoulda::Matchers::ActiveModel
13
+
14
+ elsif defined?(::ActiveModel)
15
+ require 'shoulda/matchers/active_model'
16
+ config.include Shoulda::Matchers::ActiveModel
19
17
  end
20
- end
21
18
 
22
- if defined?(::ActionController)
23
- require 'shoulda/matchers/action_controller'
24
- module RSpec
25
- module Rails
26
- module ControllerExampleGroup
27
- include Shoulda::Matchers::ActionController
28
- end
29
- end
19
+ if defined?(::ActionController)
20
+ require 'shoulda/matchers/action_controller'
21
+ config.include Shoulda::Matchers::ActionController
30
22
  end
31
- end
32
23
 
33
- if defined?(::ActionMailer)
34
- require 'shoulda/matchers/action_mailer'
35
- module RSpec
36
- module Rails
37
- module MailerExampleGroup
38
- include Shoulda::Matchers::ActionMailer
39
- end
40
- end
24
+ if defined?(::ActionMailer)
25
+ require 'shoulda/matchers/action_mailer'
26
+ config.include Shoulda::Matchers::ActionMailer
41
27
  end
42
28
  end
@@ -1,5 +1,5 @@
1
1
  module Shoulda
2
2
  module Matchers
3
- VERSION = '1.4.2'.freeze
3
+ VERSION = '1.5.0'.freeze
4
4
  end
5
5
  end
@@ -10,6 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.email = "support@thoughtbot.com"
11
11
  s.homepage = "http://thoughtbot.com/community/"
12
12
  s.summary = "Making tests easy on the fingers and eyes"
13
+ s.license = "MIT"
13
14
  s.description = "Making tests easy on the fingers and eyes"
14
15
 
15
16
  s.files = `git ls-files`.split("\n")
@@ -18,13 +19,14 @@ Gem::Specification.new do |s|
18
19
  s.require_paths = ["lib"]
19
20
 
20
21
  s.add_dependency('activesupport', '>= 3.0.0')
21
- s.add_dependency('bourne', '~> 1.1.2')
22
+ s.add_dependency('bourne', '~> 1.2.0')
22
23
 
23
- s.add_development_dependency('appraisal', '~> 0.4.0')
24
+ s.add_development_dependency('appraisal', '~> 0.4')
24
25
  s.add_development_dependency('aruba')
25
26
  s.add_development_dependency('bundler', '~> 1.1')
26
- s.add_development_dependency('cucumber', '~> 1.1.9')
27
+ s.add_development_dependency('cucumber', '~> 1.1')
27
28
  s.add_development_dependency('rails', '~> 3.0')
28
- s.add_development_dependency('rake', '~> 0.9.2')
29
+ s.add_development_dependency('rake', '>= 0.9.2')
29
30
  s.add_development_dependency('rspec-rails', '~> 2.8.1')
31
+ s.add_development_dependency('strong_parameters')
30
32
  end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ describe Shoulda::Matchers::ActionController::AssignToMatcher do
4
+ it 'includes the actual class in the failure message' do
5
+ define_class(:WrongClass) do
6
+ def to_s
7
+ 'wrong class'
8
+ end
9
+ end
10
+
11
+ controller = build_response { @var = WrongClass.new }
12
+ matcher = assign_to(:var).with_kind_of(Fixnum)
13
+ matcher.matches?(controller)
14
+
15
+ matcher.failure_message_for_should.should =~ /but got wrong class \(WrongClass\)$/
16
+ end
17
+
18
+ context 'a controller that assigns to an instance variable' do
19
+ it 'accepts assigning to that variable' do
20
+ controller.should assign_to(:var)
21
+ end
22
+
23
+ it 'accepts assigning to that variable with the correct class' do
24
+ controller.should assign_to(:var).with_kind_of(String)
25
+ end
26
+
27
+ it 'rejects assigning to that variable with another class' do
28
+ controller.should_not assign_to(:var).with_kind_of(Fixnum)
29
+ end
30
+
31
+ it 'accepts assigning the correct value to that variable' do
32
+ controller.should assign_to(:var).with('value')
33
+ end
34
+
35
+ it 'rejects assigning another value to that variable' do
36
+ controller.should_not assign_to(:var).with('other')
37
+ end
38
+
39
+ it 'rejects assigning to another variable' do
40
+ controller.should_not assign_to(:other)
41
+ end
42
+
43
+ it 'accepts assigning to the same value in the test context' do
44
+ expected = 'value'
45
+ controller.should assign_to(:var).in_context(self).with { expected }
46
+ end
47
+
48
+ it 'rejects assigning to the another value in the test context' do
49
+ expected = 'other'
50
+ controller.should_not assign_to(:var).in_context(self).with { expected }
51
+ end
52
+
53
+ def controller
54
+ build_response { @var = 'value' }
55
+ end
56
+ end
57
+
58
+ context 'a controller that assigns a nil value to an instance variable' do
59
+ it 'accepts assigning to that variable' do
60
+ controller = build_response do
61
+ @var = nil
62
+ end
63
+ controller.should assign_to(:var)
64
+ end
65
+ end
66
+ end