source: subversion/sites/rails_port/test/functional/diary_entry_controller_test.rb @ 17044

Last change on this file since 17044 was 15758, checked in by Shaun McDonald, 10 years ago

More tests to check that user creation works, and the url in the e-mail is the same. Seems that we can only test that a particular page is loading fine in all locales in the integration tests, and not the functional tests.

File size: 8.7 KB
Line 
1require File.dirname(__FILE__) + '/../test_helper'
2
3class DiaryEntryControllerTest < ActionController::TestCase
4  fixtures :users, :diary_entries, :diary_comments
5
6  def test_showing_new_diary_entry
7    get :new
8    assert_response :redirect
9    assert_redirected_to :controller => :user, :action => "login", :referer => "/diary_entry/new"
10    # Now pretend to login by using the session hash, with the
11    # id of the person we want to login as through session(:user)=user.id
12    get(:new, nil, {'user' => users(:normal_user).id})
13    assert_response :success
14    #print @response.body
15   
16    #print @response.to_yaml
17    assert_select "html:root", :count => 1 do
18      assert_select "head", :count => 1 do
19        assert_select "title", :text => /New Diary Entry/, :count => 1
20      end
21      assert_select "body", :count => 1 do
22        assert_select "div#content", :count => 1 do
23          assert_select "h1", "New Diary Entry", :count => 1
24          # We don't care about the layout, we just care about the form fields
25          # that are available
26          assert_select "form[action='/diary_entry/new']", :count => 1 do
27            assert_select "input[id=diary_entry_title][name='diary_entry[title]']", :count => 1
28            assert_select "textarea#diary_entry_body[name='diary_entry[body]']", :count => 1
29            assert_select "input#latitude[name='diary_entry[latitude]'][type=text]", :count => 1
30            assert_select "input#longitude[name='diary_entry[longitude]'][type=text]", :count => 1
31            assert_select "input[name=commit][type=submit][value=Save]", :count => 1
32          end
33        end
34      end
35    end
36       
37  end
38 
39  def test_editing_diary_entry
40    # Make sure that you are redirected to the login page when you are
41    # not logged in, without and with the id of the entry you want to edit
42    get :edit
43    assert_response :redirect
44    assert_redirected_to :controller => :user, :action => "login", :referer => "/diary_entry/edit"
45   
46    get :edit, :id => diary_entries(:normal_user_entry_1).id
47    assert_response :redirect
48    assert_redirected_to :controller => :user, :action => "login", :referer => "/diary_entry/edit"
49   
50    # Verify that you get a not found error, when you don't pass an id
51    get(:edit, nil, {'user' => users(:normal_user).id})
52    assert_response :not_found
53    assert_select "html:root", :count => 1 do
54      assert_select "body", :count => 1 do
55        assert_select "div#content", :count => 1 do
56          assert_select "h2", :text => "No entry with the id:", :count => 1 
57        end
58      end
59    end
60   
61    # Now pass the id, and check that you can edit it, when using the same
62    # user as the person who created the entry
63    get(:edit, {:id => diary_entries(:normal_user_entry_1).id}, {'user' => users(:normal_user).id})
64    assert_response :success
65    assert_select "html:root", :count => 1 do
66      assert_select "head", :count => 1 do
67        assert_select "title", :text => /Edit diary entry/, :count => 1
68      end
69      assert_select "body", :count => 1 do
70        assert_select "div#content", :count => 1 do 
71          assert_select "h1", :text => /Edit diary entry/, :count => 1
72          assert_select "form[action='/diary_entry/#{diary_entries(:normal_user_entry_1).id}/edit'][method=post]", :count => 1 do
73            assert_select "input#diary_entry_title[name='diary_entry[title]'][value='#{diary_entries(:normal_user_entry_1).title}']", :count => 1
74            assert_select "textarea#diary_entry_body[name='diary_entry[body]']", :text => diary_entries(:normal_user_entry_1).body, :count => 1
75            assert_select "select#diary_entry_language_code", :count => 1
76            assert_select "input#latitude[name='diary_entry[latitude]']", :count => 1
77            assert_select "input#longitude[name='diary_entry[longitude]']", :count => 1
78            assert_select "input[name=commit][type=submit][value=Save]", :count => 1
79            assert_select "input", :count => 4
80          end
81        end
82      end
83    end
84   
85    # Now lets see if you can edit the diary entry
86    new_title = "New Title"
87    new_body = "This is a new body for the diary entry"
88    new_latitude = "1.1"
89    new_longitude = "2.2"
90    new_language_code = "en"
91    post(:edit, {:id => diary_entries(:normal_user_entry_1).id, 'commit' => 'save', 
92      'diary_entry'=>{'title' => new_title, 'body' => new_body, 'latitude' => new_latitude,
93      'longitude' => new_longitude, 'language_code' => new_language_code} },
94         {'user' => users(:normal_user).id})
95    assert_response :redirect
96    assert_redirected_to :action => :view, :id => diary_entries(:normal_user_entry_1).id
97   
98    # Now check that the new data is rendered, when logged in
99    get :view, {:id => diary_entries(:normal_user_entry_1).id, :display_name => 'test'}, {'user' => users(:normal_user).id}
100    assert_response :success
101    assert_template 'diary_entry/view'
102    assert_select "html:root", :count => 1 do
103      assert_select "head", :count => 1 do
104        assert_select "title", :text => /Users' diaries | /, :count => 1
105      end
106      assert_select "body", :count => 1 do
107        assert_select "div#content", :count => 1 do
108          assert_select "h2", :text => /#{users(:normal_user).display_name}'s diary/, :count => 1
109          assert_select "b", :text => /#{new_title}/, :count => 1
110          # This next line won't work if the text has been run through the htmlize function
111          # due to formatting that could be introduced
112          assert_select "p", :text => /#{new_body}/, :count => 1
113          assert_select "span.latitude", :text => new_latitude, :count => 1
114          assert_select "span.longitude", :text => new_longitude, :count => 1
115          # As we're not logged in, check that you cannot edit
116          #print @response.body
117          assert_select "a[href='/user/#{users(:normal_user).display_name}/diary/#{diary_entries(:normal_user_entry_1).id}/edit']", :text => "Edit this entry", :count => 1
118        end
119      end
120    end
121   
122    # and when not logged in as the user who wrote the entry
123    get :view, {:id => diary_entries(:normal_user_entry_1).id, :display_name => 'test'}, {'user' => users(:public_user).id}
124    assert_response :success
125    assert_template 'diary_entry/view'
126    assert_select "html:root", :count => 1 do
127      assert_select "head", :count => 1 do
128        assert_select "title", :text => /Users' diaries | /, :count => 1
129      end
130      assert_select "body", :count => 1 do
131        assert_select "div#content", :count => 1 do
132          assert_select "h2", :text => /#{users(:normal_user).display_name}'s diary/, :count => 1
133          assert_select "b", :text => /#{new_title}/, :count => 1
134          # This next line won't work if the text has been run through the htmlize function
135          # due to formatting that could be introduced
136          assert_select "p", :text => /#{new_body}/, :count => 1
137          assert_select "span.latitude", :text => new_latitude, :count => 1
138          assert_select "span.longitude", :text => new_longitude, :count => 1
139          # As we're not logged in, check that you cannot edit
140          assert_select "a[href='/user/#{users(:normal_user).display_name}/diary/#{diary_entries(:normal_user_entry_1).id}/edit']", :text => "Edit this entry", :count => 0
141        end
142      end
143    end
144    #print @response.body
145   
146  end
147 
148  def test_edit_diary_entry_i18n
149    get(:edit, {:id => diary_entries(:normal_user_entry_1).id}, {'user' => users(:normal_user).id})
150    assert_response :success
151    assert_select "span[class=translation_missing]", false, "Missing translation in edit diary entry"
152  end
153 
154  def test_create_diary_entry
155    #post :new
156  end
157 
158  def test_creating_diary_comment
159   
160  end
161 
162  # Check that you can get the expected response and template for all available languages
163  # Should test that there are no <span class="translation_missing">
164  def test_listing_diary_entries
165      get :list
166      assert_response :success, "Should be able to list the diary entries in locale"
167      assert_template 'list', "Should use the list template in locale"
168      assert_select "span[class=translation_missing]", false, "Missing translation in list of diary entries"
169   
170      # Now try to find a specific user's diary entry
171      get :list, {:display_name => users(:normal_user).display_name}
172      assert_response :success, "Should be able to list the diary entries for a user in locale"
173      assert_template 'list', "Should use the list template for a user in locale"
174      assert_no_missing_translations
175  end
176 
177  def test_rss
178    get :rss
179    assert_response :success
180  end
181 
182  def test_viewing_diary_entry
183    get :view, {:display_name => users(:normal_user).display_name, :id => diary_entries(:normal_user_entry_1).id}
184    assert_response :success
185    assert_template 'view'
186  end
187end
Note: See TracBrowser for help on using the repository browser.