rspec-rails 2.99.0 → 3.0.0.beta1

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 (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