shoulda 2.10.1 → 2.10.2

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 (85) hide show
  1. data/CONTRIBUTION_GUIDELINES.rdoc +4 -6
  2. data/README.rdoc +14 -12
  3. data/lib/shoulda.rb +1 -1
  4. data/lib/shoulda/action_controller.rb +0 -2
  5. data/lib/shoulda/action_controller/macros.rb +38 -75
  6. data/lib/shoulda/action_controller/matchers/respond_with_content_type_matcher.rb +4 -0
  7. data/lib/shoulda/action_controller/matchers/set_session_matcher.rb +1 -1
  8. data/lib/shoulda/action_view/macros.rb +6 -1
  9. data/lib/shoulda/active_record/assertions.rb +4 -4
  10. data/lib/shoulda/active_record/helpers.rb +0 -13
  11. data/lib/shoulda/active_record/macros.rb +50 -127
  12. data/lib/shoulda/active_record/matchers.rb +2 -1
  13. data/lib/shoulda/active_record/matchers/allow_mass_assignment_of_matcher.rb +1 -1
  14. data/lib/shoulda/active_record/matchers/allow_value_matcher.rb +5 -5
  15. data/lib/shoulda/active_record/matchers/association_matcher.rb +3 -3
  16. data/lib/shoulda/active_record/matchers/{have_index_matcher.rb → have_db_index_matcher.rb} +15 -8
  17. data/lib/shoulda/active_record/matchers/have_named_scope_matcher.rb +3 -0
  18. data/lib/shoulda/active_record/matchers/validate_format_of_matcher.rb +67 -0
  19. data/lib/shoulda/active_record/matchers/validation_matcher.rb +1 -0
  20. data/lib/shoulda/assertions.rb +18 -6
  21. data/lib/shoulda/context.rb +99 -1
  22. data/lib/shoulda/macros.rb +83 -23
  23. data/lib/shoulda/private_helpers.rb +1 -8
  24. data/lib/shoulda/test_unit.rb +3 -0
  25. data/test/fail_macros.rb +6 -1
  26. data/test/functional/posts_controller_test.rb +17 -21
  27. data/test/functional/users_controller_test.rb +1 -1
  28. data/test/matchers/active_record/allow_mass_assignment_of_matcher_test.rb +1 -1
  29. data/test/matchers/active_record/allow_value_matcher_test.rb +24 -1
  30. data/test/matchers/active_record/association_matcher_test.rb +8 -3
  31. data/test/matchers/active_record/ensure_inclusion_of_matcher_test.rb +1 -1
  32. data/test/matchers/active_record/ensure_length_of_matcher_test.rb +1 -1
  33. data/test/matchers/active_record/have_db_column_matcher_test.rb +1 -1
  34. data/test/matchers/active_record/{have_index_matcher_test.rb → have_db_index_matcher_test.rb} +24 -7
  35. data/test/matchers/active_record/have_named_scope_matcher_test.rb +1 -1
  36. data/test/matchers/active_record/have_readonly_attributes_matcher_test.rb +1 -1
  37. data/test/matchers/active_record/validate_acceptance_of_matcher_test.rb +1 -1
  38. data/test/matchers/active_record/validate_format_of_matcher_test.rb +39 -0
  39. data/test/matchers/active_record/validate_numericality_of_matcher_test.rb +1 -1
  40. data/test/matchers/active_record/validate_presence_of_matcher_test.rb +1 -1
  41. data/test/matchers/active_record/validate_uniqueness_of_matcher_test.rb +1 -1
  42. data/test/matchers/controller/assign_to_matcher_test.rb +1 -1
  43. data/test/matchers/controller/filter_param_matcher_test.rb +1 -1
  44. data/test/matchers/controller/render_with_layout_matcher_test.rb +1 -1
  45. data/test/matchers/controller/respond_with_content_type_matcher_test.rb +12 -7
  46. data/test/matchers/controller/respond_with_matcher_test.rb +1 -1
  47. data/test/matchers/controller/route_matcher_test.rb +1 -1
  48. data/test/matchers/controller/set_session_matcher_test.rb +9 -2
  49. data/test/matchers/controller/set_the_flash_matcher.rb +1 -1
  50. data/test/model_builder.rb +1 -1
  51. data/test/other/autoload_macro_test.rb +1 -1
  52. data/test/other/context_test.rb +45 -1
  53. data/test/other/convert_to_should_syntax_test.rb +3 -3
  54. data/test/other/helpers_test.rb +102 -3
  55. data/test/other/private_helpers_test.rb +6 -8
  56. data/test/other/should_test.rb +8 -3
  57. data/test/rails_root/app/controllers/{application.rb → application_controller.rb} +0 -0
  58. data/test/rails_root/app/controllers/posts_controller.rb +1 -0
  59. data/test/rails_root/app/models/pets/cat.rb +7 -0
  60. data/test/rails_root/app/models/profile.rb +2 -0
  61. data/test/rails_root/app/models/registration.rb +2 -0
  62. data/test/rails_root/app/models/user.rb +3 -0
  63. data/test/rails_root/config/boot.rb +6 -5
  64. data/test/rails_root/config/environment.rb +5 -1
  65. data/test/rails_root/db/migrate/20090506203502_create_profiles.rb +12 -0
  66. data/test/rails_root/db/migrate/20090506203536_create_registrations.rb +14 -0
  67. data/test/rails_root/db/migrate/20090513104502_create_cats.rb +12 -0
  68. data/test/rails_root/test/shoulda_macros/custom_macro.rb +1 -1
  69. data/test/rails_root/vendor/gems/gem_with_macro-0.0.1/shoulda_macros/gem_macro.rb +1 -1
  70. data/test/rails_root/vendor/plugins/plugin_with_macro/shoulda_macros/plugin_macro.rb +1 -1
  71. data/test/rspec_test.rb +1 -1
  72. data/test/test_helper.rb +3 -10
  73. data/test/unit/address_test.rb +2 -2
  74. data/test/unit/cat_test.rb +7 -0
  75. data/test/unit/dog_test.rb +2 -3
  76. data/test/unit/flea_test.rb +1 -1
  77. data/test/unit/post_test.rb +2 -2
  78. data/test/unit/product_test.rb +2 -6
  79. data/test/unit/tag_test.rb +2 -2
  80. data/test/unit/tagging_test.rb +1 -1
  81. data/test/unit/user_test.rb +18 -8
  82. metadata +15 -9
  83. data/lib/shoulda/action_controller/helpers.rb +0 -47
  84. data/test/rails_root/log/sqlite3.log +0 -0
  85. data/test/rails_root/log/test.log +0 -0
