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.
- data/.document +7 -0
- data/History.rdoc +207 -0
- data/License.txt +33 -0
- data/Manifest.txt +167 -0
- data/README.rdoc +45 -0
- data/Rakefile +79 -0
- data/TODO.txt +1 -0
- data/Upgrade.rdoc +103 -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 +54 -0
- data/generators/rspec/templates/previous_failures.txt +0 -0
- data/generators/rspec/templates/rcov.opts +2 -0
- data/generators/rspec/templates/rspec.rake +165 -0
- data/generators/rspec/templates/script/autospec +6 -0
- data/generators/rspec/templates/script/spec +10 -0
- data/generators/rspec/templates/script/spec_server +9 -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/example/assigns_hash_proxy.rb +39 -0
- data/lib/spec/rails/example/controller_example_group.rb +247 -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 +153 -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_example_group.rb +13 -0
- data/lib/spec/rails/example/routing_helpers.rb +70 -0
- data/lib/spec/rails/example/view_example_group.rb +186 -0
- data/lib/spec/rails/example.rb +47 -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 +45 -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 +44 -0
- data/lib/spec/rails/extensions.rb +11 -0
- data/lib/spec/rails/interop/testcase.rb +14 -0
- data/lib/spec/rails/matchers/ar_be_valid.rb +44 -0
- data/lib/spec/rails/matchers/assert_select.rb +146 -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/matchers.rb +32 -0
- data/lib/spec/rails/mocks.rb +135 -0
- data/lib/spec/rails/spec_server.rb +127 -0
- data/lib/spec/rails/story_adapter.rb +79 -0
- data/lib/spec/rails/version.rb +15 -0
- data/lib/spec/rails.rb +28 -0
- data/rspec-rails.gemspec +57 -0
- data/spec/autotest/mappings_spec.rb +86 -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 +120 -0
- data/spec/resources/controllers/example.txt +1 -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.html.erb +0 -0
- data/spec/resources/views/controller_spec/action_setting_flash_after_session_reset.html.erb +1 -0
- data/spec/resources/views/controller_spec/action_setting_flash_before_session_reset.html.erb +1 -0
- data/spec/resources/views/controller_spec/action_setting_the_assigns_hash.html.erb +0 -0
- data/spec/resources/views/controller_spec/action_with_errors_in_template.html.erb +1 -0
- data/spec/resources/views/controller_spec/action_with_template.html.erb +1 -0
- data/spec/resources/views/layouts/application.html.erb +0 -0
- data/spec/resources/views/layouts/simple.html.erb +0 -0
- data/spec/resources/views/objects/_object.html.erb +1 -0
- data/spec/resources/views/render_spec/_a_partial.html.erb +0 -0
- data/spec/resources/views/render_spec/action_with_alternate_layout.html.erb +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/rjs_spec/_replacement_partial.html.erb +1 -0
- data/spec/resources/views/rjs_spec/hide_div.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/hide_page_element.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/insert_html.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/replace.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/replace_html.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/replace_html_with_partial.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/visual_effect.js.rjs +1 -0
- data/spec/resources/views/rjs_spec/visual_toggle_effect.js.rjs +1 -0
- data/spec/resources/views/tag_spec/no_tags.html.erb +1 -0
- data/spec/resources/views/tag_spec/single_div_with_no_attributes.html.erb +1 -0
- data/spec/resources/views/tag_spec/single_div_with_one_attribute.html.erb +1 -0
- data/spec/resources/views/view_spec/_partial.html.erb +2 -0
- data/spec/resources/views/view_spec/_partial_used_twice.html.erb +0 -0
- data/spec/resources/views/view_spec/_partial_with_local_variable.html.erb +1 -0
- data/spec/resources/views/view_spec/_partial_with_sub_partial.html.erb +1 -0
- data/spec/resources/views/view_spec/_spacer.html.erb +1 -0
- data/spec/resources/views/view_spec/accessor.html.erb +5 -0
- data/spec/resources/views/view_spec/block_helper.html.erb +3 -0
- data/spec/resources/views/view_spec/entry_form.html.erb +2 -0
- data/spec/resources/views/view_spec/explicit_helper.html.erb +2 -0
- data/spec/resources/views/view_spec/foo/show.html.erb +1 -0
- data/spec/resources/views/view_spec/implicit_helper.html.erb +2 -0
- data/spec/resources/views/view_spec/multiple_helpers.html.erb +3 -0
- data/spec/resources/views/view_spec/path_params.html.erb +1 -0
- data/spec/resources/views/view_spec/should_not_receive.html.erb +3 -0
- data/spec/resources/views/view_spec/template_with_partial.html.erb +5 -0
- data/spec/resources/views/view_spec/template_with_partial_using_collection.html.erb +3 -0
- data/spec/resources/views/view_spec/template_with_partial_with_array.html.erb +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 +299 -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 +233 -0
- data/spec/spec/rails/example/model_example_group_spec.rb +20 -0
- data/spec/spec/rails/example/routing_example_group_spec.rb +9 -0
- data/spec/spec/rails/example/shared_routing_example_group_examples.rb +44 -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 +809 -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 +191 -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 +79 -0
- metadata +277 -0
@@ -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
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
<% raise %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<div>This is action_with_template.rhtml</div>
|
File without changes
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= object.name %>
|
File without changes
|
File without changes
|
File without changes
|
@@ -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></div>
|
@@ -0,0 +1 @@
|
|
1
|
+
<div key="value"></div>
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
<div><%= x %></div>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= render :partial => 'partial', :object => partial %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<hr id="spacer" />
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= method_in_plugin_application_helper %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= params[:controller] %>
|
@@ -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
|