rspec-rails 2.99.0 → 3.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (128) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.sig +2 -0
  3. data.tar.gz.sig +0 -0
  4. data/Changelog.md +40 -68
  5. data/License.txt +1 -0
  6. data/README.md +6 -4
  7. data/features/Generators.md +24 -0
  8. data/features/GettingStarted.md +84 -0
  9. data/features/README.md +56 -0
  10. data/features/RailsVersions.md +4 -0
  11. data/features/Transactions.md +84 -0
  12. data/features/Upgrade.md +121 -0
  13. data/features/controller_specs/Cookies.md +57 -0
  14. data/features/controller_specs/README.md +45 -0
  15. data/features/controller_specs/anonymous_controller.feature +378 -0
  16. data/features/controller_specs/bypass_rescue.feature +75 -0
  17. data/features/controller_specs/controller_spec.feature +58 -0
  18. data/features/controller_specs/engine_routes.feature +51 -0
  19. data/features/controller_specs/isolation_from_views.feature +87 -0
  20. data/features/controller_specs/render_views.feature +114 -0
  21. data/features/directory_structure.feature +71 -0
  22. data/features/feature_specs/feature_spec.feature +35 -0
  23. data/features/helper_specs/helper_spec.feature +122 -0
  24. data/features/mailer_specs/url_helpers.feature +38 -0
  25. data/features/matchers/README.md +18 -0
  26. data/features/matchers/new_record_matcher.feature +41 -0
  27. data/features/matchers/redirect_to_matcher.feature +40 -0
  28. data/features/matchers/relation_match_array.feature +27 -0
  29. data/features/matchers/render_template_matcher.feature +49 -0
  30. data/features/mocks/mock_model.feature +147 -0
  31. data/features/mocks/stub_model.feature +58 -0
  32. data/features/model_specs/README.md +21 -0
  33. data/features/model_specs/errors_on.feature +51 -0
  34. data/features/model_specs/records.feature +27 -0
  35. data/features/model_specs/transactional_examples.feature +109 -0
  36. data/features/request_specs/request_spec.feature +49 -0
  37. data/features/routing_specs/README.md +16 -0
  38. data/features/routing_specs/be_routable_matcher.feature +80 -0
  39. data/features/routing_specs/engine_routes.feature +38 -0
  40. data/features/routing_specs/named_routes.feature +18 -0
  41. data/features/routing_specs/route_to_matcher.feature +90 -0
  42. data/features/step_definitions/additional_cli_steps.rb +4 -0
  43. data/features/step_definitions/model_steps.rb +3 -0
  44. data/features/support/capybara.rb +7 -0
  45. data/features/support/env.rb +53 -0
  46. data/features/support/rails_versions.rb +4 -0
  47. data/features/support/rubinius.rb +6 -0
  48. data/features/view_specs/inferred_controller_path.feature +45 -0
  49. data/features/view_specs/stub_template.feature +51 -0
  50. data/features/view_specs/view_spec.feature +206 -0
  51. data/lib/generators/rspec/controller/templates/controller_spec.rb +1 -1
  52. data/lib/generators/rspec/install/templates/spec/spec_helper.rb.tt +2 -21
  53. data/lib/generators/rspec/integration/integration_generator.rb +2 -3
  54. data/lib/generators/rspec/integration/templates/request_spec.rb +1 -1
  55. data/lib/generators/rspec/mailer/templates/mailer_spec.rb +4 -4
  56. data/lib/generators/rspec/scaffold/scaffold_generator.rb +2 -3
  57. data/lib/generators/rspec/scaffold/templates/controller_spec.rb +16 -16
  58. data/lib/generators/rspec/scaffold/templates/edit_spec.rb +2 -2
  59. data/lib/generators/rspec/scaffold/templates/index_spec.rb +1 -1
  60. data/lib/generators/rspec/scaffold/templates/new_spec.rb +2 -2
  61. data/lib/generators/rspec/scaffold/templates/routing_spec.rb +7 -7
  62. data/lib/generators/rspec/scaffold/templates/show_spec.rb +2 -2
  63. data/lib/rspec/rails.rb +0 -5
  64. data/lib/rspec/rails/adapters.rb +5 -12
  65. data/lib/rspec/rails/example.rb +55 -24
  66. data/lib/rspec/rails/example/controller_example_group.rb +7 -31
  67. data/lib/rspec/rails/example/view_example_group.rb +0 -3
  68. data/lib/rspec/rails/matchers.rb +1 -2
  69. data/lib/rspec/rails/matchers/be_a_new.rb +1 -1
  70. data/lib/rspec/rails/matchers/be_new_record.rb +1 -1
  71. data/lib/rspec/rails/matchers/be_valid.rb +1 -1
  72. data/lib/rspec/rails/matchers/have_rendered.rb +1 -1
  73. data/lib/rspec/rails/matchers/redirect_to.rb +1 -1
  74. data/lib/rspec/rails/matchers/relation_match_array.rb +1 -1
  75. data/lib/rspec/rails/matchers/routing_matchers.rb +6 -10
  76. data/lib/rspec/rails/mocks.rb +5 -41
  77. data/lib/rspec/rails/tasks/rspec.rake +5 -12
  78. data/lib/rspec/rails/vendor/capybara.rb +4 -35
  79. data/lib/rspec/rails/version.rb +1 -1
  80. data/spec/generators/rspec/controller/controller_generator_spec.rb +97 -0
  81. data/spec/generators/rspec/helper/helper_generator_spec.rb +30 -0
  82. data/spec/generators/rspec/install/install_generator_spec.rb +30 -0
  83. data/spec/generators/rspec/integration/integration_generator_spec.rb +44 -0
  84. data/spec/generators/rspec/mailer/mailer_generator_spec.rb +48 -0
  85. data/spec/generators/rspec/model/model_generator_spec.rb +52 -0
  86. data/spec/generators/rspec/observer/observer_generator_spec.rb +21 -0
  87. data/spec/generators/rspec/scaffold/scaffold_generator_spec.rb +138 -0
  88. data/spec/generators/rspec/view/view_generator_spec.rb +41 -0
  89. data/spec/rspec/rails/assertion_adapter_spec.rb +28 -0
  90. data/spec/rspec/rails/assertion_delegator_spec.rb +43 -0
  91. data/spec/rspec/rails/configuration_spec.rb +26 -0
  92. data/spec/rspec/rails/deprecations_spec.rb +18 -0
  93. data/spec/rspec/rails/example/controller_example_group_spec.rb +100 -0
  94. data/spec/rspec/rails/example/feature_example_group_spec.rb +56 -0
  95. data/spec/rspec/rails/example/helper_example_group_spec.rb +66 -0
  96. data/spec/rspec/rails/example/mailer_example_group_spec.rb +21 -0
  97. data/spec/rspec/rails/example/model_example_group_spec.rb +15 -0
  98. data/spec/rspec/rails/example/request_example_group_spec.rb +17 -0
  99. data/spec/rspec/rails/example/routing_example_group_spec.rb +32 -0
  100. data/spec/rspec/rails/example/view_example_group_spec.rb +220 -0
  101. data/spec/rspec/rails/extensions/active_model/errors_on_spec.rb +23 -0
  102. data/spec/rspec/rails/extensions/active_record/base_spec.rb +42 -0
  103. data/spec/rspec/rails/fixture_support_spec.rb +17 -0
  104. data/spec/rspec/rails/matchers/be_a_new_spec.rb +142 -0
  105. data/spec/rspec/rails/matchers/be_new_record_spec.rb +33 -0
  106. data/spec/rspec/rails/matchers/be_routable_spec.rb +41 -0
  107. data/spec/rspec/rails/matchers/be_valid_spec.rb +44 -0
  108. data/spec/rspec/rails/matchers/has_spec.rb +29 -0
  109. data/spec/rspec/rails/matchers/have_rendered_spec.rb +93 -0
  110. data/spec/rspec/rails/matchers/redirect_to_spec.rb +80 -0
  111. data/spec/rspec/rails/matchers/relation_match_array_spec.rb +31 -0
  112. data/spec/rspec/rails/matchers/route_to_spec.rb +151 -0
  113. data/spec/rspec/rails/minitest_lifecycle_adapter_spec.rb +22 -0
  114. data/spec/rspec/rails/mocks/mock_model_spec.rb +378 -0
  115. data/spec/rspec/rails/mocks/stub_model_spec.rb +154 -0
  116. data/spec/rspec/rails/setup_and_teardown_adapter_spec.rb +32 -0
  117. data/spec/rspec/rails/view_rendering_spec.rb +111 -0
  118. data/spec/spec_helper.rb +35 -0
  119. data/spec/support/ar_classes.rb +42 -0
  120. data/spec/support/helpers.rb +20 -0
  121. data/spec/support/matchers.rb +9 -0
  122. data/spec/support/null_object.rb +6 -0
  123. metadata +229 -42
  124. metadata.gz.sig +0 -0
  125. data/lib/autotest/rails_rspec2.rb +0 -91
  126. data/lib/rspec/rails/infer_type_configuration.rb +0 -26
  127. data/lib/rspec/rails/matchers/have_extension.rb +0 -36
  128. data/lib/rspec/rails/module_inclusion.rb +0 -19