@@ -7,14 +7,7 @@ module Shoulda # :nodoc:
7
7
  opts = (args.last.is_a?(Hash) ? args.pop : {})
8
8
  wanted.each {|w| ret << opts.delete(w)}
9
9
  raise ArgumentError, "Unsupported options given: #{opts.keys.join(', ')}" unless opts.keys.empty?
10
- return *ret
11
- end
12
-
13
- # Returns the model class constant, as determined by the test class name.
14
- #
15
- # class TestUser; model_class; end => User
16
- def model_class
17
- self.name.gsub(/Test$/, '').constantize
10
+ return wanted.size == 1 ? ret.first : ret
18
11
  end
19
12
  end
20
13
  end
@@ -1,3 +1,5 @@
1
+ require 'test/unit'
2
+
1
3
  require 'shoulda/context'
2
4
  require 'shoulda/proc_extensions'
3
5
  require 'shoulda/assertions'
@@ -9,6 +11,7 @@ require 'shoulda/rails' if defined? RAILS_ROOT
9
11
  module Test # :nodoc: all
10
12
  module Unit
11
13
  class TestCase
14
+ include Shoulda::InstanceMethods
12
15
  extend Shoulda::ClassMethods
13
16
  include Shoulda::Assertions
14
17
  extend Shoulda::Macros
