cavalle-rspec-rails 1.2.2.0.1

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 (168) hide show
  1. data/.document +7 -0
  2. data/History.rdoc +207 -0
  3. data/License.txt +33 -0
  4. data/Manifest.txt +167 -0
  5. data/README.rdoc +45 -0
  6. data/Rakefile +79 -0
  7. data/TODO.txt +1 -0
  8. data/Upgrade.rdoc +103 -0
  9. data/features/step_definitions/people.rb +6 -0
  10. data/features/support/env.rb +13 -0
  11. data/features/transactions/transactions_should_rollback.feature +16 -0
  12. data/generators/rspec/CHANGES +1 -0
  13. data/generators/rspec/rspec_generator.rb +54 -0
  14. data/generators/rspec/templates/previous_failures.txt +0 -0
  15. data/generators/rspec/templates/rcov.opts +2 -0
  16. data/generators/rspec/templates/rspec.rake +165 -0
  17. data/generators/rspec/templates/script/autospec +6 -0
  18. data/generators/rspec/templates/script/spec +10 -0
  19. data/generators/rspec/templates/script/spec_server +9 -0
  20. data/generators/rspec/templates/spec.opts +4 -0
  21. data/generators/rspec/templates/spec_helper.rb +47 -0
  22. data/generators/rspec_controller/USAGE +33 -0
  23. data/generators/rspec_controller/rspec_controller_generator.rb +45 -0
  24. data/generators/rspec_controller/templates/controller_spec.rb +25 -0
  25. data/generators/rspec_controller/templates/helper_spec.rb +11 -0
  26. data/generators/rspec_controller/templates/view_spec.rb +12 -0
  27. data/generators/rspec_default_values.rb +19 -0
  28. data/generators/rspec_model/USAGE +18 -0
  29. data/generators/rspec_model/rspec_model_generator.rb +35 -0
  30. data/generators/rspec_model/templates/model_spec.rb +15 -0
  31. data/generators/rspec_scaffold/rspec_scaffold_generator.rb +150 -0
  32. data/generators/rspec_scaffold/templates/controller_spec.rb +171 -0
  33. data/generators/rspec_scaffold/templates/edit_erb_spec.rb +27 -0
  34. data/generators/rspec_scaffold/templates/helper_spec.rb +11 -0
  35. data/generators/rspec_scaffold/templates/index_erb_spec.rb +28 -0
  36. data/generators/rspec_scaffold/templates/new_erb_spec.rb +27 -0
  37. data/generators/rspec_scaffold/templates/routing_spec.rb +63 -0
  38. data/generators/rspec_scaffold/templates/show_erb_spec.rb +23 -0
  39. data/init.rb +9 -0
  40. data/lib/autotest/discover.rb +1 -0
  41. data/lib/autotest/rails_rspec.rb +76 -0
  42. data/lib/spec/rails/example/assigns_hash_proxy.rb +39 -0
  43. data/lib/spec/rails/example/controller_example_group.rb +247 -0
  44. data/lib/spec/rails/example/cookies_proxy.rb +29 -0
  45. data/lib/spec/rails/example/functional_example_group.rb +84 -0
  46. data/lib/spec/rails/example/helper_example_group.rb +153 -0
  47. data/lib/spec/rails/example/model_example_group.rb +14 -0
  48. data/lib/spec/rails/example/render_observer.rb +67 -0
  49. data/lib/spec/rails/example/routing_example_group.rb +13 -0
  50. data/lib/spec/rails/example/routing_helpers.rb +70 -0
  51. data/lib/spec/rails/example/view_example_group.rb +186 -0
  52. data/lib/spec/rails/example.rb +47 -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 +45 -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 +44 -0
  61. data/lib/spec/rails/extensions.rb +11 -0
  62. data/lib/spec/rails/interop/testcase.rb +14 -0
  63. data/lib/spec/rails/matchers/ar_be_valid.rb +44 -0
  64. data/lib/spec/rails/matchers/assert_select.rb +146 -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/matchers.rb +32 -0
  71. data/lib/spec/rails/mocks.rb +135 -0
  72. data/lib/spec/rails/spec_server.rb +127 -0
  73. data/lib/spec/rails/story_adapter.rb +79 -0
  74. data/lib/spec/rails/version.rb +15 -0
  75. data/lib/spec/rails.rb +28 -0
  76. data/rspec-rails.gemspec +57 -0
  77. data/spec/autotest/mappings_spec.rb +86 -0
  78. data/spec/rails_suite.rb +7 -0
  79. data/spec/resources/controllers/action_view_base_spec_controller.rb +2 -0
  80. data/spec/resources/controllers/application.rb +9 -0
  81. data/spec/resources/controllers/controller_spec_controller.rb +120 -0
  82. data/spec/resources/controllers/example.txt +1 -0
  83. data/spec/resources/controllers/redirect_spec_controller.rb +70 -0
  84. data/spec/resources/controllers/render_spec_controller.rb +30 -0
  85. data/spec/resources/controllers/rjs_spec_controller.rb +58 -0
  86. data/spec/resources/helpers/addition_helper.rb +5 -0
  87. data/spec/resources/helpers/explicit_helper.rb +46 -0
  88. data/spec/resources/helpers/more_explicit_helper.rb +5 -0
  89. data/spec/resources/helpers/plugin_application_helper.rb +6 -0
  90. data/spec/resources/helpers/view_spec_helper.rb +13 -0
  91. data/spec/resources/models/animal.rb +4 -0
  92. data/spec/resources/models/person.rb +18 -0
  93. data/spec/resources/models/thing.rb +3 -0
  94. data/spec/resources/views/controller_spec/_partial.html.erb +0 -0
  95. data/spec/resources/views/controller_spec/action_setting_flash_after_session_reset.html.erb +1 -0
  96. data/spec/resources/views/controller_spec/action_setting_flash_before_session_reset.html.erb +1 -0
  97. data/spec/resources/views/controller_spec/action_setting_the_assigns_hash.html.erb +0 -0
  98. data/spec/resources/views/controller_spec/action_with_errors_in_template.html.erb +1 -0
  99. data/spec/resources/views/controller_spec/action_with_template.html.erb +1 -0
  100. data/spec/resources/views/layouts/application.html.erb +0 -0
  101. data/spec/resources/views/layouts/simple.html.erb +0 -0
  102. data/spec/resources/views/objects/_object.html.erb +1 -0
  103. data/spec/resources/views/render_spec/_a_partial.html.erb +0 -0
  104. data/spec/resources/views/render_spec/action_with_alternate_layout.html.erb +0 -0
  105. data/spec/resources/views/render_spec/some_action.html.erb +0 -0
  106. data/spec/resources/views/render_spec/some_action.js.rjs +1 -0
  107. data/spec/resources/views/rjs_spec/_replacement_partial.html.erb +1 -0
  108. data/spec/resources/views/rjs_spec/hide_div.js.rjs +1 -0
  109. data/spec/resources/views/rjs_spec/hide_page_element.js.rjs +1 -0
  110. data/spec/resources/views/rjs_spec/insert_html.js.rjs +1 -0
  111. data/spec/resources/views/rjs_spec/replace.js.rjs +1 -0
  112. data/spec/resources/views/rjs_spec/replace_html.js.rjs +1 -0
  113. data/spec/resources/views/rjs_spec/replace_html_with_partial.js.rjs +1 -0
  114. data/spec/resources/views/rjs_spec/visual_effect.js.rjs +1 -0
  115. data/spec/resources/views/rjs_spec/visual_toggle_effect.js.rjs +1 -0
  116. data/spec/resources/views/tag_spec/no_tags.html.erb +1 -0
  117. data/spec/resources/views/tag_spec/single_div_with_no_attributes.html.erb +1 -0
  118. data/spec/resources/views/tag_spec/single_div_with_one_attribute.html.erb +1 -0
  119. data/spec/resources/views/view_spec/_partial.html.erb +2 -0
  120. data/spec/resources/views/view_spec/_partial_used_twice.html.erb +0 -0
  121. data/spec/resources/views/view_spec/_partial_with_local_variable.html.erb +1 -0
  122. data/spec/resources/views/view_spec/_partial_with_sub_partial.html.erb +1 -0
  123. data/spec/resources/views/view_spec/_spacer.html.erb +1 -0
  124. data/spec/resources/views/view_spec/accessor.html.erb +5 -0
  125. data/spec/resources/views/view_spec/block_helper.html.erb +3 -0
  126. data/spec/resources/views/view_spec/entry_form.html.erb +2 -0
  127. data/spec/resources/views/view_spec/explicit_helper.html.erb +2 -0
  128. data/spec/resources/views/view_spec/foo/show.html.erb +1 -0
  129. data/spec/resources/views/view_spec/implicit_helper.html.erb +2 -0
  130. data/spec/resources/views/view_spec/multiple_helpers.html.erb +3 -0
  131. data/spec/resources/views/view_spec/path_params.html.erb +1 -0
  132. data/spec/resources/views/view_spec/should_not_receive.html.erb +3 -0
  133. data/spec/resources/views/view_spec/template_with_partial.html.erb +5 -0
  134. data/spec/resources/views/view_spec/template_with_partial_using_collection.html.erb +3 -0
  135. data/spec/resources/views/view_spec/template_with_partial_with_array.html.erb +1 -0
  136. data/spec/spec/rails/example/assigns_hash_proxy_spec.rb +109 -0
  137. data/spec/spec/rails/example/configuration_spec.rb +65 -0
  138. data/spec/spec/rails/example/controller_example_group_spec.rb +299 -0
  139. data/spec/spec/rails/example/controller_isolation_spec.rb +56 -0
  140. data/spec/spec/rails/example/cookies_proxy_spec.rb +87 -0
  141. data/spec/spec/rails/example/error_handling_spec.rb +90 -0
  142. data/spec/spec/rails/example/example_group_factory_spec.rb +112 -0
  143. data/spec/spec/rails/example/helper_example_group_spec.rb +233 -0
  144. data/spec/spec/rails/example/model_example_group_spec.rb +20 -0
  145. data/spec/spec/rails/example/routing_example_group_spec.rb +9 -0
  146. data/spec/spec/rails/example/shared_routing_example_group_examples.rb +44 -0
  147. data/spec/spec/rails/example/test_unit_assertion_accessibility_spec.rb +33 -0
  148. data/spec/spec/rails/example/view_example_group_spec.rb +335 -0
  149. data/spec/spec/rails/extensions/action_view_base_spec.rb +48 -0
  150. data/spec/spec/rails/extensions/active_record_spec.rb +14 -0
  151. data/spec/spec/rails/interop/testcase_spec.rb +70 -0
  152. data/spec/spec/rails/matchers/ar_be_valid_spec.rb +45 -0
  153. data/spec/spec/rails/matchers/assert_select_spec.rb +809 -0
  154. data/spec/spec/rails/matchers/errors_on_spec.rb +25 -0
  155. data/spec/spec/rails/matchers/have_text_spec.rb +70 -0
  156. data/spec/spec/rails/matchers/include_text_spec.rb +62 -0
  157. data/spec/spec/rails/matchers/redirect_to_spec.rb +253 -0
  158. data/spec/spec/rails/matchers/render_template_spec.rb +191 -0
  159. data/spec/spec/rails/matchers/should_change_spec.rb +15 -0
  160. data/spec/spec/rails/mocks/ar_classes.rb +10 -0
  161. data/spec/spec/rails/mocks/mock_model_spec.rb +106 -0
  162. data/spec/spec/rails/mocks/stub_model_spec.rb +80 -0
  163. data/spec/spec/rails/sample_modified_fixture.rb +8 -0
  164. data/spec/spec/rails/sample_spec.rb +8 -0
  165. data/spec/spec/rails/spec_server_spec.rb +107 -0
  166. data/spec/spec/rails/spec_spec.rb +11 -0
  167. data/spec/spec_helper.rb +79 -0
  168. metadata +277 -0
