rspec-rails 1.2.7.1 → 1.2.9

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 (67) hide show
  1. data/Contribute.rdoc +4 -0
  2. data/History.rdoc +26 -1
  3. data/Manifest.txt +2 -3
  4. data/Rakefile +16 -15
  5. data/TODO.txt +2 -3
  6. data/Upgrade.rdoc +34 -0
  7. data/generators/integration_spec/templates/integration_spec.rb +1 -1
  8. data/generators/rspec/rspec_generator.rb +0 -1
  9. data/generators/rspec/templates/rspec.rake +1 -39
  10. data/generators/rspec/templates/spec_helper.rb +5 -2
  11. data/generators/rspec_controller/rspec_controller_generator.rb +2 -0
  12. data/generators/rspec_controller/templates/controller_spec.rb +1 -1
  13. data/generators/rspec_controller/templates/helper_spec.rb +1 -1
  14. data/generators/rspec_controller/templates/view_spec.rb +1 -1
  15. data/generators/rspec_model/templates/model_spec.rb +1 -1
  16. data/generators/rspec_scaffold/templates/controller_spec.rb +1 -1
  17. data/generators/rspec_scaffold/templates/edit_erb_spec.rb +1 -1
  18. data/generators/rspec_scaffold/templates/helper_spec.rb +1 -1
  19. data/generators/rspec_scaffold/templates/index_erb_spec.rb +1 -1
  20. data/generators/rspec_scaffold/templates/new_erb_spec.rb +1 -1
  21. data/generators/rspec_scaffold/templates/routing_spec.rb +16 -46
  22. data/generators/rspec_scaffold/templates/show_erb_spec.rb +1 -1
  23. data/lib/spec/rails/example/controller_example_group.rb +12 -1
  24. data/lib/spec/rails/example/routing_helpers.rb +16 -20
  25. data/lib/spec/rails/extensions/action_controller/rescue.rb +2 -2
  26. data/lib/spec/rails/extensions/action_controller/test_case.rb +1 -1
  27. data/lib/spec/rails/matchers.rb +1 -0
  28. data/lib/spec/rails/matchers/render_template.rb +8 -2
  29. data/lib/spec/rails/matchers/route_to.rb +149 -0
  30. data/lib/spec/rails/version.rb +3 -3
  31. data/spec/autotest/mappings_spec.rb +1 -1
  32. data/spec/resources/controllers/controller_spec_controller.rb +5 -1
  33. data/spec/resources/controllers/render_spec_controller.rb +4 -0
  34. data/spec/spec/rails/example/assigns_hash_proxy_spec.rb +1 -1
  35. data/spec/spec/rails/example/configuration_spec.rb +1 -1
  36. data/spec/spec/rails/example/controller_example_group_spec.rb +15 -7
  37. data/spec/spec/rails/example/controller_isolation_spec.rb +22 -9
  38. data/spec/spec/rails/example/cookies_proxy_spec.rb +1 -1
  39. data/spec/spec/rails/example/error_handling_spec.rb +1 -1
  40. data/spec/spec/rails/example/example_group_factory_spec.rb +1 -1
  41. data/spec/spec/rails/example/helper_example_group_spec.rb +2 -2
  42. data/spec/spec/rails/example/model_example_group_spec.rb +1 -1
  43. data/spec/spec/rails/example/routing_example_group_spec.rb +3 -2
  44. data/spec/spec/rails/example/shared_routing_example_group_examples.rb +224 -31
  45. data/spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb +1 -1
  46. data/spec/spec/rails/example/view_example_group_spec.rb +1 -1
  47. data/spec/spec/rails/extensions/action_view_base_spec.rb +1 -1
  48. data/spec/spec/rails/extensions/active_record_spec.rb +1 -1
  49. data/spec/spec/rails/interop/testcase_spec.rb +1 -1
  50. data/spec/spec/rails/matchers/ar_be_valid_spec.rb +11 -37
  51. data/spec/spec/rails/matchers/assert_select_spec.rb +1 -1
  52. data/spec/spec/rails/matchers/errors_on_spec.rb +1 -1
  53. data/spec/spec/rails/matchers/have_text_spec.rb +1 -1
  54. data/spec/spec/rails/matchers/include_text_spec.rb +1 -1
  55. data/spec/spec/rails/matchers/redirect_to_spec.rb +1 -1
  56. data/spec/spec/rails/matchers/render_template_spec.rb +8 -1
  57. data/spec/spec/rails/matchers/should_change_spec.rb +1 -1
  58. data/spec/spec/rails/mocks/mock_model_spec.rb +1 -1
  59. data/spec/spec/rails/mocks/stub_model_spec.rb +1 -1
  60. data/spec/spec/rails/sample_modified_fixture.rb +1 -1
  61. data/spec/spec/rails/sample_spec.rb +1 -1
  62. data/spec/spec/rails/spec_spec.rb +1 -1
  63. data/spec/spec_helper.rb +23 -24
  64. metadata +11 -12
  65. data/generators/rspec/templates/script/spec_server +0 -9
  66. data/lib/spec/rails/spec_server.rb +0 -135
  67. data/spec/spec/rails/spec_server_spec.rb +0 -108
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  class CookiesProxyExamplesController < ActionController::Base
4
4
  def index
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
  require 'controller_spec_controller'