@@ -13,7 +13,12 @@ module Shoulda
13
13
  # end
14
14
  def should_fail(&block)
15
15
  context "should fail when trying to run:" do
16
- Shoulda.expected_exceptions = [Test::Unit::AssertionFailedError]
16
+ if defined?(Test::Unit::AssertionFailedError)
17
+ failures = [Test::Unit::AssertionFailedError]
18
+ elsif defined?(MiniTest::Assertion)
19
+ failures = [MiniTest::Assertion]
20
+ end
21
+ Shoulda.expected_exceptions = failures
17
22
  yield block
18
23
  Shoulda.expected_exceptions = nil
19
24
  end
@@ -4,7 +4,7 @@ require 'posts_controller'
4
4
  # Re-raise errors caught by the controller.
5
5
  class PostsController; def rescue_action(e) raise e end; end
6
6
 
7
- class PostsControllerTest < Test::Unit::TestCase
7
+ class PostsControllerTest < ActionController::TestCase
8
8
  fixtures :all
9
9
 
10
10
  def setup
@@ -43,14 +43,12 @@ class PostsControllerTest < Test::Unit::TestCase
43
43
  get :index, :user_id => users(:first)
44
44
  end
45
45
  should_respond_with :success
46
- should_assign_to :user, :class => User, :equals => 'users(:first)'
46
+ should_assign_to :user, :class => User
47
+ should_render_template :index
47
48
  should_assign_to(:user) { users(:first) }
48
49
  should_fail do
49
50
  should_assign_to :user, :class => Post
50
51
  end
51
- should_fail do
52
- should_assign_to :user, :equals => 'posts(:first)'
53
- end
54
52
  should_fail do
55
53
  should_assign_to(:user) { posts(:first) }
56
54
  end
@@ -69,20 +67,11 @@ class PostsControllerTest < Test::Unit::TestCase
69
67
  should_respond_with_content_type 'application/rss+xml'
70
68
  should_respond_with_content_type :rss
71
69
  should_respond_with_content_type /rss/
72
- context "deprecated" do # to avoid redefining a test
73
- should_return_from_session :special, "'$2 off your next purchase'"
74
- end
75
- should_fail do
76
- should_return_from_session :special, "'not special'"
77
- end
78
70
  should_set_session(:mischief) { nil }
79
- should_return_from_session :malarky, "nil"
80
- should_set_session :special, "'$2 off your next purchase'"
81
- should_set_session :special_user_id, '@user.id'
82
- context "with a block" do
83
- should_set_session(:special_user_id) { @user.id }
84
- end
85
- should_fail do # to avoid redefining a test
71
+ should_set_session(:special) { '$2 off your next purchase' }
72
+ should_set_session(:special_user_id) { @user.id }
73
+ should_set_session(:false_var) { false }
74
+ should_fail do
86
75
  should_set_session(:special_user_id) { 'value' }
87
76
  end
88
77
  should_assign_to :user, :posts
@@ -96,11 +85,17 @@ class PostsControllerTest < Test::Unit::TestCase
96
85
  should_render_with_layout :wide
97
86
  end
98
87
  should_assign_to :false_flag
88
+ should_set_the_flash_to nil
89
+ should_fail do
90
+ should_set_the_flash_to /.*/
91
+ end
99
92
  end
100
93
 
101
94
  context "on GET to #new" do
102
95
  setup { get :new, :user_id => users(:first) }
103
96
  should_render_without_layout
97
+ should_not_set_the_flash
98
+ should_render_a_form
104
99
  end
105
100
 
106
101
  context "on POST to #create" do
@@ -110,14 +105,15 @@ class PostsControllerTest < Test::Unit::TestCase
110
105
  :body => 'blah blah blah' }
