Updated RSpec to 1.1.0
[gitorious:georgyos-clone.git] / vendor / plugins / rspec_on_rails / spec / rails / matchers / render_spec.rb
1 require File.dirname(__FILE__) + '/../../spec_helper'
2
3 ['isolation','integration'].each do |mode|
4   describe "response.should render_template (in #{mode} mode)",
5     :type => :controller do
6     controller_name :render_spec
7     if mode == 'integration'
8       integrate_views
9     end
10     
11     it "should match a simple path" do
12       post 'some_action'
13       response.should render_template('some_action')
14     end
15
16     it "should match a less simple path" do
17       post 'some_action'
18       response.should render_template('render_spec/some_action')
19     end
20   
21     it "should match a less simple path to another controller" do
22       post 'action_which_renders_template_from_other_controller'
23       response.should render_template('controller_spec/action_with_template')
24     end
25   
26     it "should match a symbol" do
27       post 'some_action'
28       response.should render_template(:some_action)
29     end
30
31     it "should match an rjs template" do
32       xhr :post, 'some_action'
33       if ActionView::Base.const_defined?('DEFAULT_TEMPLATE_HANDLER_PREFERENCE') ||
34                                  ActionView::Base.respond_to?(:handler_for_extension) then
35         response.should render_template('render_spec/some_action')
36       else
37         response.should render_template('render_spec/some_action.rjs')
38       end
39     end
40
41     it "should match a partial template (simple path)" do
42       get 'action_with_partial'
43       response.should render_template("_a_partial")
44     end
45
46     it "should match a partial template (complex path)" do
47       get 'action_with_partial'
48       response.should render_template("render_spec/_a_partial")
49     end
50
51     it "should fail when the wrong template is rendered" do
52       post 'some_action'
53       lambda do
54         response.should render_template('non_existent_template')
55       end.should fail_with("expected \"non_existent_template\", got \"render_spec/some_action\"")
56     end
57
58     it "should fail without full path when template is associated with a different controller" do
59       post 'action_which_renders_template_from_other_controller'
60       lambda do
61         response.should render_template('action_with_template')
62       end.should fail_with(%Q|expected "action_with_template", got "controller_spec/action_with_template"|)
63     end
64
65     it "should fail with incorrect full path when template is associated with a different controller" do
66       post 'action_which_renders_template_from_other_controller'
67       lambda do
68         response.should render_template('render_spec/action_with_template')
69       end.should fail_with(%Q|expected "render_spec/action_with_template", got "controller_spec/action_with_template"|)
70     end
71
72     it "should fail on the wrong extension (given rhtml)" do
73       get 'some_action'
74       lambda {
75         response.should render_template('render_spec/some_action.rjs')
76       }.should fail_with("expected \"render_spec/some_action.rjs\", got \"render_spec/some_action\"")
77     end
78
79     it "should fail when TEXT is rendered" do
80       post 'text_action'
81       lambda do
82         response.should render_template('some_action')
83       end.should fail_with("expected \"some_action\", got nil")
84     end
85   end
86
87   describe "response.should have_text (in #{mode} mode)",
88     :type => :controller do
89     controller_name :render_spec
90     if mode == 'integration'
91       integrate_views
92     end
93
94     it "should pass with exactly matching text" do
95       post 'text_action'
96       response.should have_text("this is the text for this action")
97     end
98
99     it "should pass with matching text (using Regexp)" do
100       post 'text_action'
101       response.should have_text(/is the text/)
102     end
103
104     it "should fail with matching text" do
105       post 'text_action'
106       lambda {
107         response.should have_text("this is NOT the text for this action")
108       }.should fail_with("expected \"this is NOT the text for this action\", got \"this is the text for this action\"")
109     end
110
111     it "should fail when a template is rendered" do
112       post 'some_action'
113       lambda {
114         response.should have_text("this is the text for this action")
115       }.should fail_with(/expected \"this is the text for this action\", got .*/)
116     end
117   end
118
119   describe "response.should_not have_text (in #{mode} mode)",
120     :type => :controller do
121     controller_name :render_spec
122     if mode == 'integration'
123       integrate_views
124     end
125
126     it "should pass with exactly matching text" do
127       post 'text_action'
128       response.should_not have_text("the accordian guy")
129     end
130   end
131
132 end