@@ -0,0 +1,4 @@
1
+ class Animal < ActiveRecord::Base
2
+ belongs_to :person
3
+ validates_uniqueness_of :name
4
+ end
@@ -0,0 +1,18 @@
1
+ class Person < ActiveRecord::Base
2
+ has_many :animals do
3
+ def pups
4
+ find(:all, :conditions => 'age < 1')
5
+ end
6
+ def adults
7
+ find(:all, :conditions => 'age >= 1')
8
+ end
9
+ end
10
+ validates_presence_of :name
11
+
12
+ def add_animal animal
13
+ animal.person = self
14
+ animals << animal
15
+ animal.save
16
+ end
17
+
18
+ end
@@ -0,0 +1,3 @@
1
+ class Thing < ActiveRecord::Base
2
+ validates_presence_of :name
3
+ end
@@ -0,0 +1 @@
1
+ <div>This is action_with_template.rhtml</div>
File without changes
File without changes
@@ -0,0 +1 @@
1
+ <%= object.name %>
@@ -0,0 +1 @@
1
+ # This is used for rails > 1.2.3
@@ -0,0 +1 @@
1
+ This is the text in the replacement partial.
@@ -0,0 +1 @@
1
+ page.hide 'mydiv'
@@ -0,0 +1 @@
1
+ page['mydiv'].hide
@@ -0,0 +1 @@
1
+ page.insert_html 'mydiv', 'replacement text'
@@ -0,0 +1 @@
1
+ page.replace 'mydiv', 'replacement text'
@@ -0,0 +1 @@
1
+ page.replace_html 'mydiv', 'replacement text'
@@ -0,0 +1 @@
1
+ page.replace_html 'mydiv', :partial => 'rjs_spec/replacement_partial'
@@ -0,0 +1 @@
1
+ page.visual_effect :fade, 'mydiv'
@@ -0,0 +1 @@
1
+ page.visual_effect :toggle_blind, 'mydiv'
@@ -0,0 +1 @@
1
+ <!-THIS FILE HAS NO TAGS->
@@ -0,0 +1 @@
1
+ <div key="value"></div>
@@ -0,0 +1,2 @@
1
+ <%= method_in_plugin_application_helper %>
2
+ <%= method_in_partial %>
@@ -0,0 +1 @@
1
+ <%= render :partial => 'partial', :object => partial %>
@@ -0,0 +1 @@
1
+ <hr id="spacer" />
@@ -0,0 +1,5 @@
1
+ <div id="session"><%= session[:key] %></div>
2
+ <div id="params"><%= params[:key] %></div>
3
+ <div id="flash"><%= flash[:key] %></div>
4
+ <div id="controller"><%= params[:controller] %></div>
5
+ <div id="action"><%= params[:action] %></div>
@@ -0,0 +1,3 @@
1
+ <% if_allowed do %>
2
+ <div>block helper was rendered</div>
3
+ <% end %>
@@ -0,0 +1,2 @@
1
+ <% form_tag do %>
2
+ <% end %>
@@ -0,0 +1,2 @@
1
+ <%= method_in_plugin_application_helper %>
2
+ <%= method_in_explicit_helper %>
@@ -0,0 +1 @@
1
+ <%= method_in_plugin_application_helper %>
@@ -0,0 +1,2 @@
1
+ <%= method_in_plugin_application_helper %>
2
+ <%= method_in_helper %>
@@ -0,0 +1,3 @@
1
+ <%= method_in_plugin_application_helper %>
2
+ <%= method_in_explicit_helper %>
3
+ <%= method_in_more_explicit_helper %>
@@ -0,0 +1 @@
1
+ <%= params[:controller] %>
@@ -0,0 +1,3 @@
1
+ <% if @obj.render_partial? %>
2
+ <%= render :partial => 'some_partial' %>
3
+ <% end %>
@@ -0,0 +1,5 @@
1
+ <%= method_in_template_with_partial %>
2
+ <%= render :partial => 'partial' %>
3
+
4
+ <%= render :partial => 'partial_used_twice' %>
5
+ <%= render :partial => 'partial_used_twice' %>
@@ -0,0 +1,3 @@
1
+ <%= render :partial => 'partial',
2
+ :collection => ['Alice', 'Bob'],
3
+ :spacer_template => 'spacer' %>
@@ -0,0 +1 @@
1
+ <%= render :partial => @array %>
@@ -0,0 +1,109 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe "AssignsHashProxy" do
4
+ def orig_assigns
5
+ @object.assigns
6
+ end
7
+
8
+ class Foo
9
+ def initialize(bar)
10
+ @bar = bar
11
+ end
12
+ attr_reader :bar
13
+
14
+ def ==(other)
15
+ self.bar == other.bar
16
+ end
17
+ end
18
+
19
+ before(:each) do
20
+ @object = Class.new do
21
+ def assigns; @assigns ||= Hash.new; end
22
+ end.new
23
+ @proxy = Spec::Rails::Example::AssignsHashProxy.new(self) {@object}
24
+ end
25
+
26
+ it "doesn't wig out on objects that define their own == method" do
27
+ @object.assigns['foo'] = Foo.new(1)
28
+ @proxy['foo'].should == Foo.new(1)
29
+ end
30
+
31
+ it "should set ivars on object using string" do
32
+ @proxy['foo'] = 'bar'
33
+ @object.instance_eval{@foo}.should == 'bar'
34
+ end
35
+
36
+ it "should set ivars on object using symbol" do
37
+ @proxy[:foo] = 'bar'
38
+ @object.instance_eval{@foo}.should == 'bar'
39
+ end
40
+
41
+ it "should access object's assigns with a string" do
42
+ @object.assigns['foo'] = 'bar'
43
+ @proxy['foo'].should == 'bar'
44
+ end
45
+
46
+ it "should access object's assigns with a symbol" do
47
+ @object.assigns['foo'] = 'bar'
48
+ @proxy[:foo].should == 'bar'
49
+ end
50
+
51
+ it "should access object's ivars with a string" do
52
+ @object.instance_variable_set('@foo', 'bar')
53
+ @proxy['foo'].should == 'bar'
54
+ end
55
+
56
+ it "should access object's ivars with a symbol" do
57
+ @object.instance_variable_set('@foo', 'bar')
58
+ @proxy[:foo].should == 'bar'
59
+ end
60
+
61
+ it "should iterate through each element like a Hash" do
62
+ values = {
63
+ 'foo' => 1,
64
+ 'bar' => 2,
65
+ 'baz' => 3
66
+ }
67
+ @proxy['foo'] = values['foo']
68
+ @proxy['bar'] = values['bar']
69
+ @proxy['baz'] = values['baz']
70
+
71
+ @proxy.each do |key, value|
72
+ key.should == key
73
+ value.should == values[key]
74
+ end
75
+ end
76
+
77
+ it "should delete the ivar of passed in key" do
78
+ @object.instance_variable_set('@foo', 'bar')
79
+ @proxy.delete('foo')
80
+ @proxy['foo'].should be_nil
81
+ end
82
+
83
+ it "should delete the assigned element of passed in key" do
84
+ @object.assigns['foo'] = 'bar'
85
+ @proxy.delete('foo')
86
+ @proxy['foo'].should be_nil
87
+ end
88
+
89
+ it "should detect the presence of a key in assigns" do
90
+ @object.assigns['foo'] = 'bar'
91
+ @proxy.has_key?('foo').should == true
92
+ @proxy.has_key?('bar').should == false
93
+ end
94
+
95
+ it "should expose values set in example back to the example" do
96
+ @proxy[:foo] = 'bar'
97
+ @proxy[:foo].should == 'bar'
98
+ end
99
+
100
+ it "should allow assignment of false via proxy" do
101
+ @proxy['foo'] = false
102
+ @proxy['foo'].should be_false
103
+ end
104
+
105
+ it "should allow assignment of false" do
106
+ @object.instance_variable_set('@foo',false)
107
+ @proxy['foo'].should be_false
108
+ end
109
+ end
@@ -0,0 +1,65 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ module Spec
4
+ module Runner
5
+ describe Configuration do
6
+
7
+ def config
8
+ @config ||= Configuration.new
9
+ end
10
+
11
+ describe "#use_transactional_fixtures" do
12
+ it "should return ActiveSupport::TestCase.use_transactional_fixtures" do
13
+ config.use_transactional_fixtures.should == ActiveSupport::TestCase.use_transactional_fixtures
14
+ end
15
+
16
+ it "should set ActiveSupport::TestCase.use_transactional_fixtures to false" do
17
+ ActiveSupport::TestCase.should_receive(:use_transactional_fixtures=).with(false)
18
+ config.use_transactional_fixtures = false
19
+ end
20
+
21
+ it "should set ActiveSupport::TestCase.use_transactional_fixtures to true" do
22
+ ActiveSupport::TestCase.should_receive(:use_transactional_fixtures=).with(true)
23
+ config.use_transactional_fixtures = true
24
+ end
25
+ end
26
+
27
+ describe "#use_instantiated_fixtures" do
28
+ it "should return ActiveSupport::TestCase.use_transactional_fixtures" do
29
+ config.use_instantiated_fixtures.should == ActiveSupport::TestCase.use_instantiated_fixtures
30
+ end
31
+
32
+ it "should set ActiveSupport::TestCase.use_instantiated_fixtures to false" do
33
+ ActiveSupport::TestCase.should_receive(:use_instantiated_fixtures=).with(false)
34
+ config.use_instantiated_fixtures = false
35
+ end
36
+
37
+ it "should set ActiveSupport::TestCase.use_instantiated_fixtures to true" do
38
+ ActiveSupport::TestCase.should_receive(:use_instantiated_fixtures=).with(true)
39
+ config.use_instantiated_fixtures = true
40
+ end
41
+ end
42
+
43
+ describe "#fixture_path" do
44
+ it "should default to RAILS_ROOT + '/spec/fixtures'" do
45
+ config.fixture_path.should == RAILS_ROOT + '/spec/fixtures'
46
+ ActiveSupport::TestCase.fixture_path.should == RAILS_ROOT + '/spec/fixtures'
47
+ end
48
+
49
+ it "should set fixture_path" do
50
+ config.fixture_path = "/new/path"
51
+ config.fixture_path.should == "/new/path"
52
+ ActiveSupport::TestCase.fixture_path.should == "/new/path"
53
+ end
54
+ end
55
+
56
+ describe "#global_fixtures" do
57
+ it "should set fixtures on TestCase" do
58
+ ActiveSupport::TestCase.should_receive(:fixtures).with(:blah)
59
+ config.global_fixtures = [:blah]
60
+ end
61
+ end
62
+
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,299 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+ require 'controller_spec_controller'
3
+ require File.join(File.dirname(__FILE__), "/shared_routing_example_group_examples.rb")
4
+
5
+ ['integration', 'isolation'].each do |mode|
6
+ describe "A controller example running in #{mode} mode", :type => :controller do
7
+ controller_name :controller_spec
8
+ integrate_views if mode == 'integration'
9
+
10
+ accesses_configured_helper_methods
11
+ include RoutingExampleGroupSpec
12
+
13
+ describe "with an implicit subject" do
14
+ it "uses the controller" do
15
+ subject.should == controller
16
+ end
17
+ end
18
+
19
+ describe "with a specified subject" do
20
+ subject { 'specified' }
21
+
22
+ it "uses the specified subject" do
23
+ subject.should == 'specified'
24
+ end
25
+ end
26
+
27
+ it "should provide controller.session as session" do
28
+ get 'action_with_template'
29
+ session.should equal(controller.session)
30
+ end
31
+
32
+ it "should provide the same session object before and after the action" do
33
+ session_before = session
34
+ get 'action_with_template'
35
+ session.should equal(session_before)
36
+ end
37
+
38
+ it "should keep the same data in the session before and after the action" do
39
+ session[:foo] = :bar
40
+ get 'action_with_template'
41
+ session[:foo].should == :bar
42
+ end
43
+
44
+ it "should ensure controller.session is NOT nil before the action" do
45
+ controller.session.should_not be_nil
46
+ get 'action_with_template'
47
+ end
48
+
49
+ it "should ensure controller.session is NOT nil after the action" do
50
+ get 'action_with_template'
51
+ controller.session.should_not be_nil
52
+ end
53
+
54
+ it "should allow specifying a partial with partial name only" do
55
+ get 'action_with_partial'
56
+ response.should render_template("_partial")
57
+ end
58
+
59
+ it "should allow specifying a partial with should_receive(:render)" do
60
+ controller.should_receive(:render).with(:partial => "controller_spec/partial")
61
+ get 'action_with_partial'
62
+ end
63
+
64
+ it "should allow specifying a partial with should_receive(:render) with object" do
65
+ controller.should_receive(:render).with(:partial => "controller_spec/partial", :object => "something")
66
+ get 'action_with_partial_with_object', :thing => "something"
67
+ end
68
+
69
+ it "should allow specifying a partial with should_receive(:render) with locals" do
70
+ controller.should_receive(:render).with(:partial => "controller_spec/partial", :locals => {:thing => "something"})
71
+ get 'action_with_partial_with_locals', :thing => "something"
72
+ end
73
+
74
+ it "should yield to render :update" do
75
+ template = stub("template")
76
+ controller.should_receive(:render).with(:update).and_yield(template)
77
+ template.should_receive(:replace).with(:bottom, "replace_me", :partial => "non_existent_partial")
78
+ get 'action_with_render_update'
79
+ end
80
+
81
+ it "should allow a path relative to RAILS_ROOT/app/views/ when specifying a partial" do
82
+ get 'action_with_partial'
83
+ response.should render_template("controller_spec/_partial")
84
+ end
85
+
86
+ it "should provide access to flash" do
87
+ get 'action_which_sets_flash'
88
+ flash[:flash_key].should == "flash value"
89
+ end
90
+
91
+ it "should provide access to flash values set after a session reset" do
92
+ get 'action_setting_flash_after_session_reset'
93
+ flash[:after_reset].should == "available"
94
+ end
95
+
96
+ it "should not provide access to flash values set before a session reset" do
97
+ get 'action_setting_flash_before_session_reset'
98
+ flash[:before_reset].should_not == "available"
99
+ end
100
+
101
+ it "should provide access to session" do
102
+ session[:session_key] = "session value"
103
+ lambda do
104
+ get 'action_which_gets_session', :expected => "session value"
105
+ end.should_not raise_error
106
+ end
107
+
108
+ it "allows inline rendering" do
109
+ get 'action_that_renders_inline'
110
+ response.body.should == "inline code"
111
+ end
112
+
113
+ describe "handling should_receive(:render)" do
114
+ it "should warn" do
115
+ controller.should_receive(:render).with(:template => "controller_spec/action_with_template")
116
+ get :action_with_template
117
+ end
118
+ end
119
+
120
+ describe "handling should_not_receive(:render)" do
121
+ it "should warn" do
122
+ controller.should_not_receive(:render).with(:template => "the/wrong/template")
123
+ get :action_with_template
124
+ end
125
+ end
126
+
127
+ describe "setting cookies in the request" do
128
+
129
+ it "should support a String key" do
130
+ cookies['cookie_key'] = 'cookie value'
131
+ get 'action_which_gets_cookie', :expected => "cookie value"
132
+ end
133
+
134
+ it "should support a Symbol key" do
135
+ cookies[:cookie_key] = 'cookie value'
136
+ get 'action_which_gets_cookie', :expected => "cookie value"
137
+ end
138
+
139
+ it "should support a Hash value" do
140
+ cookies[:cookie_key] = {'value' => 'cookie value', 'path' => '/not/default'}
141
+ get 'action_which_gets_cookie', :expected => {'value' => 'cookie value', 'path' => '/not/default'}
142
+ end
143
+
144
+ end
145
+
146
+ describe "reading cookies from the response" do
147
+
148
+ it "should support a Symbol key" do
149
+ get 'action_which_sets_cookie', :value => "cookie value"
150
+ if ::Rails::VERSION::STRING >= "2.3"
151
+ cookies[:cookie_key].should == "cookie+value"
152
+ else
153
+ cookies[:cookie_key].should == ["cookie value"]
154
+ end
155
+ end
156
+
157
+ it "should support a String key" do
158
+ get 'action_which_sets_cookie', :value => "cookie value"
159
+ if ::Rails::VERSION::STRING >= "2.3"
160
+ cookies['cookie_key'].should == "cookie+value"
161
+ else
162
+ cookies['cookie_key'].should == ["cookie value"]
163
+ end
164
+ end
165
+
166
+ end
167
+
168
+ it "should expose instance vars through the assigns hash" do
169
+ get 'action_setting_the_assigns_hash'
170
+ assigns[:indirect_assigns_key].should == :indirect_assigns_key_value
171
+ end
172
+
173
+ it "should expose instance vars through the assigns hash that are set to false" do
174
+ get 'action_that_assigns_false_to_a_variable'
175
+ assigns[:a_variable].should be_false
176
+ end
177
+
178
+ it "should NOT complain when calling should_receive with arguments other than :render" do
179
+ controller.should_receive(:anything_besides_render)
180
+ lambda {
181
+ controller.rspec_verify
182
+ }.should raise_error(Exception, /expected :anything_besides_render/)
183
+ end
184
+
185
+ it "should not run a skipped before_filter" do
186
+ lambda {
187
+ get 'action_with_skipped_before_filter'
188
+ }.should_not raise_error
189
+ end
190
+
191
+ describe "extending #render on a controller" do
192
+ it "supports two arguments (as with rails 2.2)" do
193
+ get 'action_with_two_arg_render'
194
+ response.body.should =~ /new Effect\.Highlight/
195
+ end
196
+ end
197
+ end
198
+
199
+ describe "Given a controller spec for RedirectSpecController running in #{mode} mode", :type => :controller do
200
+ controller_name :redirect_spec
201
+ integrate_views if mode == 'integration'
202
+
203
+ it "a redirect should ignore the absence of a template" do
204
+ get 'action_with_redirect_to_somewhere'
205
+ response.should be_redirect
206
+ response.redirect_url.should == "http://test.host/redirect_spec/somewhere"
207
+ response.should redirect_to("http://test.host/redirect_spec/somewhere")
208
+ end
209
+
210
+ it "a call to response.should redirect_to should fail if no redirect" do
211
+ get 'action_with_no_redirect'
212
+ lambda {
213
+ response.redirect?.should be_true
214
+ }.should fail
215
+ lambda {
216
+ response.should redirect_to("http://test.host/redirect_spec/somewhere")
217
+ }.should fail_with("expected redirect to \"http://test.host/redirect_spec/somewhere\", got no redirect")
218
+ end
219
+ end
220
+
221
+ describe "Given a controller spec running in #{mode} mode" do
222
+ example_group = describe "A controller spec"
223
+ # , :type => :controller do
224
+ # integrate_views if mode == 'integration'
225
+ it "a spec in a context without controller_name set should fail with a useful warning" do
226
+ pending("need a new way to deal with examples that should_raise")
227
+ # ,
228
+ # :should_raise => [
229
+ # Spec::Expectations::ExpectationNotMetError,
230
+ # /You have to declare the controller name in controller specs/
231
+ # ] do
232
+ end
233
+ end
234
+
235
+ end
236
+
237
+ ['integration', 'isolation'].each do |mode|
238
+ describe "A controller example running in #{mode} mode", :type => :controller do
239
+ controller_name :controller_inheriting_from_application_controller
240
+ integrate_views if mode == 'integration'
241
+
242
+ it "should only have a before filter inherited from ApplicationController run once..." do
243
+ controller.should_receive(:i_should_only_be_run_once).once
244
+ get :action_with_inherited_before_filter
245
+ end
246
+ end
247
+ end
248
+
249
+ describe ControllerSpecController, :type => :controller do
250
+ it "should use the controller passed to #describe" do
251
+ end
252
+ end
253
+
254
+ describe "A controller spec with controller_name set", :type => :controller do
255
+ controller_name :controller_spec
256
+
257
+ describe "nested" do
258
+ it "should inherit the controller name" do
259
+ get 'action_with_template'
260
+ response.should be_success
261
+ end
262
+ end
263
+ end
264
+
265
+ module Spec
266
+ module Rails
267
+ module Example
268
+ describe ApplicationController, :type => :controller do
269
+ describe "controller_name" do
270
+ controller_name :controller_spec
271
+ it "overrides the controller class submitted to the outermost group" do
272
+ subject.should be_an_instance_of(ControllerSpecController)
273
+ end
274
+ describe "in a nested group" do
275
+ it "overrides the controller class submitted to the outermost group" do
276
+ subject.should be_an_instance_of(ControllerSpecController)
277
+ end
278
+ describe "(doubly nested)" do
279
+ it "overrides the controller class submitted to the outermost group" do
280
+ subject.should be_an_instance_of(ControllerSpecController)
281
+ end
282
+ end
283
+ end
284
+ end
285
+ end
286
+
287
+ describe ControllerExampleGroup do
288
+ it "should clear its name from the description" do
289
+ group = describe("foo", :type => :controller) do
290
+ $nested_group = describe("bar") do
291
+ end
292
+ end
293
+ group.description.to_s.should == "foo"
294
+ $nested_group.description.to_s.should == "foo bar"
295
+ end
296
+ end
297
+ end
298
+ end
299
+ end