111
106
  end
112
107
 
113
- should_redirect_to 'user_post_url(@post.user, @post)'
114
108
  should_redirect_to('the created post') { user_post_url(users(:first),
115
109
  assigns(:post)) }
116
110
  should_fail do
117
- should_redirect_to 'user_posts_url(@post.user)'
111
+ should_redirect_to('elsewhere') { user_posts_url(users(:first)) }
118
112
  end
113
+
114
+ should_set_the_flash_to /success/
119
115
  should_fail do
120
- should_redirect_to('elsewhere') { user_posts_url(users(:first)) }
116
+ should_not_set_the_flash
121
117
  end
122
118
  end
123
119
  end
@@ -4,7 +4,7 @@ require 'users_controller'
4
4
  # Re-raise errors caught by the controller.
5
5
  class UsersController; def rescue_action(e) raise e end; end
6
6
 
7
- class UsersControllerTest < Test::Unit::TestCase
7
+ class UsersControllerTest < ActionController::TestCase
8
8
  fixtures :all
9
9
 
10
10
  def setup
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class AllowMassAssignmentOfMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class AllowMassAssignmentOfMatcherTest < ActiveSupport::TestCase # :nodoc:
4
4
 
5
5
  context "an attribute that is blacklisted from mass-assignment" do
6
6
  setup do
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class AllowValueMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class AllowValueMatcherTest < ActiveSupport::TestCase # :nodoc:
4
4
 
5
5
  context "an attribute with a format validation" do
6
6
  setup do
@@ -38,4 +38,27 @@ class AllowValueMatcherTest < Test::Unit::TestCase # :nodoc:
38
38
  end
39
39
  end
40
40
 
41
+ context "an attribute with several validations" do
42
+ setup do
43
+ define_model :example, :attr => :string do
44
+ validates_presence_of :attr
45
+ validates_length_of :attr, :within => 1..5
46
+ validates_numericality_of :attr, :greater_than_or_equal_to => 1,
47
+ :less_than_or_equal_to => 50000
48
+ end
49
+ @model = Example.new
50
+ end
51
+
52
+ should "allow a good value" do
53
+ assert_accepts allow_value("12345").for(:attr), @model
54
+ end
55
+
56
+ bad_values = [nil, "", "abc", "0", "50001", "123456"]
57
+ bad_values.each do |value|
58
+ should "not allow a bad value (#{value.inspect})" do
59
+ assert_rejects allow_value(value).for(:attr), @model
60
+ end
61
+ end
62
+ end
63
+
41
64
  end
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class AssociationMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class AssociationMatcherTest < ActiveSupport::TestCase # :nodoc:
4
4
 
5
5
  context "belong_to" do
6
6
  setup do
@@ -126,7 +126,9 @@ class AssociationMatcherTest < Test::Unit::TestCase # :nodoc:
126
126
  define_model :parent do
127
127
  has_many :children
128
128
  end
129
- assert_rejects @matcher.through(:conceptions), Parent.new
129
+ assert_rejects @matcher.through(:conceptions),
130
+ Parent.new,
131
+ :message => /does not have any relationship to conceptions/
130
132
  end
131
133
 
132
134
  should "reject an association that has the wrong :through option" do
@@ -137,9 +139,12 @@ class AssociationMatcherTest < Test::Unit::TestCase # :nodoc:
137
139
  end
138
140
  define_model :parent do
139
141
  has_many :conceptions
142
+ has_many :relationships
140
143
  has_many :children, :through => :conceptions
141
144
  end
142
- assert_rejects @matcher.through(:relationships), Parent.new
145
+ assert_rejects @matcher.through(:relationships),
146
+ Parent.new,
147
+ :message => /through relationships, but got it through conceptions/
143
148
  end
144
149
 
145
150
  should "accept an association with a valid :dependent option" do
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class EnsureInclusionOfMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class EnsureInclusionOfMatcherTest < ActiveSupport::TestCase # :nodoc:
4
4
 
