mcmire-rspec-rails 1.1.99.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.
- data/History.txt +174 -0
- data/License.txt +33 -0
- data/Manifest.txt +164 -0
- data/README.txt +45 -0
- data/Rakefile +63 -0
- data/TODO.txt +1 -0
- data/Upgrade.markdown +52 -0
- data/features/step_definitions/people.rb +6 -0
- data/features/support/env.rb +13 -0
- data/features/transactions/transactions_should_rollback.feature +16 -0
- data/generators/rspec/CHANGES +1 -0
- data/generators/rspec/rspec_generator.rb +37 -0
- data/generators/rspec/templates/previous_failures.txt +0 -0
- data/generators/rspec/templates/rcov.opts +2 -0
- data/generators/rspec/templates/rspec.rake +177 -0
- data/generators/rspec/templates/script/autospec +5 -0
- data/generators/rspec/templates/script/spec +4 -0
- data/generators/rspec/templates/script/spec_server +37 -0
- data/generators/rspec/templates/spec.opts +4 -0
- data/generators/rspec/templates/spec_helper.rb +47 -0
- data/generators/rspec_controller/USAGE +33 -0
- data/generators/rspec_controller/rspec_controller_generator.rb +45 -0
- data/generators/rspec_controller/templates/controller_spec.rb +25 -0
- data/generators/rspec_controller/templates/helper_spec.rb +11 -0
- data/generators/rspec_controller/templates/view_spec.rb +12 -0
- data/generators/rspec_default_values.rb +19 -0
- data/generators/rspec_model/USAGE +18 -0
- data/generators/rspec_model/rspec_model_generator.rb +35 -0
- data/generators/rspec_model/templates/model_spec.rb +15 -0
- data/generators/rspec_scaffold/rspec_scaffold_generator.rb +150 -0
- data/generators/rspec_scaffold/templates/controller_spec.rb +171 -0
- data/generators/rspec_scaffold/templates/edit_erb_spec.rb +27 -0
- data/generators/rspec_scaffold/templates/helper_spec.rb +11 -0
- data/generators/rspec_scaffold/templates/index_erb_spec.rb +28 -0
- data/generators/rspec_scaffold/templates/new_erb_spec.rb +27 -0
- data/generators/rspec_scaffold/templates/routing_spec.rb +63 -0
- data/generators/rspec_scaffold/templates/show_erb_spec.rb +23 -0
- data/init.rb +9 -0
- data/lib/autotest/discover.rb +1 -0
- data/lib/autotest/rails_rspec.rb +76 -0
- data/lib/spec/rails.rb +37 -0
- data/lib/spec/rails/example.rb +53 -0
- data/lib/spec/rails/example/assigns_hash_proxy.rb +39 -0
- data/lib/spec/rails/example/controller_example_group.rb +242 -0
- data/lib/spec/rails/example/cookies_proxy.rb +29 -0
- data/lib/spec/rails/example/functional_example_group.rb +84 -0
- data/lib/spec/rails/example/helper_example_group.rb +167 -0
- data/lib/spec/rails/example/model_example_group.rb +14 -0
- data/lib/spec/rails/example/render_observer.rb +67 -0
- data/lib/spec/rails/example/routing_helpers.rb +68 -0
- data/lib/spec/rails/example/view_example_group.rb +186 -0
- data/lib/spec/rails/extensions.rb +15 -0
- data/lib/spec/rails/extensions/action_controller/rescue.rb +42 -0
- data/lib/spec/rails/extensions/action_controller/test_case.rb +16 -0
- data/lib/spec/rails/extensions/action_controller/test_response.rb +21 -0
- data/lib/spec/rails/extensions/action_view/base.rb +33 -0
- data/lib/spec/rails/extensions/active_record/base.rb +43 -0
- data/lib/spec/rails/extensions/active_support/test_case.rb +7 -0
- data/lib/spec/rails/extensions/spec/matchers/have.rb +23 -0
- data/lib/spec/rails/extensions/spec/runner/configuration.rb +48 -0
- data/lib/spec/rails/interop/testcase.rb +14 -0
- data/lib/spec/rails/matchers.rb +40 -0
- data/lib/spec/rails/matchers/ar_be_valid.rb +44 -0
- data/lib/spec/rails/matchers/assert_select.rb +131 -0
- data/lib/spec/rails/matchers/change.rb +11 -0
- data/lib/spec/rails/matchers/have_text.rb +57 -0
- data/lib/spec/rails/matchers/include_text.rb +54 -0
- data/lib/spec/rails/matchers/redirect_to.rb +126 -0
- data/lib/spec/rails/matchers/render_template.rb +114 -0
- data/lib/spec/rails/mocks.rb +135 -0
- data/lib/spec/rails/spec_server.rb +97 -0
- data/lib/spec/rails/story_adapter.rb +79 -0
- data/lib/spec/rails/version.rb +16 -0
- data/rspec-rails.gemspec +39 -0
- data/spec/autotest/mappings_spec.rb +36 -0
- data/spec/rails_suite.rb +7 -0
- data/spec/resources/controllers/action_view_base_spec_controller.rb +2 -0
- data/spec/resources/controllers/application.rb +9 -0
- data/spec/resources/controllers/controller_spec_controller.rb +116 -0
- data/spec/resources/controllers/redirect_spec_controller.rb +70 -0
- data/spec/resources/controllers/render_spec_controller.rb +30 -0
- data/spec/resources/controllers/rjs_spec_controller.rb +58 -0
- data/spec/resources/helpers/addition_helper.rb +5 -0
- data/spec/resources/helpers/explicit_helper.rb +46 -0
- data/spec/resources/helpers/more_explicit_helper.rb +5 -0
- data/spec/resources/helpers/plugin_application_helper.rb +6 -0
- data/spec/resources/helpers/view_spec_helper.rb +13 -0
- data/spec/resources/models/animal.rb +4 -0
- data/spec/resources/models/person.rb +18 -0
- data/spec/resources/models/thing.rb +3 -0
- data/spec/resources/views/controller_spec/_partial.rhtml +0 -0
- data/spec/resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml +1 -0
- data/spec/resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml +1 -0
- data/spec/resources/views/controller_spec/action_setting_the_assigns_hash.rhtml +0 -0
- data/spec/resources/views/controller_spec/action_with_errors_in_template.rhtml +1 -0
- data/spec/resources/views/controller_spec/action_with_template.rhtml +1 -0
- data/spec/resources/views/layouts/application.rhtml +0 -0
- data/spec/resources/views/layouts/simple.rhtml +0 -0
- data/spec/resources/views/objects/_object.html.erb +1 -0
- data/spec/resources/views/render_spec/_a_partial.rhtml +0 -0
- data/spec/resources/views/render_spec/action_with_alternate_layout.rhtml +0 -0
- data/spec/resources/views/render_spec/some_action.html.erb +0 -0
- data/spec/resources/views/render_spec/some_action.js.rjs +1 -0
- data/spec/resources/views/render_spec/some_action.rjs +1 -0
- data/spec/resources/views/rjs_spec/_replacement_partial.rhtml +1 -0
- data/spec/resources/views/rjs_spec/hide_div.rjs +1 -0
- data/spec/resources/views/rjs_spec/hide_page_element.rjs +1 -0
- data/spec/resources/views/rjs_spec/insert_html.rjs +1 -0
- data/spec/resources/views/rjs_spec/replace.rjs +1 -0
- data/spec/resources/views/rjs_spec/replace_html.rjs +1 -0
- data/spec/resources/views/rjs_spec/replace_html_with_partial.rjs +1 -0
- data/spec/resources/views/rjs_spec/visual_effect.rjs +1 -0
- data/spec/resources/views/rjs_spec/visual_toggle_effect.rjs +1 -0
- data/spec/resources/views/tag_spec/no_tags.rhtml +1 -0
- data/spec/resources/views/tag_spec/single_div_with_no_attributes.rhtml +1 -0
- data/spec/resources/views/tag_spec/single_div_with_one_attribute.rhtml +1 -0
- data/spec/resources/views/view_spec/_partial.rhtml +2 -0
- data/spec/resources/views/view_spec/_partial_used_twice.rhtml +0 -0
- data/spec/resources/views/view_spec/_partial_with_local_variable.rhtml +1 -0
- data/spec/resources/views/view_spec/_partial_with_sub_partial.rhtml +1 -0
- data/spec/resources/views/view_spec/_spacer.rhtml +1 -0
- data/spec/resources/views/view_spec/accessor.rhtml +5 -0
- data/spec/resources/views/view_spec/block_helper.rhtml +3 -0
- data/spec/resources/views/view_spec/entry_form.rhtml +2 -0
- data/spec/resources/views/view_spec/explicit_helper.rhtml +2 -0
- data/spec/resources/views/view_spec/foo/show.rhtml +1 -0
- data/spec/resources/views/view_spec/implicit_helper.rhtml +2 -0
- data/spec/resources/views/view_spec/multiple_helpers.rhtml +3 -0
- data/spec/resources/views/view_spec/path_params.html.erb +1 -0
- data/spec/resources/views/view_spec/should_not_receive.rhtml +3 -0
- data/spec/resources/views/view_spec/template_with_partial.rhtml +5 -0
- data/spec/resources/views/view_spec/template_with_partial_using_collection.rhtml +3 -0
- data/spec/resources/views/view_spec/template_with_partial_with_array.rhtml +1 -0
- data/spec/spec/rails/example/assigns_hash_proxy_spec.rb +109 -0
- data/spec/spec/rails/example/configuration_spec.rb +65 -0
- data/spec/spec/rails/example/controller_example_group_spec.rb +275 -0
- data/spec/spec/rails/example/controller_isolation_spec.rb +56 -0
- data/spec/spec/rails/example/cookies_proxy_spec.rb +87 -0
- data/spec/spec/rails/example/error_handling_spec.rb +90 -0
- data/spec/spec/rails/example/example_group_factory_spec.rb +112 -0
- data/spec/spec/rails/example/helper_example_group_spec.rb +206 -0
- data/spec/spec/rails/example/model_example_group_spec.rb +20 -0
- data/spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb +33 -0
- data/spec/spec/rails/example/view_example_group_spec.rb +335 -0
- data/spec/spec/rails/extensions/action_view_base_spec.rb +48 -0
- data/spec/spec/rails/extensions/active_record_spec.rb +14 -0
- data/spec/spec/rails/interop/testcase_spec.rb +70 -0
- data/spec/spec/rails/matchers/ar_be_valid_spec.rb +45 -0
- data/spec/spec/rails/matchers/assert_select_spec.rb +811 -0
- data/spec/spec/rails/matchers/errors_on_spec.rb +25 -0
- data/spec/spec/rails/matchers/have_text_spec.rb +70 -0
- data/spec/spec/rails/matchers/include_text_spec.rb +62 -0
- data/spec/spec/rails/matchers/redirect_to_spec.rb +253 -0
- data/spec/spec/rails/matchers/render_template_spec.rb +183 -0
- data/spec/spec/rails/matchers/should_change_spec.rb +15 -0
- data/spec/spec/rails/mocks/ar_classes.rb +10 -0
- data/spec/spec/rails/mocks/mock_model_spec.rb +106 -0
- data/spec/spec/rails/mocks/stub_model_spec.rb +80 -0
- data/spec/spec/rails/sample_modified_fixture.rb +8 -0
- data/spec/spec/rails/sample_spec.rb +8 -0
- data/spec/spec/rails/spec_server_spec.rb +107 -0
- data/spec/spec/rails/spec_spec.rb +11 -0
- data/spec/spec_helper.rb +78 -0
- metadata +262 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
|
3
|
+
describe "error_on" do
|
4
|
+
it "should provide a description including the name of what the error is on" do
|
5
|
+
have(1).error_on(:whatever).description.should == "should have 1 error on :whatever"
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should provide a failure message including the number actually given" do
|
9
|
+
lambda {
|
10
|
+
[].should have(1).error_on(:whatever)
|
11
|
+
}.should fail_with("expected 1 error on :whatever, got 0")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "errors_on" do
|
16
|
+
it "should provide a description including the name of what the error is on" do
|
17
|
+
have(2).errors_on(:whatever).description.should == "should have 2 errors on :whatever"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should provide a failure message including the number actually given" do
|
21
|
+
lambda {
|
22
|
+
[1].should have(3).errors_on(:whatever)
|
23
|
+
}.should fail_with("expected 3 errors on :whatever, got 1")
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
|
3
|
+
describe "have_text" do
|
4
|
+
|
5
|
+
|
6
|
+
it "should have a helpful description" do
|
7
|
+
matcher = have_text("foo bar")
|
8
|
+
matcher.description.should == 'have text "foo bar"'
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "where target is a Regexp" do
|
12
|
+
it 'should should match submitted text using a regexp' do
|
13
|
+
matcher = have_text(/fo*/)
|
14
|
+
matcher.matches?('foo').should be_true
|
15
|
+
matcher.matches?('bar').should be_nil
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "where target is a String" do
|
20
|
+
it 'should match submitted text using a string' do
|
21
|
+
matcher = have_text('foo')
|
22
|
+
matcher.matches?('foo').should be_true
|
23
|
+
matcher.matches?('foo bar').should be_false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "have_text",
|
30
|
+
:type => :controller do
|
31
|
+
['isolation','integration'].each do |mode|
|
32
|
+
if mode == 'integration'
|
33
|
+
integrate_views
|
34
|
+
end
|
35
|
+
|
36
|
+
describe "where target is a response (in #{mode} mode)" do
|
37
|
+
controller_name :render_spec
|
38
|
+
|
39
|
+
it "should pass with exactly matching text" do
|
40
|
+
post 'text_action'
|
41
|
+
response.should have_text("this is the text for this action")
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should pass with matching text (using Regexp)" do
|
45
|
+
post 'text_action'
|
46
|
+
response.should have_text(/is the text/)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should fail with matching text" do
|
50
|
+
post 'text_action'
|
51
|
+
lambda {
|
52
|
+
response.should have_text("this is NOT the text for this action")
|
53
|
+
}.should fail_with("expected \"this is NOT the text for this action\", got \"this is the text for this action\"")
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should fail when a template is rendered" do
|
57
|
+
post 'some_action'
|
58
|
+
lambda {
|
59
|
+
response.should have_text("this is the text for this action")
|
60
|
+
}.should fail_with(/expected \"this is the text for this action\", got .*/)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should pass using should_not with incorrect text" do
|
64
|
+
post 'text_action'
|
65
|
+
response.should_not have_text("the accordian guy")
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
|
3
|
+
describe "include_text" do
|
4
|
+
|
5
|
+
it "should have a helpful description" do
|
6
|
+
matcher = include_text("foo bar")
|
7
|
+
matcher.description.should == 'include text "foo bar"'
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should match if the text is contained' do
|
11
|
+
matcher = include_text('big piece')
|
12
|
+
matcher.matches?('I am a big piece of text').should be_true
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should not match if text is not contained' do
|
16
|
+
matcher = include_text('foo bar')
|
17
|
+
matcher.matches?('hello world').should be_false
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "include_text", :type => :controller do
|
23
|
+
['isolation','integration'].each do |mode|
|
24
|
+
if mode == 'integration'
|
25
|
+
integrate_views
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "where target is a response (in #{mode} mode)" do
|
29
|
+
controller_name :render_spec
|
30
|
+
|
31
|
+
it "should pass with exactly matching text" do
|
32
|
+
post 'text_action'
|
33
|
+
response.should include_text("this is the text for this action")
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'should pass with substring matching text' do
|
37
|
+
post 'text_action'
|
38
|
+
response.should include_text('text for this')
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should fail with incorrect text" do
|
42
|
+
post 'text_action'
|
43
|
+
lambda {
|
44
|
+
response.should include_text("the accordian guy")
|
45
|
+
}.should fail_with("expected to find \"the accordian guy\" in \"this is the text for this action\"")
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should pass using should_not with incorrect text" do
|
49
|
+
post 'text_action'
|
50
|
+
response.should_not include_text("the accordian guy")
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should fail when a template is rendered" do
|
54
|
+
get 'some_action'
|
55
|
+
lambda {
|
56
|
+
response.should include_text("this is the text for this action")
|
57
|
+
}.should fail_with(/expected to find \"this is the text for this action\"/)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
@@ -0,0 +1,253 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
|
3
|
+
[:response, :controller].each do |subject_method|
|
4
|
+
['isolation','integration'].each do |mode|
|
5
|
+
describe "redirect_to behaviour", :type => :controller do
|
6
|
+
if mode == 'integration'
|
7
|
+
integrate_views
|
8
|
+
end
|
9
|
+
controller_name :redirect_spec
|
10
|
+
|
11
|
+
subject { send(subject_method) }
|
12
|
+
|
13
|
+
it "redirected to another action" do
|
14
|
+
get 'action_with_redirect_to_somewhere'
|
15
|
+
should redirect_to(:action => 'somewhere')
|
16
|
+
end
|
17
|
+
|
18
|
+
it "redirected to another controller and action" do
|
19
|
+
get 'action_with_redirect_to_other_somewhere'
|
20
|
+
should redirect_to(:controller => 'render_spec', :action => 'text_action')
|
21
|
+
end
|
22
|
+
|
23
|
+
it "redirected to another action (with 'and return')" do
|
24
|
+
get 'action_with_redirect_to_somewhere_and_return'
|
25
|
+
should redirect_to(:action => 'somewhere')
|
26
|
+
end
|
27
|
+
|
28
|
+
it "redirected from an SSL action to a non-SSL action" do
|
29
|
+
request.stub!(:ssl?).and_return true
|
30
|
+
get 'action_with_redirect_to_somewhere'
|
31
|
+
should redirect_to(:action => 'somewhere')
|
32
|
+
end
|
33
|
+
|
34
|
+
it "redirected to correct path with leading /" do
|
35
|
+
get 'action_with_redirect_to_somewhere'
|
36
|
+
should redirect_to('/redirect_spec/somewhere')
|
37
|
+
end
|
38
|
+
|
39
|
+
it "redirected to correct path without leading /" do
|
40
|
+
get 'action_with_redirect_to_somewhere'
|
41
|
+
should redirect_to('redirect_spec/somewhere')
|
42
|
+
end
|
43
|
+
|
44
|
+
it "redirected to correct internal URL" do
|
45
|
+
get 'action_with_redirect_to_somewhere'
|
46
|
+
should redirect_to("http://test.host/redirect_spec/somewhere")
|
47
|
+
end
|
48
|
+
|
49
|
+
it "redirected to correct external URL" do
|
50
|
+
get 'action_with_redirect_to_rspec_site'
|
51
|
+
should redirect_to("http://rspec.rubyforge.org")
|
52
|
+
end
|
53
|
+
|
54
|
+
it "redirected :back" do
|
55
|
+
request.env['HTTP_REFERER'] = "http://test.host/previous/page"
|
56
|
+
get 'action_with_redirect_back'
|
57
|
+
should redirect_to(:back)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "redirected :back and should redirect_to URL matches" do
|
61
|
+
request.env['HTTP_REFERER'] = "http://test.host/previous/page"
|
62
|
+
get 'action_with_redirect_back'
|
63
|
+
should redirect_to("http://test.host/previous/page")
|
64
|
+
end
|
65
|
+
|
66
|
+
it "redirected from within a respond_to block" do
|
67
|
+
get 'action_with_redirect_in_respond_to'
|
68
|
+
should redirect_to('redirect_spec/somewhere')
|
69
|
+
end
|
70
|
+
|
71
|
+
params_as_hash = {:action => "somewhere", :id => 1111, :param1 => "value1", :param2 => "value2"}
|
72
|
+
|
73
|
+
it "redirected to an internal URL containing a query string" do
|
74
|
+
get "action_with_redirect_which_creates_query_string"
|
75
|
+
should redirect_to(params_as_hash)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "redirected to an internal URL containing a query string, one way it might be generated" do
|
79
|
+
get "action_with_redirect_with_query_string_order1"
|
80
|
+
should redirect_to(params_as_hash)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "redirected to an internal URL containing a query string, another way it might be generated" do
|
84
|
+
get "action_with_redirect_with_query_string_order2"
|
85
|
+
should redirect_to(params_as_hash)
|
86
|
+
end
|
87
|
+
|
88
|
+
it "redirected to an internal URL which is unroutable but matched via a string" do
|
89
|
+
get "action_with_redirect_to_unroutable_url_inside_app"
|
90
|
+
should redirect_to("http://test.host/nonexistant/none")
|
91
|
+
end
|
92
|
+
|
93
|
+
it "redirected to a URL with a specific status code" do
|
94
|
+
get "action_with_redirect_to_somewhere_with_status"
|
95
|
+
should redirect_to(:action => 'somewhere').with(:status => 301)
|
96
|
+
end
|
97
|
+
|
98
|
+
it "redirected to a URL with a specific status code (using names)" do
|
99
|
+
get "action_with_redirect_to_somewhere_with_status"
|
100
|
+
should redirect_to(:action => 'somewhere').with(:status => :moved_permanently)
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
describe "redirect_to with a controller spec in #{mode} mode and a custom request.host", :type => :controller do
|
107
|
+
if mode == 'integration'
|
108
|
+
integrate_views
|
109
|
+
end
|
110
|
+
controller_name :redirect_spec
|
111
|
+
|
112
|
+
subject { send(subject_method) }
|
113
|
+
|
114
|
+
before do
|
115
|
+
request.host = "some.custom.host"
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should pass when redirected to another action" do
|
119
|
+
get 'action_with_redirect_to_somewhere'
|
120
|
+
should redirect_to(:action => 'somewhere')
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe "Given a controller spec in #{mode} mode", :type => :controller do
|
125
|
+
if mode == 'integration'
|
126
|
+
integrate_views
|
127
|
+
end
|
128
|
+
controller_name :redirect_spec
|
129
|
+
|
130
|
+
subject { send(subject_method) }
|
131
|
+
|
132
|
+
it "an action that redirects should not result in an error if no should redirect_to expectation is called" do
|
133
|
+
get 'action_with_redirect_to_somewhere'
|
134
|
+
end
|
135
|
+
|
136
|
+
it "an action that redirects should not result in an error if should_not redirect_to expectation was called, but not to that action" do
|
137
|
+
get 'action_with_redirect_to_somewhere'
|
138
|
+
should_not redirect_to(:action => 'another_destination')
|
139
|
+
end
|
140
|
+
|
141
|
+
it "an action that redirects should result in an error if should_not redirect_to expectation was called to that action" do
|
142
|
+
get 'action_with_redirect_to_somewhere'
|
143
|
+
lambda {
|
144
|
+
should_not redirect_to(:action => 'somewhere')
|
145
|
+
}.should fail_with("expected not to be redirected to {:action=>\"somewhere\"}, but was")
|
146
|
+
end
|
147
|
+
|
148
|
+
it "an action that does not redirects should not result in an error if should_not redirect_to expectation was called" do
|
149
|
+
get 'action_with_no_redirect'
|
150
|
+
should_not redirect_to(:action => 'any_destination')
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
end
|
155
|
+
|
156
|
+
describe "Given a controller spec in #{mode} mode, should redirect_to should fail when", :type => :controller do
|
157
|
+
if mode == 'integration'
|
158
|
+
integrate_views
|
159
|
+
end
|
160
|
+
controller_name :redirect_spec
|
161
|
+
|
162
|
+
subject { send(subject_method) }
|
163
|
+
|
164
|
+
it "redirected to wrong action" do
|
165
|
+
get 'action_with_redirect_to_somewhere'
|
166
|
+
lambda {
|
167
|
+
should redirect_to(:action => 'somewhere_else')
|
168
|
+
}.should fail_with("expected redirect to {:action=>\"somewhere_else\"}, got redirect to \"http://test.host/redirect_spec/somewhere\"")
|
169
|
+
end
|
170
|
+
|
171
|
+
it "redirected with wrong status code" do
|
172
|
+
get 'action_with_redirect_to_somewhere_with_status'
|
173
|
+
lambda {
|
174
|
+
should redirect_to(:action => 'somewhere').with(:status => 302)
|
175
|
+
}.should fail_with("expected redirect to {:action=>\"somewhere\"} with status 302 Found, got 301 Moved Permanently")
|
176
|
+
end
|
177
|
+
|
178
|
+
it "redirected with wrong status code (using names)" do
|
179
|
+
get 'action_with_redirect_to_somewhere_with_status'
|
180
|
+
lambda {
|
181
|
+
should redirect_to(:action => 'somewhere').with(:status => :found)
|
182
|
+
}.should fail_with("expected redirect to {:action=>\"somewhere\"} with status 302 Found, got 301 Moved Permanently")
|
183
|
+
end
|
184
|
+
|
185
|
+
it "redirected to incorrect path with leading /" do
|
186
|
+
get 'action_with_redirect_to_somewhere'
|
187
|
+
lambda {
|
188
|
+
should redirect_to('/redirect_spec/somewhere_else')
|
189
|
+
}.should fail_with('expected redirect to "/redirect_spec/somewhere_else", got redirect to "http://test.host/redirect_spec/somewhere"')
|
190
|
+
end
|
191
|
+
|
192
|
+
it "redirected to incorrect path without leading /" do
|
193
|
+
get 'action_with_redirect_to_somewhere'
|
194
|
+
lambda {
|
195
|
+
should redirect_to('redirect_spec/somewhere_else')
|
196
|
+
}.should fail_with('expected redirect to "redirect_spec/somewhere_else", got redirect to "http://test.host/redirect_spec/somewhere"')
|
197
|
+
end
|
198
|
+
|
199
|
+
it "redirected to incorrect internal URL (based on the action)" do
|
200
|
+
get 'action_with_redirect_to_somewhere'
|
201
|
+
lambda {
|
202
|
+
should redirect_to("http://test.host/redirect_spec/somewhere_else")
|
203
|
+
}.should fail_with('expected redirect to "http://test.host/redirect_spec/somewhere_else", got redirect to "http://test.host/redirect_spec/somewhere"')
|
204
|
+
end
|
205
|
+
|
206
|
+
it "redirected to wrong external URL" do
|
207
|
+
get 'action_with_redirect_to_rspec_site'
|
208
|
+
lambda {
|
209
|
+
should redirect_to("http://test.unit.rubyforge.org")
|
210
|
+
}.should fail_with('expected redirect to "http://test.unit.rubyforge.org", got redirect to "http://rspec.rubyforge.org"')
|
211
|
+
end
|
212
|
+
|
213
|
+
it "redirected to incorrect internal URL (based on the directory path)" do
|
214
|
+
get 'action_with_redirect_to_somewhere'
|
215
|
+
lambda {
|
216
|
+
should redirect_to("http://test.host/non_existent_controller/somewhere")
|
217
|
+
}.should fail_with('expected redirect to "http://test.host/non_existent_controller/somewhere", got redirect to "http://test.host/redirect_spec/somewhere"')
|
218
|
+
end
|
219
|
+
|
220
|
+
it "expected redirect :back, but redirected to a new URL" do
|
221
|
+
get 'action_with_no_redirect'
|
222
|
+
lambda {
|
223
|
+
should redirect_to(:back)
|
224
|
+
}.should fail_with('expected redirect to :back, got no redirect')
|
225
|
+
end
|
226
|
+
|
227
|
+
it "no redirect at all" do
|
228
|
+
get 'action_with_no_redirect'
|
229
|
+
lambda {
|
230
|
+
should redirect_to(:action => 'nowhere')
|
231
|
+
}.should fail_with("expected redirect to {:action=>\"nowhere\"}, got no redirect")
|
232
|
+
end
|
233
|
+
|
234
|
+
it "redirected to an internal URL which is unroutable and matched via a hash" do
|
235
|
+
get "action_with_redirect_to_unroutable_url_inside_app"
|
236
|
+
route = {:controller => "nonexistant", :action => "none"}
|
237
|
+
lambda {
|
238
|
+
should redirect_to(route)
|
239
|
+
}.should raise_error(ActionController::RoutingError, /(no route found to match|No route matches) \"\/nonexistant\/none\" with \{.*\}/)
|
240
|
+
end
|
241
|
+
|
242
|
+
it "provides a description" do
|
243
|
+
redirect_to("foo/bar").description.should == %q|redirect to "foo/bar"|
|
244
|
+
end
|
245
|
+
|
246
|
+
it "redirects to action with http method restriction" do
|
247
|
+
post 'action_to_redirect_to_action_with_method_restriction'
|
248
|
+
should redirect_to(:action => 'action_with_method_restriction')
|
249
|
+
end
|
250
|
+
|
251
|
+
end
|
252
|
+
end
|
253
|
+
end
|
@@ -0,0 +1,183 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
2
|
+
|
3
|
+
[:response, :controller].each do |subject_method|
|
4
|
+
['isolation','integration'].each do |mode|
|
5
|
+
describe "#{subject_method}.should render_template (in #{mode} mode)",
|
6
|
+
:type => :controller do
|
7
|
+
controller_name :render_spec
|
8
|
+
if mode == 'integration'
|
9
|
+
integrate_views
|
10
|
+
end
|
11
|
+
|
12
|
+
subject { send(subject_method) }
|
13
|
+
|
14
|
+
it "should match a simple path" do
|
15
|
+
post 'some_action'
|
16
|
+
should render_template('some_action')
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should match a less simple path" do
|
20
|
+
post 'some_action'
|
21
|
+
should render_template('render_spec/some_action')
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should match a less simple path to another controller" do
|
25
|
+
post 'action_which_renders_template_from_other_controller'
|
26
|
+
should render_template('controller_spec/action_with_template')
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should match a symbol" do
|
30
|
+
post 'some_action'
|
31
|
+
should render_template(:some_action)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should match an rjs template" do
|
35
|
+
xhr :post, 'some_action'
|
36
|
+
should render_template('render_spec/some_action')
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should match a partial template (simple path)" do
|
40
|
+
get 'action_with_partial'
|
41
|
+
should render_template("_a_partial")
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should match a partial template (complex path)" do
|
45
|
+
get 'action_with_partial'
|
46
|
+
should render_template("render_spec/_a_partial")
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should fail when the wrong template is rendered" do
|
50
|
+
post 'some_action'
|
51
|
+
lambda do
|
52
|
+
should render_template('non_existent_template')
|
53
|
+
end.should fail_with(/expected \"non_existent_template\", got \"render_spec\/some_action(\.html\.erb)?\"/)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should fail without full path when template is associated with a different controller" do
|
57
|
+
post 'action_which_renders_template_from_other_controller'
|
58
|
+
lambda do
|
59
|
+
should render_template('action_with_template')
|
60
|
+
end.should fail_with(/expected \"action_with_template\", got \"controller_spec\/action_with_template(\.rhtml)?\"/)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should fail with incorrect full path when template is associated with a different controller" do
|
64
|
+
post 'action_which_renders_template_from_other_controller'
|
65
|
+
lambda do
|
66
|
+
should render_template('render_spec/action_with_template')
|
67
|
+
end.should fail_with(/expected \"render_spec\/action_with_template\", got \"controller_spec\/action_with_template(\.rhtml)?\"/)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should fail on the wrong extension (given rhtml)" do
|
71
|
+
get 'some_action'
|
72
|
+
lambda {
|
73
|
+
should render_template('render_spec/some_action.rjs')
|
74
|
+
}.should fail_with(/expected \"render_spec\/some_action\.rjs\", got \"render_spec\/some_action(\.html\.erb)?\"/)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should fail when TEXT is rendered" do
|
78
|
+
post 'text_action'
|
79
|
+
lambda do
|
80
|
+
should render_template('some_action')
|
81
|
+
end.should fail_with(/expected \"some_action\", got (nil|\"\")/)
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "with an alternate layout" do
|
85
|
+
controller_name :render_spec
|
86
|
+
it "should say it rendered the action's template" do
|
87
|
+
get 'action_with_alternate_layout'
|
88
|
+
should render_template('action_with_alternate_layout')
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
it "provides a description" do
|
93
|
+
render_template("foo/bar").description.should == %q|render template "foo/bar"|
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "#{subject_method}.should_not render_template (in #{mode} mode)",
|
98
|
+
:type => :controller do
|
99
|
+
controller_name :render_spec
|
100
|
+
if mode == 'integration'
|
101
|
+
integrate_views
|
102
|
+
end
|
103
|
+
|
104
|
+
subject { send(subject_method) }
|
105
|
+
|
106
|
+
it "should pass when the action renders nothing" do
|
107
|
+
post 'action_that_renders_nothing'
|
108
|
+
should_not render_template('action_that_renders_nothing')
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should pass when the action renders nothing (symbol)" do
|
112
|
+
post 'action_that_renders_nothing'
|
113
|
+
should_not render_template(:action_that_renders_nothing)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should pass when the action does not render the template" do
|
117
|
+
post 'some_action'
|
118
|
+
should_not render_template('some_other_template')
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should pass when the action does not render the template (symbol)" do
|
122
|
+
post 'some_action'
|
123
|
+
should_not render_template(:some_other_template)
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should pass when the action does not render the template (named with controller)" do
|
127
|
+
post 'some_action'
|
128
|
+
should_not render_template('render_spec/some_other_template')
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should pass when the action renders the template with a different controller" do
|
132
|
+
post 'action_which_renders_template_from_other_controller'
|
133
|
+
should_not render_template('action_with_template')
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should pass when the action renders the template (named with controller) with a different controller" do
|
137
|
+
post 'action_which_renders_template_from_other_controller'
|
138
|
+
should_not render_template('render_spec/action_with_template')
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should pass when TEXT is rendered" do
|
142
|
+
post 'text_action'
|
143
|
+
should_not render_template('some_action')
|
144
|
+
end
|
145
|
+
|
146
|
+
it "should fail when the action renders the template" do
|
147
|
+
post 'some_action'
|
148
|
+
lambda do
|
149
|
+
should_not render_template('some_action')
|
150
|
+
end.should fail_with("expected not to render \"some_action\", but did")
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should fail when the action renders the template (symbol)" do
|
154
|
+
post 'some_action'
|
155
|
+
lambda do
|
156
|
+
should_not render_template(:some_action)
|
157
|
+
end.should fail_with("expected not to render \"some_action\", but did")
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should fail when the action renders the template (named with controller)" do
|
161
|
+
post 'some_action'
|
162
|
+
lambda do
|
163
|
+
should_not render_template('render_spec/some_action')
|
164
|
+
end.should fail_with("expected not to render \"render_spec/some_action\", but did")
|
165
|
+
end
|
166
|
+
|
167
|
+
it "should fail when the action renders the partial" do
|
168
|
+
post 'action_with_partial'
|
169
|
+
lambda do
|
170
|
+
should_not render_template('_a_partial')
|
171
|
+
end.should fail_with("expected not to render \"_a_partial\", but did")
|
172
|
+
end
|
173
|
+
|
174
|
+
it "should fail when the action renders the partial (named with controller)" do
|
175
|
+
post 'action_with_partial'
|
176
|
+
lambda do
|
177
|
+
should_not render_template('render_spec/_a_partial')
|
178
|
+
end.should fail_with("expected not to render \"render_spec/_a_partial\", but did")
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|