@@ -0,0 +1,26 @@
1
+ require "spec_helper"
2
+
3
+ describe "configuration" do
4
+ before do
5
+ @orig_render_views = RSpec.configuration.render_views?
6
+ end
7
+
8
+ after do
9
+ RSpec.configuration.render_views = @orig_render_views
10
+ end
11
+
12
+ describe "#render_views?" do
13
+ it "is false by default" do
14
+ RSpec.configuration.render_views?.should be_falsey
15
+ end
16
+ end
17
+
18
+ describe "#render_views" do
19
+ it "sets render_views? to return true" do
20
+ RSpec.configuration.render_views = false
21
+ RSpec.configuration.render_views
22
+
23
+ RSpec.configuration.render_views?.should be_truthy
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe "rspec-rails-2 deprecations" do
4
+ context "controller specs" do
5
+ describe "::integrate_views" do
6
+ let(:group) do
7
+ RSpec::Core::ExampleGroup.describe do
8
+ include RSpec::Rails::ControllerExampleGroup
9
+ end
10
+ end
11
+
12
+ it "is deprecated" do
13
+ RSpec.should_receive(:deprecate)
14
+ group.integrate_views
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,100 @@
1
+ require "spec_helper"
2
+
3
+ class ::ApplicationController
4
+ end
5
+
6
+ module RSpec::Rails
7
+ describe ControllerExampleGroup do
8
+ it { should be_included_in_files_in('./spec/controllers/') }
9
+ it { should be_included_in_files_in('.\\spec\\controllers\\') }
10
+
11
+ let(:group) do
12
+ RSpec::Core::ExampleGroup.describe do
13
+ include ControllerExampleGroup
14
+ end
15
+ end
16
+
17
+ it "includes routing matchers" do
18
+ group.included_modules.should include(RSpec::Rails::Matchers::RoutingMatchers)
19
+ end
20
+
21
+ it "adds :type => :controller to the metadata" do
22
+ group.metadata[:type].should eq(:controller)
23
+ end
24
+
25
+ context "with implicit subject" do
26
+ it "uses the controller as the subject" do
27
+ controller = double('controller')
28
+ example = group.new
29
+ example.stub(:controller => controller)
30
+ example.subject.should == controller
31
+ end
32
+ end
33
+
34
+ context "with explicit subject" do
35
+ it "uses the specified subject instead of the controller" do
36
+ group.subject { 'explicit' }
37
+ example = group.new
38
+ example.subject.should == 'explicit'
39
+ end
40
+ end
41
+
42
+ describe "#controller" do
43
+ before do
44
+ group.class_eval do
45
+ controller(Class.new) { }
46
+ end
47
+ end
48
+
49
+ it "delegates named route helpers to the underlying controller" do
50
+ controller = double('controller')
51
+ controller.stub(:foos_url).and_return('http://test.host/foos')
52
+
53
+ example = group.new
54
+ example.stub(:controller => controller)
55
+
56
+ # As in the routing example spec, this is pretty invasive, but not sure
57
+ # how to do it any other way as the correct operation relies on before
58
+ # hooks
59
+ routes = ActionDispatch::Routing::RouteSet.new
60
+ routes.draw { resources :foos }
61
+ example.instance_variable_set(:@orig_routes, routes)
62
+
63
+ example.foos_url.should eq('http://test.host/foos')
64
+ end
65
+ end
66
+
67
+ describe "#bypass_rescue" do
68
+ it "overrides the rescue_with_handler method on the controller to raise submitted error" do
69
+ example = group.new
70
+ example.instance_variable_set("@controller", Class.new { def rescue_with_handler(e); end }.new)
71
+ example.bypass_rescue
72
+ expect do
73
+ example.controller.rescue_with_handler(RuntimeError.new("foo"))
74
+ end.to raise_error("foo")
75
+ end
76
+ end
77
+
78
+ describe "with inferred anonymous controller" do
79
+ before do
80
+ group.stub(:controller_class).and_return(Class.new)
81
+ end
82
+
83
+ it "infers the anonymous controller class when infer_base_class_for_anonymous_controllers is true" do
84
+ RSpec.configuration.stub(:infer_base_class_for_anonymous_controllers?).and_return(true)
85
+ group.controller { }
86
+
87
+ controller_class = group.metadata[:example_group][:described_class]
88
+ controller_class.superclass.should eq(group.controller_class)
89
+ end
90
+
91
+ it "sets the anonymous controller class to ApplicationController when infer_base_class_for_anonymous_controllers is false" do
92
+ RSpec.configuration.stub(:infer_base_class_for_anonymous_controllers?).and_return(false)
93
+ group.controller { }
94
+
95
+ controller_class = group.metadata[:example_group][:described_class]
96
+ controller_class.superclass.should eq(ApplicationController)
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,56 @@
1
+ require "spec_helper"
2
+
3
+ module RSpec::Rails
4
+ describe FeatureExampleGroup do
5
+ it { should be_included_in_files_in('./spec/features/') }
6
+ it { should be_included_in_files_in('.\\spec\\features\\') }
7
+
8
+ it "adds :type => :feature to the metadata" do
9
+ group = RSpec::Core::ExampleGroup.describe do
10
+ include FeatureExampleGroup
11
+ end
12
+
13
+ expect(group.metadata[:type]).to eq(:feature)
14
+ end
15
+
16
+ it "includes Rails route helpers" do
17
+ Rails.application.routes.draw do
18
+ get "/foo", :as => :foo, :to => "foo#bar"
19
+ end
20
+
21
+ group = RSpec::Core::ExampleGroup.describe do
22
+ include FeatureExampleGroup
23
+ end
24
+
25
+ expect(group.new.foo_path).to eq("/foo")
26
+ expect(group.new.foo_url).to eq("http://www.example.com/foo")
27
+ end
28
+
29
+ describe "#visit" do
30
+ it "raises an error informing about missing Capybara" do
31
+ group = RSpec::Core::ExampleGroup.describe do
32
+ include FeatureExampleGroup
33
+ end
34
+
35
+ expect {
36
+ group.new.visit('/foobar')
37
+ }.to raise_error(/Capybara not loaded/)
38
+ end
39
+
40
+ it "is resistant to load order errors" do
41
+ capybara = Module.new do
42
+ def visit(url)
43
+ "success: #{url}"
44
+ end
45
+ end
46
+
47
+ group = RSpec::Core::ExampleGroup.describe do
48
+ include capybara
49
+ include FeatureExampleGroup
50
+ end
51
+
52
+ expect(group.new.visit("/foo")).to eq("success: /foo")
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,66 @@
1
+ require "spec_helper"
2
+
3
+ module RSpec::Rails
4
+ describe HelperExampleGroup do
5
+ module ::FoosHelper; end
6
+ subject { HelperExampleGroup }
7
+
8
+ it { should be_included_in_files_in('./spec/helpers/') }
9
+ it { should be_included_in_files_in('.\\spec\\helpers\\') }
10
+
11
+ it "provides a controller_path based on the helper module's name" do
12
+ example = double
13
+ example.stub_chain(:example_group, :described_class) { FoosHelper }
14
+
15
+ helper_spec = Object.new.extend HelperExampleGroup
16
+ helper_spec.__send__(:_controller_path, example).should == "foos"
17
+ end
18
+
19
+ it "adds :type => :helper to the metadata" do
20
+ group = RSpec::Core::ExampleGroup.describe do
21
+ include HelperExampleGroup
22
+ end
23
+ group.metadata[:type].should eq(:helper)
24
+ end
25
+
26
+ describe "#helper" do
27
+ it "returns the instance of AV::Base provided by AV::TC::Behavior" do
28
+ helper_spec = Object.new.extend HelperExampleGroup
29
+ helper_spec.should_receive(:view_assigns)
30
+ av_tc_b_view = double('_view')
31
+ av_tc_b_view.should_receive(:assign)
32
+ helper_spec.stub(:_view) { av_tc_b_view }
33
+ helper_spec.helper.should eq(av_tc_b_view)
34
+ end
35
+
36
+ before do
37
+ Object.const_set(:ApplicationHelper, Module.new)
38
+ end
39
+
40
+ after do
41
+ Object.__send__(:remove_const, :ApplicationHelper)
42
+ end
43
+
44
+ it "includes ApplicationHelper" do
45
+ group = RSpec::Core::ExampleGroup.describe do
46
+ include HelperExampleGroup
47
+ def _view
48
+ ActionView::Base.new
49
+ end
50
+ end
51
+ group.new.helper.should be_kind_of(ApplicationHelper)
52
+ end
53
+ end
54
+ end
55
+
56
+ describe HelperExampleGroup::ClassMethods do
57
+ describe "determine_default_helper_class" do
58
+ it "returns the helper module passed to describe" do
59
+ helper_spec = Object.new.extend HelperExampleGroup::ClassMethods
60
+ helper_spec.stub(:described_class) { FoosHelper }
61
+ helper_spec.determine_default_helper_class("ignore this").
62
+ should eq(FoosHelper)
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ module RSpec::Rails
4
+ describe MailerExampleGroup do
5
+ module ::Rails; end
6
+ before do
7
+ Rails.stub_chain(:application, :routes, :url_helpers).and_return(Rails)
8
+ Rails.stub_chain(:configuration, :action_mailer, :default_url_options).and_return({})
9
+ end
10
+
11
+ it { should be_included_in_files_in('./spec/mailers/') }
12
+ it { should be_included_in_files_in('.\\spec\\mailers\\') }
13
+
14
+ it "adds :type => :mailer to the metadata" do
15
+ group = RSpec::Core::ExampleGroup.describe do
16
+ include MailerExampleGroup
17
+ end
18
+ group.metadata[:type].should eq(:mailer)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ require "spec_helper"
2
+
3
+ module RSpec::Rails
4
+ describe ModelExampleGroup do
5
+ it { should be_included_in_files_in('./spec/models/') }
6
+ it { should be_included_in_files_in('.\\spec\\models\\') }
7
+
8
+ it "adds :type => :model to the metadata" do
9
+ group = RSpec::Core::ExampleGroup.describe do
10
+ include ModelExampleGroup
11
+ end
12
+ group.metadata[:type].should eq(:model)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ require "spec_helper"
2
+
3
+ module RSpec::Rails
4
+ describe RequestExampleGroup do
5
+ it { should be_included_in_files_in('./spec/requests/') }
6
+ it { should be_included_in_files_in('./spec/integration/') }
7
+ it { should be_included_in_files_in('.\\spec\\requests\\') }
8
+ it { should be_included_in_files_in('.\\spec\\integration\\') }
9
+
10
+ it "adds :type => :request to the metadata" do
11
+ group = RSpec::Core::ExampleGroup.describe do
12
+ include RequestExampleGroup
13
+ end
14
+ group.metadata[:type].should eq(:request)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ require "spec_helper"
2
+
3
+ module RSpec::Rails
4
+ describe RoutingExampleGroup do
5
+ it { should be_included_in_files_in('./spec/routing/') }
6
+ it { should be_included_in_files_in('.\\spec\\routing\\') }
7
+
8
+ it "adds :type => :routing to the metadata" do
9
+ group = RSpec::Core::ExampleGroup.describe do
10
+ include RoutingExampleGroup
11
+ end
12
+ group.metadata[:type].should eq(:routing)
13
+ end
14
+
15
+ describe "named routes" do
16
+ it "delegates them to the route_set" do
17
+ group = RSpec::Core::ExampleGroup.describe do
18
+ include RoutingExampleGroup
19
+ end
20
+
21
+ example = group.new
22
+
23
+ # Yes, this is quite invasive
24
+ url_helpers = double('url_helpers', :foo_path => "foo")
25
+ routes = double('routes', :url_helpers => url_helpers)
26
+ example.stub(:routes => routes)
27
+
28
+ example.foo_path.should == "foo"
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,220 @@
1
+ require "spec_helper"
2
+
3
+ module RSpec::Rails
4
+ describe ViewExampleGroup do
5
+ it { should be_included_in_files_in('./spec/views/') }
6
+ it { should be_included_in_files_in('.\\spec\\views\\') }
7
+
8
+ it "adds :type => :view to the metadata" do
9
+ group = RSpec::Core::ExampleGroup.describe do
10
+ include ViewExampleGroup
11
+ end
12
+ group.metadata[:type].should eq(:view)
13
+ end
14
+
15
+ describe 'automatic inclusion of helpers' do
16
+ module ::ThingsHelper; end
17
+ module ::Namespaced; module ThingsHelper; end; end
18
+
19
+ it 'includes the helper with the same name' do
20
+ group = RSpec::Core::ExampleGroup.describe 'things/show.html.erb'
21
+ group.should_receive(:helper).with(ThingsHelper)
22
+ group.class_eval do
23
+ include ViewExampleGroup
24
+ end
25
+ end
26
+
27
+ it 'includes the namespaced helper with the same name' do
28
+ group = RSpec::Core::ExampleGroup.describe 'namespaced/things/show.html.erb'
29
+ group.should_receive(:helper).with(Namespaced::ThingsHelper)
30
+ group.class_eval do
31
+ include ViewExampleGroup
32
+ end
33
+ end
34
+
35
+ it 'operates normally when no helper with the same name exists' do
36
+ raise 'unexpected constant found' if Object.const_defined?('ClocksHelper')
37
+ lambda {
38
+ RSpec::Core::ExampleGroup.describe 'clocks/show.html.erb' do
39
+ include ViewExampleGroup
40
+ end
41
+ }.should_not raise_error
42
+ end
43
+
44
+ context 'application helper exists' do
45
+ before do
46
+ if !Object.const_defined? 'ApplicationHelper'
47
+ module ::ApplicationHelper; end
48
+ @application_helper_defined = true
49
+ end
50
+ end
51
+
52
+ after do
53
+ if @application_helper_defined
54
+ Object.__send__ :remove_const, 'ApplicationHelper'
55
+ end
56
+ end
57
+
58
+ it 'includes the application helper' do
59
+ group = RSpec::Core::Example.describe 'bars/new.html.erb'
60
+ group.should_receive(:helper).with(ApplicationHelper)
61
+ group.class_eval do
62
+ include ViewExampleGroup
63
+ end
64
+ end
65
+ end
66
+
67
+ context 'no application helper exists' do
68
+ before do
69
+ if Object.const_defined? 'ApplicationHelper'
70
+ @application_helper = ApplicationHelper
71
+ Object.__send__ :remove_const, 'ApplicationHelper'
72
+ end
73
+ end
74
+
75
+ after do
76
+ if @application_helper
77
+ ApplicationHelper = @application_helper
78
+ end
79
+ end
80
+
81
+ it 'operates normally' do
82
+ lambda {
83
+ RSpec::Core::ExampleGroup.describe 'foos/edit.html.erb' do
84
+ include ViewExampleGroup
85
+ end
86
+ }.should_not raise_error
87
+ end
88
+ end
89
+ end
90
+
91
+ describe "#render" do
92
+ let(:view_spec) do
93
+ Class.new do
94
+ module Local
95
+ def received
96
+ @received ||= []
97
+ end
98
+ def render(options={}, local_assigns={}, &block)
99
+ received << [options, local_assigns, block]
100
+ end
101
+ def _assigns
102
+ {}
103
+ end
104
+ end
105
+ include Local
106
+ include ViewExampleGroup::ExampleMethods
107
+ end.new
108
+ end
109
+
110
+ context "given no input" do
111
+ it "sends render(:template => (described file)) to the view" do
112
+ view_spec.stub(:_default_file_to_render) { "widgets/new" }
113
+ view_spec.render
114
+ view_spec.received.first.should == [{:template => "widgets/new"},{}, nil]
115
+ end
116
+
117
+ it "converts the filename components into render options" do
118
+ view_spec.stub(:_default_file_to_render) { "widgets/new.en.html.erb" }
119
+ view_spec.render
120
+
121
+ if ::Rails::VERSION::STRING >= '3.2'
122
+ view_spec.received.first.should == [{:template => "widgets/new", :locales=>['en'], :formats=>['html'], :handlers=>['erb']}, {}, nil]
123
+ else
124
+ view_spec.received.first.should == [{:template => "widgets/new.en.html.erb"}, {}, nil]
125
+ end
126
+ end
127
+ end
128
+
129
+ context "given a string" do
130
+ it "sends string as the first arg to render" do
131
+ view_spec.render('arbitrary/path')
132
+ view_spec.received.first.should == ["arbitrary/path", {}, nil]
133
+ end
134
+ end
135
+
136
+ context "given a hash" do
137
+ it "sends the hash as the first arg to render" do
138
+ view_spec.render(:foo => 'bar')
139
+ view_spec.received.first.should == [{:foo => "bar"}, {}, nil]
140
+ end
141
+ end
142
+ end
143
+
144
+ describe '#params' do
145
+ let(:view_spec) do
146
+ Class.new do
147
+ include ViewExampleGroup::ExampleMethods
148
+ def controller
149
+ @controller ||= Object.new
150
+ end
151
+ end.new
152
+ end
153
+
154
+ it 'delegates to the controller' do
155
+ view_spec.controller.should_receive(:params).and_return({})
156
+ view_spec.params[:foo] = 1
157
+ end
158
+ end
159
+
160
+ describe "#_controller_path" do
161
+ let(:view_spec) do
162
+ Class.new do
163
+ include ViewExampleGroup::ExampleMethods
164
+ end.new
165
+ end
166
+ context "with a common _default_file_to_render" do
167
+ it "it returns the directory" do
168
+ view_spec.stub(:_default_file_to_render).
169
+ and_return("things/new.html.erb")
170
+ view_spec.__send__(:_controller_path).
171
+ should == "things"
172
+ end
173
+ end
174
+
175
+ context "with a nested _default_file_to_render" do
176
+ it "it returns the directory path" do
177
+ view_spec.stub(:_default_file_to_render).
178
+ and_return("admin/things/new.html.erb")
179
+ view_spec.__send__(:_controller_path).
180
+ should == "admin/things"
181
+ end
182
+ end
183
+ end
184
+
185
+ describe "#view" do
186
+ let(:view_spec) do
187
+ Class.new do
188
+ include ViewExampleGroup::ExampleMethods
189
+ end.new
190
+ end
191
+
192
+ it "delegates to _view" do
193
+ view = double("view")
194
+ view_spec.stub(:_view) { view }
195
+ view_spec.view.should == view
196
+ end
197
+ end
198
+
199
+ describe "#template" do
200
+ let(:view_spec) do
201
+ Class.new do
202
+ include ViewExampleGroup::ExampleMethods
203
+ def _view; end
204
+ end.new
205
+ end
206
+
207
+ before { RSpec.stub(:deprecate) }
208
+
209
+ it "is deprecated" do
210
+ RSpec.should_receive(:deprecate)
211
+ view_spec.template
212
+ end
213
+
214
+ it "delegates to #view" do
215
+ view_spec.should_receive(:view)
216
+ view_spec.template
217
+ end
218
+ end
219
+ end
220
+ end