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.
Files changed (164) hide show
  1. data/History.txt +174 -0
  2. data/License.txt +33 -0
  3. data/Manifest.txt +164 -0
  4. data/README.txt +45 -0
  5. data/Rakefile +63 -0
  6. data/TODO.txt +1 -0
  7. data/Upgrade.markdown +52 -0
  8. data/features/step_definitions/people.rb +6 -0
  9. data/features/support/env.rb +13 -0
  10. data/features/transactions/transactions_should_rollback.feature +16 -0
  11. data/generators/rspec/CHANGES +1 -0
  12. data/generators/rspec/rspec_generator.rb +37 -0
  13. data/generators/rspec/templates/previous_failures.txt +0 -0
  14. data/generators/rspec/templates/rcov.opts +2 -0
  15. data/generators/rspec/templates/rspec.rake +177 -0
  16. data/generators/rspec/templates/script/autospec +5 -0
  17. data/generators/rspec/templates/script/spec +4 -0
  18. data/generators/rspec/templates/script/spec_server +37 -0
  19. data/generators/rspec/templates/spec.opts +4 -0
  20. data/generators/rspec/templates/spec_helper.rb +47 -0
  21. data/generators/rspec_controller/USAGE +33 -0
  22. data/generators/rspec_controller/rspec_controller_generator.rb +45 -0
  23. data/generators/rspec_controller/templates/controller_spec.rb +25 -0
  24. data/generators/rspec_controller/templates/helper_spec.rb +11 -0
  25. data/generators/rspec_controller/templates/view_spec.rb +12 -0
  26. data/generators/rspec_default_values.rb +19 -0
  27. data/generators/rspec_model/USAGE +18 -0
  28. data/generators/rspec_model/rspec_model_generator.rb +35 -0
  29. data/generators/rspec_model/templates/model_spec.rb +15 -0
  30. data/generators/rspec_scaffold/rspec_scaffold_generator.rb +150 -0
  31. data/generators/rspec_scaffold/templates/controller_spec.rb +171 -0
  32. data/generators/rspec_scaffold/templates/edit_erb_spec.rb +27 -0
  33. data/generators/rspec_scaffold/templates/helper_spec.rb +11 -0
  34. data/generators/rspec_scaffold/templates/index_erb_spec.rb +28 -0
  35. data/generators/rspec_scaffold/templates/new_erb_spec.rb +27 -0
  36. data/generators/rspec_scaffold/templates/routing_spec.rb +63 -0
  37. data/generators/rspec_scaffold/templates/show_erb_spec.rb +23 -0
  38. data/init.rb +9 -0
  39. data/lib/autotest/discover.rb +1 -0
  40. data/lib/autotest/rails_rspec.rb +76 -0
  41. data/lib/spec/rails.rb +37 -0
  42. data/lib/spec/rails/example.rb +53 -0
  43. data/lib/spec/rails/example/assigns_hash_proxy.rb +39 -0
  44. data/lib/spec/rails/example/controller_example_group.rb +242 -0
  45. data/lib/spec/rails/example/cookies_proxy.rb +29 -0
  46. data/lib/spec/rails/example/functional_example_group.rb +84 -0
  47. data/lib/spec/rails/example/helper_example_group.rb +167 -0
  48. data/lib/spec/rails/example/model_example_group.rb +14 -0
  49. data/lib/spec/rails/example/render_observer.rb +67 -0
  50. data/lib/spec/rails/example/routing_helpers.rb +68 -0
  51. data/lib/spec/rails/example/view_example_group.rb +186 -0
  52. data/lib/spec/rails/extensions.rb +15 -0
  53. data/lib/spec/rails/extensions/action_controller/rescue.rb +42 -0
  54. data/lib/spec/rails/extensions/action_controller/test_case.rb +16 -0
  55. data/lib/spec/rails/extensions/action_controller/test_response.rb +21 -0
  56. data/lib/spec/rails/extensions/action_view/base.rb +33 -0
  57. data/lib/spec/rails/extensions/active_record/base.rb +43 -0
  58. data/lib/spec/rails/extensions/active_support/test_case.rb +7 -0
  59. data/lib/spec/rails/extensions/spec/matchers/have.rb +23 -0
  60. data/lib/spec/rails/extensions/spec/runner/configuration.rb +48 -0
  61. data/lib/spec/rails/interop/testcase.rb +14 -0
  62. data/lib/spec/rails/matchers.rb +40 -0
  63. data/lib/spec/rails/matchers/ar_be_valid.rb +44 -0
  64. data/lib/spec/rails/matchers/assert_select.rb +131 -0
  65. data/lib/spec/rails/matchers/change.rb +11 -0
  66. data/lib/spec/rails/matchers/have_text.rb +57 -0
  67. data/lib/spec/rails/matchers/include_text.rb +54 -0
  68. data/lib/spec/rails/matchers/redirect_to.rb +126 -0
  69. data/lib/spec/rails/matchers/render_template.rb +114 -0
  70. data/lib/spec/rails/mocks.rb +135 -0
  71. data/lib/spec/rails/spec_server.rb +97 -0
  72. data/lib/spec/rails/story_adapter.rb +79 -0
  73. data/lib/spec/rails/version.rb +16 -0
  74. data/rspec-rails.gemspec +39 -0
  75. data/spec/autotest/mappings_spec.rb +36 -0
  76. data/spec/rails_suite.rb +7 -0
  77. data/spec/resources/controllers/action_view_base_spec_controller.rb +2 -0
  78. data/spec/resources/controllers/application.rb +9 -0
  79. data/spec/resources/controllers/controller_spec_controller.rb +116 -0
  80. data/spec/resources/controllers/redirect_spec_controller.rb +70 -0
  81. data/spec/resources/controllers/render_spec_controller.rb +30 -0
  82. data/spec/resources/controllers/rjs_spec_controller.rb +58 -0
  83. data/spec/resources/helpers/addition_helper.rb +5 -0
  84. data/spec/resources/helpers/explicit_helper.rb +46 -0
  85. data/spec/resources/helpers/more_explicit_helper.rb +5 -0
  86. data/spec/resources/helpers/plugin_application_helper.rb +6 -0
  87. data/spec/resources/helpers/view_spec_helper.rb +13 -0
  88. data/spec/resources/models/animal.rb +4 -0
  89. data/spec/resources/models/person.rb +18 -0
  90. data/spec/resources/models/thing.rb +3 -0
  91. data/spec/resources/views/controller_spec/_partial.rhtml +0 -0
  92. data/spec/resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml +1 -0
  93. data/spec/resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml +1 -0
  94. data/spec/resources/views/controller_spec/action_setting_the_assigns_hash.rhtml +0 -0
  95. data/spec/resources/views/controller_spec/action_with_errors_in_template.rhtml +1 -0
  96. data/spec/resources/views/controller_spec/action_with_template.rhtml +1 -0
  97. data/spec/resources/views/layouts/application.rhtml +0 -0
  98. data/spec/resources/views/layouts/simple.rhtml +0 -0
  99. data/spec/resources/views/objects/_object.html.erb +1 -0
  100. data/spec/resources/views/render_spec/_a_partial.rhtml +0 -0
  101. data/spec/resources/views/render_spec/action_with_alternate_layout.rhtml +0 -0
  102. data/spec/resources/views/render_spec/some_action.html.erb +0 -0
  103. data/spec/resources/views/render_spec/some_action.js.rjs +1 -0
  104. data/spec/resources/views/render_spec/some_action.rjs +1 -0
  105. data/spec/resources/views/rjs_spec/_replacement_partial.rhtml +1 -0
  106. data/spec/resources/views/rjs_spec/hide_div.rjs +1 -0
  107. data/spec/resources/views/rjs_spec/hide_page_element.rjs +1 -0
  108. data/spec/resources/views/rjs_spec/insert_html.rjs +1 -0
  109. data/spec/resources/views/rjs_spec/replace.rjs +1 -0
  110. data/spec/resources/views/rjs_spec/replace_html.rjs +1 -0
  111. data/spec/resources/views/rjs_spec/replace_html_with_partial.rjs +1 -0
  112. data/spec/resources/views/rjs_spec/visual_effect.rjs +1 -0
  113. data/spec/resources/views/rjs_spec/visual_toggle_effect.rjs +1 -0
  114. data/spec/resources/views/tag_spec/no_tags.rhtml +1 -0
  115. data/spec/resources/views/tag_spec/single_div_with_no_attributes.rhtml +1 -0
  116. data/spec/resources/views/tag_spec/single_div_with_one_attribute.rhtml +1 -0
  117. data/spec/resources/views/view_spec/_partial.rhtml +2 -0
  118. data/spec/resources/views/view_spec/_partial_used_twice.rhtml +0 -0
  119. data/spec/resources/views/view_spec/_partial_with_local_variable.rhtml +1 -0
  120. data/spec/resources/views/view_spec/_partial_with_sub_partial.rhtml +1 -0
  121. data/spec/resources/views/view_spec/_spacer.rhtml +1 -0
  122. data/spec/resources/views/view_spec/accessor.rhtml +5 -0
  123. data/spec/resources/views/view_spec/block_helper.rhtml +3 -0
  124. data/spec/resources/views/view_spec/entry_form.rhtml +2 -0
  125. data/spec/resources/views/view_spec/explicit_helper.rhtml +2 -0
  126. data/spec/resources/views/view_spec/foo/show.rhtml +1 -0
  127. data/spec/resources/views/view_spec/implicit_helper.rhtml +2 -0
  128. data/spec/resources/views/view_spec/multiple_helpers.rhtml +3 -0
  129. data/spec/resources/views/view_spec/path_params.html.erb +1 -0
  130. data/spec/resources/views/view_spec/should_not_receive.rhtml +3 -0
  131. data/spec/resources/views/view_spec/template_with_partial.rhtml +5 -0
  132. data/spec/resources/views/view_spec/template_with_partial_using_collection.rhtml +3 -0
  133. data/spec/resources/views/view_spec/template_with_partial_with_array.rhtml +1 -0
  134. data/spec/spec/rails/example/assigns_hash_proxy_spec.rb +109 -0
  135. data/spec/spec/rails/example/configuration_spec.rb +65 -0
  136. data/spec/spec/rails/example/controller_example_group_spec.rb +275 -0
  137. data/spec/spec/rails/example/controller_isolation_spec.rb +56 -0
  138. data/spec/spec/rails/example/cookies_proxy_spec.rb +87 -0
  139. data/spec/spec/rails/example/error_handling_spec.rb +90 -0
  140. data/spec/spec/rails/example/example_group_factory_spec.rb +112 -0
  141. data/spec/spec/rails/example/helper_example_group_spec.rb +206 -0
  142. data/spec/spec/rails/example/model_example_group_spec.rb +20 -0
  143. data/spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb +33 -0
  144. data/spec/spec/rails/example/view_example_group_spec.rb +335 -0
  145. data/spec/spec/rails/extensions/action_view_base_spec.rb +48 -0
  146. data/spec/spec/rails/extensions/active_record_spec.rb +14 -0
  147. data/spec/spec/rails/interop/testcase_spec.rb +70 -0
  148. data/spec/spec/rails/matchers/ar_be_valid_spec.rb +45 -0
  149. data/spec/spec/rails/matchers/assert_select_spec.rb +811 -0
  150. data/spec/spec/rails/matchers/errors_on_spec.rb +25 -0
  151. data/spec/spec/rails/matchers/have_text_spec.rb +70 -0
  152. data/spec/spec/rails/matchers/include_text_spec.rb +62 -0
  153. data/spec/spec/rails/matchers/redirect_to_spec.rb +253 -0
  154. data/spec/spec/rails/matchers/render_template_spec.rb +183 -0
  155. data/spec/spec/rails/matchers/should_change_spec.rb +15 -0
  156. data/spec/spec/rails/mocks/ar_classes.rb +10 -0
  157. data/spec/spec/rails/mocks/mock_model_spec.rb +106 -0
  158. data/spec/spec/rails/mocks/stub_model_spec.rb +80 -0
  159. data/spec/spec/rails/sample_modified_fixture.rb +8 -0
  160. data/spec/spec/rails/sample_spec.rb +8 -0
  161. data/spec/spec/rails/spec_server_spec.rb +107 -0
  162. data/spec/spec/rails/spec_spec.rb +11 -0
  163. data/spec/spec_helper.rb +78 -0
  164. 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