3
3
 
4
4
  ['integration', 'isolation'].each do |mode|
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  module Spec
4
4
  module Example
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
  Spec::Runner.configuration.global_fixtures = :people
3
3
 
4
4
  describe ExplicitHelper, :type => :helper do
@@ -148,7 +148,7 @@ module Spec
148
148
  helper_name :explicit
149
149
 
150
150
  before(:each) do
151
- if Rails::VERSION::STRING <= "2.1"
151
+ if ::Rails::VERSION::STRING < "2.2"
152
152
  pending("need to get this new feature working against pre 2.2 versions of rails")
153
153
  end
154
154
  end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  module Spec
4
4
  module Rails
@@ -1,9 +1,10 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
  require 'controller_spec_controller'
3
3
  require File.join(File.dirname(__FILE__), "/shared_routing_example_group_examples.rb")
4
4
 
5
5
  describe "Routing Examples", :type => :routing do
6
6
 
7
7
  include RoutingExampleGroupSpec
8
-
8
+ include RouteToExampleGroupSpec
9
+ include BeRoutableExampleGroupSpec
9
10
  end
@@ -2,43 +2,236 @@ class CustomRouteSpecController < ActionController::Base; end
2
2
  class RspecOnRailsSpecsController < ActionController::Base; end
3
3
 
4
4
  share_as :RoutingExampleGroupSpec do
5
- it "support custom routes" do
6
- route_for(:controller => "custom_route_spec", :action => "custom_route").
7
- should == "/custom_route"
8
- end
5
+ describe "using backward compatible route_for()" do
6
+ it "translates GET-only paths to be explicit" do
7
+ self.should_receive(:assert_routing).with(hash_including(:method => :get), anything, {}, anything)
8
+ route_for(:controller => "controller_spec", :action => "some_action").
9
+ should == "/controller_spec/some_action"
10
+ end
9
11
 
10
- it "support existing routes" do
11
- route_for(:controller => "controller_spec", :action => "some_action").
12
- should == "/controller_spec/some_action"
13
- end
12
+ it "uses assert_routing to specify that the :controller and :action are involved" do
13
+ @route = { :controller => "controller_spec", :action => "some_action" }
14
+ self.should_receive(:assert_routing).with(anything, @route, {}, anything)
15
+ route_for(@route).
16
+ should == "/controller_spec/some_action"
17
+ end
14
18
 
15
- it "support existing routes with additional parameters" do
16
- route_for(:controller => "controller_spec", :action => "some_action", :param => '1').
17
- should == "/controller_spec/some_action?param=1"
18
- end
19
-
20
- it "recognize routes with methods besides :get" do
21
- route_for(:controller => "rspec_on_rails_specs", :action => "update", :id => "37").
22
- should == {:path => "/rspec_on_rails_specs/37", :method => :put}
23
- end
19
+ it "passes extra args through to assert_routing" do
20
+ @route = { :controller => "controller_spec", :action => "some_action" }
21
+ self.should_receive(:assert_routing).with(anything, anything, {}, { :a => "1", :b => "2" } )
22
+ route_for(@route).
23
+ should == "/controller_spec/some_action?a=1&b=2"
24
+ end
24
25
 
