rspec-rails 1.1.5

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 (159) hide show
  1. data/History.txt +57 -0
  2. data/Manifest.txt +158 -0
  3. data/README.txt +81 -0
  4. data/Rakefile +39 -0
  5. data/UPGRADE +7 -0
  6. data/generators/rspec/CHANGES +1 -0
  7. data/generators/rspec/rspec_generator.rb +40 -0
  8. data/generators/rspec/templates/all_stories.rb +4 -0
  9. data/generators/rspec/templates/previous_failures.txt +0 -0
  10. data/generators/rspec/templates/rcov.opts +2 -0
  11. data/generators/rspec/templates/rspec.rake +132 -0
  12. data/generators/rspec/templates/script/autospec +3 -0
  13. data/generators/rspec/templates/script/spec +4 -0
  14. data/generators/rspec/templates/script/spec_server +116 -0
  15. data/generators/rspec/templates/spec.opts +4 -0
  16. data/generators/rspec/templates/spec_helper.rb +47 -0
  17. data/generators/rspec/templates/stories_helper.rb +3 -0
  18. data/generators/rspec_controller/USAGE +33 -0
  19. data/generators/rspec_controller/rspec_controller_generator.rb +49 -0
  20. data/generators/rspec_controller/templates/controller_spec.rb +25 -0
  21. data/generators/rspec_controller/templates/helper_spec.rb +11 -0
  22. data/generators/rspec_controller/templates/view_spec.rb +12 -0
  23. data/generators/rspec_default_values.rb +19 -0
  24. data/generators/rspec_model/USAGE +18 -0
  25. data/generators/rspec_model/rspec_model_generator.rb +35 -0
  26. data/generators/rspec_model/templates/model_spec.rb +15 -0
  27. data/generators/rspec_scaffold/rspec_scaffold_generator.rb +154 -0
  28. data/generators/rspec_scaffold/templates/controller_spec.rb +173 -0
  29. data/generators/rspec_scaffold/templates/edit_erb_spec.rb +26 -0
  30. data/generators/rspec_scaffold/templates/helper_spec.rb +11 -0
  31. data/generators/rspec_scaffold/templates/index_erb_spec.rb +27 -0
  32. data/generators/rspec_scaffold/templates/new_erb_spec.rb +26 -0
  33. data/generators/rspec_scaffold/templates/routing_spec.rb +59 -0
  34. data/generators/rspec_scaffold/templates/show_erb_spec.rb +23 -0
  35. data/init.rb +9 -0
  36. data/lib/autotest/discover.rb +1 -0
  37. data/lib/autotest/rails_rspec.rb +76 -0
  38. data/lib/spec/rails.rb +15 -0
  39. data/lib/spec/rails/example.rb +47 -0
  40. data/lib/spec/rails/example/assigns_hash_proxy.rb +43 -0
  41. data/lib/spec/rails/example/controller_example_group.rb +256 -0
  42. data/lib/spec/rails/example/cookies_proxy.rb +25 -0
  43. data/lib/spec/rails/example/functional_example_group.rb +87 -0
  44. data/lib/spec/rails/example/helper_example_group.rb +166 -0
  45. data/lib/spec/rails/example/model_example_group.rb +14 -0
  46. data/lib/spec/rails/example/rails_example_group.rb +33 -0
  47. data/lib/spec/rails/example/render_observer.rb +93 -0
  48. data/lib/spec/rails/example/view_example_group.rb +183 -0
  49. data/lib/spec/rails/extensions.rb +12 -0
  50. data/lib/spec/rails/extensions/action_controller/base.rb +14 -0
  51. data/lib/spec/rails/extensions/action_controller/rescue.rb +21 -0
  52. data/lib/spec/rails/extensions/action_controller/test_response.rb +11 -0
  53. data/lib/spec/rails/extensions/action_view/base.rb +31 -0
  54. data/lib/spec/rails/extensions/active_record/base.rb +30 -0
  55. data/lib/spec/rails/extensions/object.rb +5 -0
  56. data/lib/spec/rails/extensions/spec/example/configuration.rb +71 -0
  57. data/lib/spec/rails/extensions/spec/matchers/have.rb +21 -0
  58. data/lib/spec/rails/interop/testcase.rb +14 -0
  59. data/lib/spec/rails/matchers.rb +31 -0
  60. data/lib/spec/rails/matchers/assert_select.rb +131 -0
  61. data/lib/spec/rails/matchers/change.rb +11 -0
  62. data/lib/spec/rails/matchers/have_text.rb +57 -0
  63. data/lib/spec/rails/matchers/include_text.rb +54 -0
  64. data/lib/spec/rails/matchers/redirect_to.rb +113 -0
  65. data/lib/spec/rails/matchers/render_template.rb +90 -0
  66. data/lib/spec/rails/mocks.rb +132 -0
  67. data/lib/spec/rails/story_adapter.rb +79 -0
  68. data/lib/spec/rails/version.rb +15 -0
  69. data/spec/rails/autotest/mappings_spec.rb +36 -0
  70. data/spec/rails/example/assigns_hash_proxy_spec.rb +65 -0
  71. data/spec/rails/example/configuration_spec.rb +83 -0
  72. data/spec/rails/example/controller_isolation_spec.rb +62 -0
  73. data/spec/rails/example/controller_spec_spec.rb +272 -0
  74. data/spec/rails/example/cookies_proxy_spec.rb +74 -0
  75. data/spec/rails/example/example_group_factory_spec.rb +112 -0
  76. data/spec/rails/example/helper_spec_spec.rb +161 -0
  77. data/spec/rails/example/model_spec_spec.rb +18 -0
  78. data/spec/rails/example/shared_behaviour_spec.rb +16 -0
  79. data/spec/rails/example/test_unit_assertion_accessibility_spec.rb +33 -0
  80. data/spec/rails/example/view_spec_spec.rb +280 -0
  81. data/spec/rails/extensions/action_controller_rescue_action_spec.rb +54 -0
  82. data/spec/rails/extensions/action_view_base_spec.rb +48 -0
  83. data/spec/rails/extensions/active_record_spec.rb +14 -0
  84. data/spec/rails/interop/testcase_spec.rb +66 -0
  85. data/spec/rails/matchers/assert_select_spec.rb +814 -0
  86. data/spec/rails/matchers/description_generation_spec.rb +37 -0
  87. data/spec/rails/matchers/errors_on_spec.rb +13 -0
  88. data/spec/rails/matchers/have_text_spec.rb +62 -0
  89. data/spec/rails/matchers/include_text_spec.rb +64 -0
  90. data/spec/rails/matchers/redirect_to_spec.rb +209 -0
  91. data/spec/rails/matchers/render_template_spec.rb +176 -0
  92. data/spec/rails/matchers/should_change_spec.rb +15 -0
  93. data/spec/rails/mocks/ar_classes.rb +10 -0
  94. data/spec/rails/mocks/mock_model_spec.rb +106 -0
  95. data/spec/rails/mocks/stub_model_spec.rb +80 -0
  96. data/spec/rails/sample_modified_fixture.rb +8 -0
  97. data/spec/rails/sample_spec.rb +8 -0
  98. data/spec/rails/spec_server_spec.rb +96 -0
  99. data/spec/rails/spec_spec.rb +11 -0
  100. data/spec/rails_suite.rb +7 -0
  101. data/spec/spec_helper.rb +57 -0
  102. data/spec_resources/controllers/action_view_base_spec_controller.rb +2 -0
  103. data/spec_resources/controllers/controller_spec_controller.rb +94 -0
  104. data/spec_resources/controllers/redirect_spec_controller.rb +59 -0
  105. data/spec_resources/controllers/render_spec_controller.rb +30 -0
  106. data/spec_resources/controllers/rjs_spec_controller.rb +58 -0
  107. data/spec_resources/helpers/explicit_helper.rb +38 -0
  108. data/spec_resources/helpers/more_explicit_helper.rb +5 -0
  109. data/spec_resources/helpers/plugin_application_helper.rb +6 -0
  110. data/spec_resources/helpers/view_spec_helper.rb +13 -0
  111. data/spec_resources/views/controller_spec/_partial.rhtml +0 -0
  112. data/spec_resources/views/controller_spec/action_setting_flash_after_session_reset.rhtml +1 -0
  113. data/spec_resources/views/controller_spec/action_setting_flash_before_session_reset.rhtml +1 -0
  114. data/spec_resources/views/controller_spec/action_setting_the_assigns_hash.rhtml +0 -0
  115. data/spec_resources/views/controller_spec/action_with_errors_in_template.rhtml +1 -0
  116. data/spec_resources/views/controller_spec/action_with_template.rhtml +1 -0
  117. data/spec_resources/views/layouts/application.rhtml +0 -0
  118. data/spec_resources/views/layouts/simple.rhtml +0 -0
  119. data/spec_resources/views/objects/_object.html.erb +1 -0
  120. data/spec_resources/views/render_spec/_a_partial.rhtml +0 -0
  121. data/spec_resources/views/render_spec/action_with_alternate_layout.rhtml +0 -0
  122. data/spec_resources/views/render_spec/some_action.js.rjs +1 -0
  123. data/spec_resources/views/render_spec/some_action.rhtml +0 -0
  124. data/spec_resources/views/render_spec/some_action.rjs +1 -0
  125. data/spec_resources/views/rjs_spec/_replacement_partial.rhtml +1 -0
  126. data/spec_resources/views/rjs_spec/hide_div.rjs +1 -0
  127. data/spec_resources/views/rjs_spec/hide_page_element.rjs +1 -0
  128. data/spec_resources/views/rjs_spec/insert_html.rjs +1 -0
  129. data/spec_resources/views/rjs_spec/replace.rjs +1 -0
  130. data/spec_resources/views/rjs_spec/replace_html.rjs +1 -0
  131. data/spec_resources/views/rjs_spec/replace_html_with_partial.rjs +1 -0
  132. data/spec_resources/views/rjs_spec/visual_effect.rjs +1 -0
  133. data/spec_resources/views/rjs_spec/visual_toggle_effect.rjs +1 -0
  134. data/spec_resources/views/tag_spec/no_tags.rhtml +1 -0
  135. data/spec_resources/views/tag_spec/single_div_with_no_attributes.rhtml +1 -0
  136. data/spec_resources/views/tag_spec/single_div_with_one_attribute.rhtml +1 -0
  137. data/spec_resources/views/view_spec/_partial.rhtml +2 -0
  138. data/spec_resources/views/view_spec/_partial_used_twice.rhtml +0 -0
  139. data/spec_resources/views/view_spec/_partial_with_local_variable.rhtml +1 -0
  140. data/spec_resources/views/view_spec/_partial_with_sub_partial.rhtml +1 -0
  141. data/spec_resources/views/view_spec/_spacer.rhtml +1 -0
  142. data/spec_resources/views/view_spec/accessor.rhtml +5 -0
  143. data/spec_resources/views/view_spec/block_helper.rhtml +3 -0
  144. data/spec_resources/views/view_spec/entry_form.rhtml +2 -0
  145. data/spec_resources/views/view_spec/explicit_helper.rhtml +2 -0
  146. data/spec_resources/views/view_spec/foo/show.rhtml +1 -0
  147. data/spec_resources/views/view_spec/implicit_helper.rhtml +2 -0
  148. data/spec_resources/views/view_spec/multiple_helpers.rhtml +3 -0
  149. data/spec_resources/views/view_spec/should_not_receive.rhtml +3 -0
  150. data/spec_resources/views/view_spec/template_with_partial.rhtml +5 -0
  151. data/spec_resources/views/view_spec/template_with_partial_using_collection.rhtml +3 -0
  152. data/spec_resources/views/view_spec/template_with_partial_with_array.rhtml +1 -0
  153. data/stories/all.rb +10 -0
  154. data/stories/configuration/stories.rb +5 -0
  155. data/stories/helper.rb +6 -0
  156. data/stories/steps/people.rb +8 -0
  157. data/stories/transactions_should_rollback +15 -0
  158. data/stories/transactions_should_rollback.rb +25 -0
  159. metadata +234 -0