5
5
  context "an attribute which must be included in a range" do
6
6
  setup do
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class EnsureLengthOfMatcher < Test::Unit::TestCase # :nodoc:
3
+ class EnsureLengthOfMatcher < ActiveSupport::TestCase # :nodoc:
4
4
 
5
5
  context "an attribute with a non-zero minimum length validation" do
6
6
  setup do
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class HaveDbColumnMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class HaveDbColumnMatcherTest < ActiveSupport::TestCase # :nodoc:
4
4
 
5
5
  context "have_db_column" do
6
6
  setup do
@@ -1,10 +1,10 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class HaveIndexMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class HaveDbIndexMatcherTest < ActiveSupport::TestCase # :nodoc:
4
4
 
5
- context "have_index" do
5
+ context "have_db_index" do
6
6
  setup do
7
- @matcher = have_index(:age)
7
+ @matcher = have_db_index(:age)
8
8
  end
9
9
 
10
10
  should "accept an existing index" do
@@ -22,9 +22,9 @@ class HaveIndexMatcherTest < Test::Unit::TestCase # :nodoc:
22
22
  end
23
23
  end
24
24
 
25
- context "have_index with unique option" do
25
+ context "have_db_index with unique option" do
26
26
  setup do
27
- @matcher = have_index(:ssn).unique(true)
27
+ @matcher = have_db_index(:ssn).unique(true)
28
28
  end
29
29
 
30
30
  should "accept an index of correct unique" do
@@ -46,9 +46,9 @@ class HaveIndexMatcherTest < Test::Unit::TestCase # :nodoc:
46
46
  end
47
47
  end
48
48
 
49
- context "have_index on multiple columns" do
49
+ context "have_db_index on multiple columns" do
50
50
  setup do
51
- @matcher = have_index([:geocodable_type, :geocodable_id])
51
+ @matcher = have_db_index([:geocodable_type, :geocodable_id])
52
52
  end
53
53
 
54
54
  should "accept an existing index" do
@@ -70,5 +70,22 @@ class HaveIndexMatcherTest < Test::Unit::TestCase # :nodoc:
70
70
  assert_rejects @matcher, Geocoding.new
71
71
  end
72
72
  end
73
+
74
+ should "join columns with and describing multiple columns" do
75
+ assert_match /on columns user_id and post_id/,
76
+ have_db_index([:user_id, :post_id]).description
77
+ end
78
+
79
+ should "describe a unique index as unique" do
80
+ assert_match /a unique index/, have_db_index(:user_id).unique(true).description
81
+ end
82
+
83
+ should "describe a non-unique index as non-unique" do
84
+ assert_match /a non-unique index/, have_db_index(:user_id).unique(false).description
85
+ end
86
+
87
+ should "not describe an index's uniqueness when it isn't important" do
88
+ assert_no_match /unique/, have_db_index(:user_id).description
89
+ end
73
90
 
74
91
  end
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class HaveNamedScopeMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class HaveNamedScopeMatcherTest < ActiveSupport::TestCase # :nodoc:
4
4
 
5
5
  context "an attribute with a named scope" do
6
6
  setup do
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class HaveReadonlyAttributesMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class HaveReadonlyAttributesMatcherTest < ActiveSupport::TestCase # :nodoc:
4
4
 
5
5
  context "an attribute that cannot be set after being saved" do
6
6
  setup do
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class ValidateAcceptanceOfMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class ValidateAcceptanceOfMatcherTest < ActiveSupport::TestCase # :nodoc:
4
4
 
5
5
  context "an attribute which must be accepted" do
6
6
  setup do