25
- it "generate params for custom routes" do
26
- params_from(:get, '/custom_route').
27
- should == {:controller => "custom_route_spec", :action => "custom_route"}
28
- end
26
+ it "passes with an existing route" do
27
+ route_for(:controller => "controller_spec", :action => "some_action").
28
+ should == "/controller_spec/some_action"
29
+ end
30
+
31
+ it "passes with an existing route with additional parameters" do
32
+ route_for(:controller => "controller_spec", :action => "some_action", :param => '1').
33
+ should == "/controller_spec/some_action?param=1"
34
+ end
35
+
36
+ it "recognizes routes with methods besides :get" do
37
+ should_receive(:assert_routing).with(hash_including(:method => :put), anything, {}, anything)
38
+
39
+ route_for(:controller => "rspec_on_rails_specs", :action => "update", :id => "37").
40
+ should == {:path => "/rspec_on_rails_specs/37", :method => :put}
41
+ end
42
+
43
+ describe "failing due to bad path:" do
44
+ it "raises routing error and suggests should_not be_routeable()" do
45
+ lambda {
46
+ route_for(:controller => "rspec_on_rails_specs", :action => "nonexistent", :id => "37") ==
47
+ {:path => "/rspec_on_rails_specs/bad_route/37", :method => :put}
48
+ }.should raise_error( ActionController::RoutingError, /suggest.*should_not be_routable/ )
49
+ end
50
+ end
51
+
52
+ describe "failing due to params mismatch:" do
53
+ it "re-raises assertion and suggests should_not be_routeable()" do
54
+ lambda {
55
+ route_for(:controller => "rspec_on_rails_specs", :action => "nonexistent", :id => "37") ==
56
+ {:path => "/rspec_on_rails_specs/37", :method => :put}
57
+ }.should raise_error( ::Test::Unit::AssertionFailedError, /suggest.*should_not be_routable/ )
58
+ end
59
+ end
60
+
61
+ describe "failing due to wrong HTTP method" do
62
+ it "raises method error and suggest should_not be_routable()" do
63
+ lambda {
64
+ route_for(:controller => "rspec_on_rails_specs", :action => "update", :id => "37").
65
+ should == {:path => "/rspec_on_rails_specs/37", :method => :post}
66
+ }.should raise_error(ActionController::MethodNotAllowed) { |error| error.should_not =~ /should_not be_routable/ }
67
+ end
68
+ end
69
+
70
+ it "generates params for custom routes" do
71
+ # redundant, deprecated
72
+ params_from(:get, '/custom_route').
73
+ should == {:controller => "custom_route_spec", :action => "custom_route"}
74
+ end
75
+
76
+ it "generates params for existing routes" do
77
+ # redundant, deprecated
78
+ params_from(:get, '/controller_spec/some_action').
79
+ should == {:controller => "controller_spec", :action => "some_action"}
80
+ end
29
81
 
30
- it "generate params for existing routes" do
31
- params_from(:get, '/controller_spec/some_action').
32
- should == {:controller => "controller_spec", :action => "some_action"}
82
+ it "generates params for existing routes with a query parameters" do
83
+ # redundant, deprecated
84
+ params_from(:get, '/controller_spec/some_action?param=1').
85
+ should == {:controller => "controller_spec", :action => "some_action", :param => '1'}
86
+ end
87
+
88
+ it "generates params for existing routes with multiple query parameters" do
89
+ # redundant, deprecated
90
+ params_from(:get, '/controller_spec/some_action?param1=1&param2=2').
91
+ should == {:controller => "controller_spec", :action => "some_action", :param1 => '1', :param2 => '2' }
92
+ end
33
93
  end