@@ -0,0 +1,74 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ class CookiesProxyExamplesController < ActionController::Base
4
+ def index
5
+ cookies[:key] = cookies[:key]
6
+ end
7
+ end
8
+
9
+ module Spec
10
+ module Rails
11
+ module Example
12
+ describe CookiesProxy, :type => :controller do
13
+ controller_name :cookies_proxy_examples
14
+
15
+ describe "with a String key" do
16
+
17
+ it "should accept a String value" do
18
+ cookies = CookiesProxy.new(self)
19
+ cookies['key'] = 'value'
20
+ get :index
21
+ cookies['key'].should == ['value']
22
+ end
23
+
24
+ if Rails::VERSION::STRING >= "2.0.0"
25
+ it "should accept a Hash value" do
26
+ cookies = CookiesProxy.new(self)
27
+ cookies['key'] = { :value => 'value', :expires => expiration = 1.hour.from_now, :path => path = '/path' }
28
+ get :index
29
+ cookies['key'].should == ['value']
30
+ cookies['key'].value.should == ['value']
31
+ cookies['key'].expires.should == expiration
32
+ cookies['key'].path.should == path
33
+ end
34
+ end
35
+
36
+ end
37
+
38
+ describe "with a Symbol key" do
39
+
40
+ it "should accept a String value" do
41
+ example_cookies = CookiesProxy.new(self)
42
+ example_cookies[:key] = 'value'
43
+ get :index
44
+ example_cookies[:key].should == ['value']
45
+ end
46
+
47
+ if Rails::VERSION::STRING >= "2.0.0"
48
+ it "should accept a Hash value" do
49
+ example_cookies = CookiesProxy.new(self)
50
+ example_cookies[:key] = { :value => 'value', :expires => expiration = 1.hour.from_now, :path => path = '/path' }
51
+ get :index
52
+ example_cookies[:key].should == ['value']
53
+ example_cookies[:key].value.should == ['value']
54
+ example_cookies[:key].expires.should == expiration
55
+ example_cookies[:key].path.should == path
56
+ end
57
+ end
58
+
59
+ end
60
+
61
+ describe "#delete" do
62
+ it "should delete from the response cookies" do
63
+ example_cookies = CookiesProxy.new(self)
64
+ response_cookies = mock('cookies')
65
+ response.should_receive(:cookies).and_return(response_cookies)
66
+ response_cookies.should_receive(:delete).with('key')
67
+ example_cookies.delete :key
68
+ end
69
+ end
70
+ end
71
+
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,112 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ module Spec
4
+ module Example
5
+ describe ExampleGroupFactory do
6
+ it "should return a ModelExampleGroup when given :type => :model" do
7
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
8
+ "name", :type => :model
9
+ ) {}
10
+ example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
11
+ end
12
+
13
+ it "should return a ModelExampleGroup when given :spec_path => '/blah/spec/models/'" do
14
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
15
+ "name", :spec_path => '/blah/spec/models/blah.rb'
16
+ ) {}
17
+ example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
18
+ end
19
+
20
+ it "should return a ModelExampleGroup when given :spec_path => '\\blah\\spec\\models\\' (windows format)" do
21
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
22
+ "name", :spec_path => '\\blah\\spec\\models\\blah.rb'
23
+ ) {}
24
+ example_group.superclass.should == Spec::Rails::Example::ModelExampleGroup
25
+ end
26
+
27
+ it "should return a RailsExampleGroup when given :spec_path => '/blah/spec/foo/' (anything other than controllers, views and helpers)" do
28
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
29
+ "name", :spec_path => '/blah/spec/foo/blah.rb'
30
+ ) {}
31
+ example_group.superclass.should == Spec::Rails::Example::RailsExampleGroup
32
+ end
33
+
34
+ it "should return a RailsExampleGroup when given :spec_path => '\\blah\\spec\\foo\\' (windows format) (anything other than controllers, views and helpers)" do
35
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
36
+ "name", :spec_path => '\\blah\\spec\\foo\\blah.rb'
37
+ ) {}
38
+ example_group.superclass.should == Spec::Rails::Example::RailsExampleGroup
39
+ end
40
+
41
+ it "should return a ViewExampleGroup when given :type => :model" do
42
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
43
+ "name", :type => :view
44
+ ) {}
45
+ example_group.superclass.should == Spec::Rails::Example::ViewExampleGroup
46
+ end
47
+
48
+ it "should return a ViewExampleGroup when given :spec_path => '/blah/spec/views/'" do
49
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
50
+ "name", :spec_path => '/blah/spec/views/blah.rb'
51
+ ) {}
52
+ example_group.superclass.should == Spec::Rails::Example::ViewExampleGroup
53
+ end
54
+
55
+ it "should return a ModelExampleGroup when given :spec_path => '\\blah\\spec\\views\\' (windows format)" do
56
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
57
+ "name", :spec_path => '\\blah\\spec\\views\\blah.rb'
58
+ ) {}
59
+ example_group.superclass.should == Spec::Rails::Example::ViewExampleGroup
60
+ end
61
+
62
+ it "should return a HelperExampleGroup when given :type => :helper" do
63
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
64
+ "name", :type => :helper
65
+ ) {}
66
+ example_group.superclass.should == Spec::Rails::Example::HelperExampleGroup
67
+ end
68
+
69
+ it "should return a HelperExampleGroup when given :spec_path => '/blah/spec/helpers/'" do
70
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
71
+ "name", :spec_path => '/blah/spec/helpers/blah.rb'
72
+ ) {}
73
+ example_group.superclass.should == Spec::Rails::Example::HelperExampleGroup
74
+ end
75
+
76
+ it "should return a ModelExampleGroup when given :spec_path => '\\blah\\spec\\helpers\\' (windows format)" do
77
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
78
+ "name", :spec_path => '\\blah\\spec\\helpers\\blah.rb'
79
+ ) {}
80
+ example_group.superclass.should == Spec::Rails::Example::HelperExampleGroup
81
+ end
82
+
83
+ it "should return a ControllerExampleGroup when given :type => :controller" do
84
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
85
+ "name", :type => :controller
86
+ ) {}
87
+ example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
88
+ end
89
+
90
+ it "should return a ControllerExampleGroup when given :spec_path => '/blah/spec/controllers/'" do
91
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
92
+ "name", :spec_path => '/blah/spec/controllers/blah.rb'
93
+ ) {}
94
+ example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
95
+ end
96
+
97
+ it "should return a ModelExampleGroup when given :spec_path => '\\blah\\spec\\controllers\\' (windows format)" do
98
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
99
+ "name", :spec_path => '\\blah\\spec\\controllers\\blah.rb'
100
+ ) {}
101
+ example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
102
+ end
103
+
104
+ it "should favor the :type over the :spec_path" do
105
+ example_group = Spec::Example::ExampleGroupFactory.create_example_group(
106
+ "name", :spec_path => '/blah/spec/models/blah.rb', :type => :controller
107
+ ) {}
108
+ example_group.superclass.should == Spec::Rails::Example::ControllerExampleGroup
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,161 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+ Spec::Runner.configuration.global_fixtures = :people
3
+
4
+ describe ExplicitHelper, :type => :helper do
5
+ include ExplicitHelper
6
+
7
+ it "should not require naming the helper if describe is passed a type" do
8
+ method_in_explicit_helper.should match(/text from a method/)
9
+ helper.method_in_explicit_helper.should match(/text from a method/)
10
+ end
11
+ end
12
+
13
+ module Spec
14
+ module Rails
15
+ module Example
16
+ describe HelperExampleGroup, :type => :helper do
17
+ helper_name :explicit
18
+
19
+ it "DEPRECATED should have direct access to methods defined in helpers" do
20
+ method_in_explicit_helper.should =~ /text from a method/
21
+ end
22
+
23
+ it "should expose the helper with the #helper method" do
24
+ helper.method_in_explicit_helper.should =~ /text from a method/
25
+ end
26
+
27
+ it "should have access to named routes" do
28
+ rspec_on_rails_specs_url.should == "http://test.host/rspec_on_rails_specs"
29
+ rspec_on_rails_specs_path.should == "/rspec_on_rails_specs"
30
+
31
+ helper.named_url.should == "http://test.host/rspec_on_rails_specs"
32
+ helper.named_path.should == "/rspec_on_rails_specs"
33
+ end
34
+
35
+ it "should fail if the helper method deson't exist" do
36
+ lambda { non_existent_helper_method }.should raise_error(NameError)
37
+ lambda { helper.non_existent_helper_method }.should raise_error(NameError)
38
+ end
39
+
40
+ it "should have access to session" do
41
+ session[:foo] = 'bar'
42
+ session_foo.should == 'bar'
43
+ helper.session_foo.should == 'bar'
44
+ end
45
+
46
+ it "should have access to params" do
47
+ params[:foo] = 'bar'
48
+ params_foo.should == 'bar'
49
+ helper.params_foo.should == 'bar'
50
+ end
51
+
52
+ it "should have access to request" do
53
+ request.stub!(:thing).and_return('bar')
54
+ request_thing.should == 'bar'
55
+ helper.request_thing.should == 'bar'
56
+ end
57
+
58
+ it "should have access to flash" do
59
+ flash[:thing] = 'camera'
60
+ flash_thing.should == 'camera'
61
+ helper.flash_thing.should == 'camera'
62
+ end
63
+ end
64
+
65
+ describe HelperExampleGroup, "#eval_erb", :type => :helper do
66
+ helper_name :explicit
67
+
68
+ it "should support methods that accept blocks" do
69
+ eval_erb("<% prepend 'foo' do %>bar<% end %>").should == "foobar"
70
+ end
71
+ end
72
+
73
+ describe HelperExampleGroup, ".fixtures", :type => :helper do
74
+ helper_name :explicit
75
+ fixtures :animals
76
+
77
+ it "should load fixtures" do
78
+ pig = animals(:pig)
79
+ pig.class.should == Animal
80
+ end
81
+
82
+ it "should load global fixtures" do
83
+ lachie = people(:lachie)
84
+ lachie.class.should == Person
85
+ end
86
+ end
87
+
88
+ describe "methods from standard helpers", :type => :helper do
89
+ helper_name :explicit
90
+ it "should be exposed to the helper" do
91
+ helper.link_to("Foo","http://bar").should have_tag("a")
92
+ end
93
+ end
94
+
95
+ describe HelperExampleGroup, "included modules", :type => :helper do
96
+ helpers = [
97
+ ActionView::Helpers::ActiveRecordHelper,
98
+ ActionView::Helpers::AssetTagHelper,
99
+ ActionView::Helpers::BenchmarkHelper,
100
+ ActionView::Helpers::CacheHelper,
101
+ ActionView::Helpers::CaptureHelper,
102
+ ActionView::Helpers::DateHelper,
103
+ ActionView::Helpers::DebugHelper,
104
+ ActionView::Helpers::FormHelper,
105
+ ActionView::Helpers::FormOptionsHelper,
106
+ ActionView::Helpers::FormTagHelper,
107
+ ActionView::Helpers::JavaScriptHelper,
108
+ ActionView::Helpers::NumberHelper,
109
+ ActionView::Helpers::PrototypeHelper,
110
+ ActionView::Helpers::ScriptaculousHelper,
111
+ ActionView::Helpers::TagHelper,
112
+ ActionView::Helpers::TextHelper,
113
+ ActionView::Helpers::UrlHelper
114
+ ]
115
+ helpers << ActionView::Helpers::PaginationHelper rescue nil #removed for 2.0
116
+ helpers << ActionView::Helpers::JavaScriptMacrosHelper rescue nil #removed for 2.0
117
+ helpers.each do |helper_module|
118
+ it "should include #{helper_module}" do
119
+ self.class.ancestors.should include(helper_module)
120
+ helper.class.ancestors.should include(helper_module)
121
+ end
122
+ end
123
+ end
124
+
125
+ # TODO: BT - Helper Examples should proxy method_missing to a Rails View instance.
126
+ # When that is done, remove this method
127
+ describe HelperExampleGroup, "#protect_against_forgery?", :type => :helper do
128
+ it "should return false" do
129
+ protect_against_forgery?.should be_false
130
+ helper.protect_against_forgery?.should be_false
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
136
+
137
+ module Bug11223
138
+ # see http://rubyforge.org/tracker/index.php?func=detail&aid=11223&group_id=797&atid=3149
139
+ describe 'Accessing flash from helper spec', :type => :helper do
140
+ it 'should not raise an error' do
141
+ lambda { flash['test'] }.should_not raise_error
142
+ end
143
+ end
144
+ end
145
+
146
+ module Spec
147
+ module Rails
148
+ module Example
149
+ describe HelperExampleGroup do
150
+ it "should clear its name from the description" do
151
+ group = describe("foo", :type => :helper) do
152
+ $nested_group = describe("bar") do
153
+ end
154
+ end
155
+ group.description.to_s.should == "foo"
156
+ $nested_group.description.to_s.should == "foo bar"
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
@@ -0,0 +1,18 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ module Spec
4
+ module Rails
5
+ module Example
6
+ describe ModelExampleGroup do
7
+ it "should clear its name from the description" do
8
+ group = describe("foo", :type => :model) do
9
+ $nested_group = describe("bar") do
10
+ end
11
+ end
12
+ group.description.to_s.should == "foo"
13
+ $nested_group.description.to_s.should == "foo bar"
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "A shared view example_group", :shared => true do
4
+ it "should have some tag with some text" do
5
+ response.should have_tag('div', 'This is text from a method in the ViewSpecHelper')
6
+ end
7
+ end
8
+
9
+ describe "A view example_group", :type => :view do
10
+ it_should_behave_like "A shared view example_group"
11
+
12
+ before(:each) do
13
+ render "view_spec/implicit_helper"
14
+ end
15
+ end
16
+
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "assert_equal", :shared => true do
4
+ it "like assert_equal" do
5
+ assert_equal 1, 1
6
+ lambda {
7
+ assert_equal 1, 2
8
+ }.should raise_error(Test::Unit::AssertionFailedError)
9
+ end
10
+ end
11
+
12
+ describe "A model spec should be able to access 'test/unit' assertions", :type => :model do
13
+ it_should_behave_like "assert_equal"
14
+ end
15
+
16
+ describe "A view spec should be able to access 'test/unit' assertions", :type => :view do
17
+ it_should_behave_like "assert_equal"
18
+ end
19
+
20
+ describe "A helper spec should be able to access 'test/unit' assertions", :type => :helper do
21
+ it_should_behave_like "assert_equal"
22
+ end
23
+
24
+ describe "A controller spec with integrated views should be able to access 'test/unit' assertions", :type => :controller do
25
+ controller_name :controller_spec
26
+ integrate_views
27
+ it_should_behave_like "assert_equal"
28
+ end
29
+
30
+ describe "A controller spec should be able to access 'test/unit' assertions", :type => :controller do
31
+ controller_name :controller_spec
32
+ it_should_behave_like "assert_equal"
33
+ end
@@ -0,0 +1,280 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "A template with an implicit helper", :type => :view do
4
+ before(:each) do
5
+ render "view_spec/implicit_helper"
6
+ end
7
+
8
+ it "should include the helper" do
9
+ response.should have_tag('div', :content => "This is text from a method in the ViewSpecHelper")
10
+ end
11
+
12
+ it "should include the application helper" do
13
+ response.should have_tag('div', :content => "This is text from a method in the ApplicationHelper")
14
+ end
15
+
16
+ it "should have access to named routes" do
17
+ rspec_on_rails_specs_url.should == "http://test.host/rspec_on_rails_specs"
18
+ rspec_on_rails_specs_path.should == "/rspec_on_rails_specs"
19
+ end
20
+ end
21
+
22
+ describe "A template requiring an explicit helper", :type => :view do
23
+ before(:each) do
24
+ render "view_spec/explicit_helper", :helper => 'explicit'
25
+ end
26
+
27
+ it "should include the helper if specified" do
28
+ response.should have_tag('div', :content => "This is text from a method in the ExplicitHelper")
29
+ end
30
+
31
+ it "should include the application helper" do
32
+ response.should have_tag('div', :content => "This is text from a method in the ApplicationHelper")
33
+ end
34
+ end
35
+
36
+ describe "A template requiring multiple explicit helpers", :type => :view do
37
+ before(:each) do
38
+ render "view_spec/multiple_helpers", :helpers => ['explicit', 'more_explicit']
39
+ end
40
+
41
+ it "should include all specified helpers" do
42
+ response.should have_tag('div', :content => "This is text from a method in the ExplicitHelper")
43
+ response.should have_tag('div', :content => "This is text from a method in the MoreExplicitHelper")
44
+ end
45
+
46
+ it "should include the application helper" do
47
+ response.should have_tag('div', :content => "This is text from a method in the ApplicationHelper")
48
+ end
49
+ end
50
+
51
+ describe "Message Expectations on helper methods", :type => :view do
52
+ it "should work" do
53
+ template.should_receive(:method_in_plugin_application_helper).and_return('alternate message 1')
54
+ render "view_spec/implicit_helper"
55
+ response.body.should =~ /alternate message 1/
56
+ end
57
+
58
+ it "should work twice" do
59
+ template.should_receive(:method_in_plugin_application_helper).and_return('alternate message 2')
60
+ render "view_spec/implicit_helper"
61
+ response.body.should =~ /alternate message 2/
62
+ end
63
+ end
64
+
65
+ describe "A template that includes a partial", :type => :view do
66
+ def render!
67
+ render "view_spec/template_with_partial"
68
+ end
69
+
70
+ it "should render the enclosing template" do
71
+ render!
72
+ response.should have_tag('div', "method_in_partial in ViewSpecHelper")
73
+ end
74
+
75
+ it "should render the partial" do
76
+ render!
77
+ response.should have_tag('div', "method_in_template_with_partial in ViewSpecHelper")
78
+ end
79
+
80
+ it "should include the application helper" do
81
+ render!
82
+ response.should have_tag('div', "This is text from a method in the ApplicationHelper")
83
+ end
84
+
85
+ it "should pass should_receive(:render) with the right partial" do
86
+ template.should_receive(:render).with(:partial => 'partial')
87
+ render!
88
+ template.verify_rendered
89
+ end
90
+
91
+ it "should fail should_receive(:render) with the wrong partial" do
92
+ template.should_receive(:render).with(:partial => 'non_existent')
93
+ render!
94
+ begin
95
+ template.verify_rendered
96
+ rescue Spec::Mocks::MockExpectationError => e
97
+ ensure
98
+ e.backtrace.find{|line| line =~ /view_spec_spec\.rb\:92/}.should_not be_nil
99
+ end
100
+ end
101
+
102
+ it "should pass should_receive(:render) when a partial is expected twice and happens twice" do
103
+ template.should_receive(:render).with(:partial => 'partial_used_twice').twice
104
+ render!
105
+ template.verify_rendered
106
+ end
107
+
108
+ it "should pass should_receive(:render) when a partial is expected once and happens twice" do
109
+ template.should_receive(:render).with(:partial => 'partial_used_twice')
110
+ render!
111
+ begin
112
+ template.verify_rendered
113
+ rescue Spec::Mocks::MockExpectationError => e
114
+ ensure
115
+ e.backtrace.find{|line| line =~ /view_spec_spec\.rb\:109/}.should_not be_nil
116
+ end
117
+ end
118
+
119
+ it "should fail should_receive(:render) with the right partial but wrong options" do
120
+ template.should_receive(:render).with(:partial => 'partial', :locals => {:thing => Object.new})
121
+ render!
122
+ lambda {template.verify_rendered}.should raise_error(Spec::Mocks::MockExpectationError)
123
+ end
124
+ end
125
+
126
+ describe "A partial that includes a partial", :type => :view do
127
+ it "should support should_receive(:render) with nested partial" do
128
+ obj = Object.new
129
+ template.should_receive(:render).with(:partial => 'partial', :object => obj)
130
+ render :partial => "view_spec/partial_with_sub_partial", :locals => { :partial => obj }
131
+ end
132
+ end
133
+
134
+ describe "A view that includes a partial using :collection and :spacer_template", :type => :view do
135
+ it "should render the partial w/ spacer_tamplate" do
136
+ render "view_spec/template_with_partial_using_collection"
137
+ response.should have_tag('div',/method_in_partial/)
138
+ response.should have_tag('div',/ApplicationHelper/)
139
+ response.should have_tag('div',/ViewSpecHelper/)
140
+ response.should have_tag('hr#spacer')
141
+ end
142
+
143
+ it "should render the partial" do
144
+ template.should_receive(:render).with(:partial => 'partial',
145
+ :collection => ['Alice', 'Bob'],
146
+ :spacer_template => 'spacer')
147
+ render "view_spec/template_with_partial_using_collection"
148
+ end
149
+
150
+ end
151
+
152
+ if Rails::VERSION::MAJOR >= 2
153
+ describe "A view that includes a partial using an array as partial_path", :type => :view do
154
+ before(:each) do
155
+ renderable_object = Object.new
156
+ renderable_object.stub!(:name).and_return("Renderable Object")
157
+ assigns[:array] = [renderable_object]
158
+ end
159
+
160
+ it "should render the array passed through to render_partial without modification" do
161
+ render "view_spec/template_with_partial_with_array"
162
+ response.body.should match(/^Renderable Object$/)
163
+ end
164
+ end
165
+ end
166
+
167
+ describe "Different types of renders (not :template)", :type => :view do
168
+ it "should render partial with local" do
169
+ render :partial => "view_spec/partial_with_local_variable", :locals => {:x => "Ender"}
170
+ response.should have_tag('div', :content => "Ender")
171
+ end
172
+ end
173
+
174
+ describe "A view", :type => :view do
175
+ before(:each) do
176
+ session[:key] = "session"
177
+ params[:key] = "params"
178
+ flash[:key] = "flash"
179
+ render "view_spec/accessor"
180
+ end
181
+
182
+ it "should have access to session data" do
183
+ response.should have_tag("div#session", "session")
184
+ end
185
+
186
+ specify "should have access to params data" do
187
+ response.should have_tag("div#params", "params")
188
+ end
189
+
190
+ it "should have access to flash data" do
191
+ response.should have_tag("div#flash", "flash")
192
+ end
193
+
194
+ it "should have a controller param" do
195
+ response.should have_tag("div#controller", "view_spec")
196
+ end
197
+
198
+ it "should have an action param" do
199
+ response.should have_tag("div#action", "accessor")
200
+ end
201
+ end
202
+
203
+ describe "A view with a form_tag", :type => :view do
204
+ it "should render the right action" do
205
+ render "view_spec/entry_form"
206
+ response.should have_tag("form[action=?]","/view_spec/entry_form")
207
+ end
208
+ end
209
+
210
+ describe "An instantiated ViewExampleGroupController", :type => :view do
211
+ before do
212
+ render "view_spec/foo/show"
213
+ end
214
+
215
+ it "should return the name of the real controller that it replaces" do
216
+ @controller.controller_name.should == 'foo'
217
+ end
218
+
219
+ it "should return the path of the real controller that it replaces" do
220
+ @controller.controller_path.should == 'view_spec/foo'
221
+ end
222
+ end
223
+
224
+ describe "a block helper", :type => :view do
225
+ it "should not yield when not told to in the example" do
226
+ template.should_receive(:if_allowed)
227
+ render "view_spec/block_helper"
228
+ response.should_not have_tag("div","block helper was rendered")
229
+ end
230
+
231
+ it "should yield when told to in the example" do
232
+ template.should_receive(:if_allowed).and_yield
233
+ render "view_spec/block_helper"
234
+ response.should have_tag("div","block helper was rendered")
235
+ end
236
+ end
237
+
238
+ describe "render :inline => ...", :type => :view do
239
+ it "should render ERB right in the spec" do
240
+ render :inline => %|<%= text_field_tag('field_name', 'Value') %>|
241
+ response.should have_tag("input[type=?][name=?][value=?]","text","field_name","Value")
242
+ end
243
+ end
244
+
245
+ module Spec
246
+ module Rails
247
+ module Example
248
+ describe ViewExampleGroup do
249
+ it "should clear its name from the description" do
250
+ group = describe("foo", :type => :view) do
251
+ $nested_group = describe("bar") do
252
+ end
253
+ end
254
+ group.description.to_s.should == "foo"
255
+ $nested_group.description.to_s.should == "foo bar"
256
+ end
257
+
258
+ it "should clear ActionView::Base.base_view_path on teardown" do
259
+ group = describe("base_view_path_cleared flag", :type => :view) {}
260
+ example = group.it{}
261
+
262
+ ActionView::Base.should_receive(:base_view_path=).with(nil)
263
+ group.run_after_each(example)
264
+ end
265
+ end
266
+ end
267
+ end
268
+ end
269
+
270
+ describe "bug http://rspec.lighthouseapp.com/projects/5645/tickets/510", :type => :view do
271
+ describe "a view example with should_not_receive" do
272
+ it "should render the view" do
273
+ obj = mock('model')
274
+ obj.should_receive(:render_partial?).and_return false
275
+ assigns[:obj] = obj
276
+ template.should_not_receive(:render).with(:partial => 'some_partial')
277
+ render "view_spec/should_not_receive"
278
+ end
279
+ end
280
+ end