@@ -0,0 +1,39 @@
1
+ require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
+
3
+ class ValidateFormatOfMatcherTest < ActiveSupport::TestCase # :nodoc:
4
+
5
+
6
+ context "a postal code" do
7
+ setup do
8
+ define_model :example, :attr => :string do
9
+ validates_format_of :attr, :with => /^\d{5}$/
10
+ end
11
+ @model = Example.new
12
+ end
13
+
14
+ should "be valid" do
15
+ assert_accepts validate_format_of(:attr).with('12345'), @model
16
+ end
17
+
18
+ should "not be valid with alpha in zip" do
19
+ assert_rejects validate_format_of(:attr).not_with('1234a'), @model, :message=>"is invalid"
20
+ end
21
+
22
+ should "not be valid with to few digits" do
23
+ assert_rejects validate_format_of(:attr).not_with('1234'), @model, :message=>"is invalid"
24
+ end
25
+
26
+ should "not be valid with to many digits" do
27
+ assert_rejects validate_format_of(:attr).not_with('123456'), @model, :message=>"is invalid"
28
+ end
29
+
30
+ should "raise error if you try to call both with and not_with" do
31
+ assert_raise RuntimeError do
32
+ validate_format_of(:attr).not_with('123456').with('12345')
33
+ end
34
+ end
35
+
36
+ end
37
+
38
+
39
+ end
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class ValidateNumericalityOfMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class ValidateNumericalityOfMatcherTest < ActiveSupport::TestCase # :nodoc:
4
4
 
5
5
  context "a numeric attribute" do
6
6
  setup do
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class ValidatePresenceOfMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class ValidatePresenceOfMatcherTest < ActiveSupport::TestCase # :nodoc:
4
4
 
5
5
  context "a required attribute" do
6
6
  setup do
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class ValidateUniquenessOfMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class ValidateUniquenessOfMatcherTest < ActiveSupport::TestCase # :nodoc:
4
4
 
5
5
  context "a unique attribute" do
6
6
  setup do
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class AssignToMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class AssignToMatcherTest < ActionController::TestCase # :nodoc:
4
4
 
5
5
  context "a controller that assigns to an instance variable" do
6
6
  setup do
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class FilterParamMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class FilterParamMatcherTest < ActionController::TestCase # :nodoc:
4
4
 
5
5
  context "a controller that filters no parameters" do
6
6
  setup do
@@ -1,6 +1,6 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class RenderWithLayoutMatcherTest < Test::Unit::TestCase # :nodoc:
3
+ class RenderWithLayoutMatcherTest < ActionController::TestCase # :nodoc:
4
4
 
5
5
  context "a controller that renders with a layout" do
6
6
  setup do
@@ -1,27 +1,32 @@
1
1
  require File.join(File.dirname(__FILE__), '..', '..', 'test_helper')
2
2
 
3
- class RespondWithContentTypeMatcherTest < Test::Unit::TestCase # :nodoc:
4
-
3
+ class RespondWithContentTypeMatcherTest < ActionController::TestCase # :nodoc:
4
+
5
5
  context "a controller responding with content type :xml" do
6
6
  setup do
7
7
  @controller = build_response { render :xml => { :user => "thoughtbot" }.to_xml }
8
8
  end
9
-
9
+
10
10
  should "accept responding with content type :xml" do
11
11
  assert_accepts respond_with_content_type(:xml), @controller
12
12
  end
13
-
13
+
14
14
  should "accept responding with content type 'application/xml'" do
15
15
  assert_accepts respond_with_content_type('application/xml'), @controller
16
16
  end
17
-
17
+
18
18
  should "accept responding with content type /xml/" do
19
19
  assert_accepts respond_with_content_type(/xml/), @controller
20
20
  end
21
-
21
+
22
22
  should "reject responding with another content type" do
23
23
  assert_rejects respond_with_content_type(:json), @controller
24
24
  end
25
25
  end
26
-
26
+
27
+ should "generate the correct test name" do
28
+ assert_equal "respond with content type of application/xml",
29
+ respond_with_content_type(:xml).description
30
+ end
31
+
27
32
  end