94
+ end
95
+
96
+ share_as :BeRoutableExampleGroupSpec do
97
+ describe "using should_not be_routable()" do
98
+ it "passes for a bad route" do
99
+ { :put => "/rspec_on_rails_specs/bad_route/37" }.
100
+ should_not be_routable
101
+ end
102
+ it "passes for a bad route having an arg" do
103
+ { :put => "/rspec_on_rails_specs/bad_route/37?some_arg=1" }.
104
+ should_not be_routable
105
+ end
106
+ describe "when assert_recognizes throws exceptions:" do
107
+ [ ActionController::RoutingError, ActionController::MethodNotAllowed ].each do |e|
108
+ it "passes on #{e}" do
109
+ self.stub!( :assert_recognizes ).and_return { raise e, "stubbed exception" }
110
+ { :get => "/rspec_on_rails_spec/bad_route/37" }.should_not be_routable
111
+ end
112
+ it "should be_routable on usual Test::Unit::AssertionFailedError" do
113
+ # <{}> is predictable because of the way we call assert_recognizes during be_routable().
114
+ self.stub!( :assert_recognizes ).and_return { raise ::Test::Unit::AssertionFailedError, "<{a}> did not match <{}>" }
115
+ { :get => "/rspec_on_rails_spec/arguably_bad_route" }.should be_routable
116
+ end
117
+ it "should re-raise on unusual Test::Unit::AssertionFailedError" do
118
+ self.stub!( :assert_recognizes ).and_return { raise ::Test::Unit::AssertionFailedError, "some other message" }
119
+ expect { { :get => "/rspec_on_rails_spec/weird_case_route/" }.should be_routable }.
120
+ to raise_error
121
+ end
122
+ end
123
+ end
124
+ it "test should be_routable" do
125
+ { :get => "/custom_route" }.
126
+ should be_routable
127
+ end
128
+
129
+ it "recommends route_to() on failure with should()" do
130
+ lambda {
131
+ { :get => "/nonexisting_route" }.
132
+ should be_routable
133
+ }.should raise_error( /route_to\(/)
134
+ end
34
135
 
35
- it "generate params for an existing route with a query parameter" do
36
- params_from(:get, '/controller_spec/some_action?param=1').
37
- should == {:controller => "controller_spec", :action => "some_action", :param => '1'}
136
+ it "shows actual route that was generated on failure with should_not()" do
137
+ begin
138
+ { :get => "/custom_route" }.should_not be_routable
139
+ rescue Exception => e
140
+ ensure
141
+ # Different versions of ruby order these differently
142
+ e.message.should =~ /"action"=>"custom_route"/
143
+ e.message.should =~ /"controller"=>"custom_route_spec"/
144
+ end
145
+ end
146
+
147
+ it "works with routeable (alternate spelling)" do
148
+ { :put => "/nonexisting_route" }.
149
+ should_not be_routeable
150
+ end
38
151
  end
152
+ end
153
+
154
+ share_as :RouteToExampleGroupSpec do
155
+ describe "using should[_not] route_to()" do
156
+ it "supports existing routes" do
157
+ { :get => "/controller_spec/some_action" }.
158
+ should route_to( :controller => "controller_spec", :action => "some_action" )
159
+ end
160
+
161
+ it "translates GET-only paths to be explicit, when matching against a string (for parity with route_for().should == '/path')" do
162
+ self.should_receive(:assert_routing).with(hash_including(:method => :get), anything, {}, anything)
163
+ "/controller_spec/some_action".
164
+ should route_to({})
165
+ end
166
+
167
+ it "asserts, using assert_routing, that the :controller and :action are involved" do
168
+ @route = { :controller => "controller_spec", :action => "some_action" }
169
+ self.should_receive(:assert_routing).with(anything, @route, {}, anything)
170
+ "/controller_spec/some_action".
171
+ should route_to(@route)
172
+ end
173
+
174
+ it "sends extra args through" do
175
+ @route = { :controller => "controller_spec", :action => "some_action" }
176
+ self.should_receive(:assert_routing).with(anything, anything, {}, { :a => "1", :b => "2" } )
177
+ "/controller_spec/some_action?a=1&b=2".
178
+ should route_to( @route )
179
+ end
180
+
181
+ it "supports routes with additional parameters" do
182
+ { :get => "/controller_spec/some_action?param=1" }.
183
+ should route_to( :controller => "controller_spec", :action => "some_action", :param => '1' )
184
+ end
185
+
186
+ it "recognizes routes with methods besides :get" do
187
+ self.should_receive(:assert_routing).with(hash_including(:method => :put), anything, {}, anything)
188
+ { :put => "/rspec_on_rails_specs/37" }.
189
+ should route_to(:controller => "rspec_on_rails_specs", :action => "update", :id => "37")
190
+ end
191
+
192
+ it "allows only one key/value in the path - :method => path" do
193
+ lambda {
194
+ { :a => "b" ,:c => "d" }.
195
+ should route_to("anything")
196
+ }.should raise_error( ArgumentError, /usage/ )
197
+ end
198
+
199
+ describe "failing due to bad path" do
200
+ it "raises routing error, and suggests should_not be_routeable()" do
201
+ lambda {
202
+ { :put => "/rspec_on_rails_specs/nonexistent/37" }.
203
+ should route_to(:controller => "rspec_on_rails_specs", :action => "nonexistent", :id => "37")
204
+ }.should raise_error( ActionController::RoutingError, /suggest.*nonexistent.*should_not be_routable/ )
205
+ end
206
+ end
207
+
208
+ describe "failing due to params mismatch" do
209
+ it "raises assertion, and suggests should_not be_routeable()" do
210
+ lambda {
211
+ { :put => "/rspec_on_rails_specs/37" }.
212
+ should route_to(:controller => "rspec_on_rails_specs", :action => "nonexistent", :id => "37")
213
+ }.should raise_error( ::Test::Unit::AssertionFailedError, /suggest.*rspec_on_rails_specs\/37.*should_not be_routable/ )
214
+ end
215
+ end
216
+
217
+ describe "passing when expected failure" do
218
+ it "suggests should_not be_routable()" do
219
+ self.stub!(:assert_routing).and_return true
220
+ lambda {
221
+ { :put => "/rspec_on_rails_specs/37" }.
222
+ should_not route_to(:controller => "rspec_on_rails_specs", :action => "update", :id => "37")
223
+ }.should raise_error( /expected a routing error.*be_routable/im )
224
+ end
225
+ end
39
226
 
40
- it "generate params for an existing route with multiple query parameters" do
41
- params_from(:get, '/controller_spec/some_action?param1=1&param2=2').
42
- should == {:controller => "controller_spec", :action => "some_action", :param1 => '1', :param2 => '2' }
227
+ describe "failing due to wrong HTTP method" do
228
+ it "raises method error and suggests should_not be_routable()" do
229
+ self.stub!(:assert_routing) { raise ActionController::MethodNotAllowed }
230
+ lambda {
231
+ { :post => "/rspec_on_rails_specs/37" }.
232
+ should route_to(:controller => "rspec_on_rails_specs", :action => "update", :id => "37" )
233
+ }.should raise_error(ActionController::MethodNotAllowed, /rspec_on_rails_specs\/37.*should_not be_routable/ )
234
+ end
235
+ end
43
236
  end
44
- end
237
+ end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe "assert_equal", :shared => true do
4
4
  it "like assert_equal" do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe "A template with an implicit helper", :type => :view do
4
4
  before(:each) do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
  require 'spec/mocks/errors'
3
3
 
4
4
  describe ActionView::Base, "with RSpec extensions:", :type => :view do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe "A model" do
4
4
  fixtures :things
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
 
4
4
  if ActiveSupport.const_defined?(:Callbacks) && Test::Unit::TestCase.include?(ActiveSupport::Callbacks)
@@ -1,45 +1,19 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe "be_valid" do
4
- class CanBeValid
5
- def initialize(valid)
6
- @valid = valid
4
+ context "with valid attributes" do
5
+ it "returns true" do
6
+ be_valid.matches?(Thing.new(:name => 'thing')).should == true
7
7
  end
8
- def valid?; @valid end
9
8
  end
10
-
11
- it "should behave like normal be_valid matcher" do
12
- CanBeValid.new(true).should be_valid
13
- CanBeValid.new(false).should_not be_valid
14
- end
15
-
16
- describe CanBeValid do
17
- subject { CanBeValid.new(true) }
18
- it { subject.should be_valid }
19
- end
20
-
21
- describe CanBeValid do
22
- subject { CanBeValid.new(false) }
23
- it { subject.should_not be_valid }
24
- end
25
-
26
- class CanHaveErrors
27
- def initialize(errors)
28
- @valid = !errors
29
- @errors = ActiveRecord::Errors.new self
30
- @errors.add :name, "is too short"
9
+
10
+ context "with invalid attributes" do
11
+ it "returns false" do
12
+ be_valid.matches?(Thing.new).should == false
31
13
  end
32
- attr_reader :errors
33
- def valid?; @valid end
34
-
35
- def self.human_attribute_name(ignore)
36
- "Name"
14
+
15
+ it "adds errors to the errors " do
16
+ expect { Thing.new.should be_valid }.to raise_error(/can't be blank/)
37
17
  end
38
18
  end
39
-
40
- it "should show errors in the output if they're available" do
41
- lambda {
42
- CanHaveErrors.new(true).should be_valid
43
- }.should fail_with(/Name is too short/)
44
- end
45
19
  end
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  # assert_select plugins for Rails
4
4
  #
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe "error_on" do
4
4
  it "should provide a description including the name of what the error is on" do
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe "have_text" do
4
4
 
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  describe "include_text" do
4
4
 
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + '/../../../spec_helper'
1
+ require 'spec_helper'
2
2
 
3
3
  [:response, :controller].each do |subject_method|
4
4
  ['isolation','integration'].each do |mode|