Covering the case of an entry not being found. More diary entry tests.
authorShaun McDonald <shaun@shaunmcdonald.me.uk>
Wed, 12 Nov 2008 18:48:58 +0000 (18:48 +0000)
committerShaun McDonald <shaun@shaunmcdonald.me.uk>
Wed, 12 Nov 2008 18:48:58 +0000 (18:48 +0000)
app/controllers/diary_entry_controller.rb
app/views/diary_entry/no_such_entry.rhtml [new file with mode: 0644]
config/potlatch/presets.txt
test/functional/diary_entry_controller_test.rb

index 60f5211fd27850d32687ba40ed2379c0a8788124..bd08bcd9795797d6e411d9a1c2ebd9016fc24236 100644 (file)
@@ -38,6 +38,8 @@ class DiaryEntryController < ApplicationController
         redirect_to :controller => 'diary_entry', :action => 'view', :id => params[:id]
       end
     end
+  rescue ActiveRecord::RecordNotFound
+    render :action => "no_such_entry", :status => :not_found
   end
 
   def comment
diff --git a/app/views/diary_entry/no_such_entry.rhtml b/app/views/diary_entry/no_such_entry.rhtml
new file mode 100644 (file)
index 0000000..1ebcf26
--- /dev/null
@@ -0,0 +1,2 @@
+<h2>No entry with the id: <%= h(params[:id]) %></h2>
+<p>Sorry, there is no diary entry or comment with the id <%=h params[:id] -%>, or no id was given. Please check your spelling, or maybe the link you clicked is wrong.</p>
index 464204edb4e721bfe0e7c1a9fa46b0a1895f250f..1917b5a6ca71b58c978677f996ed3c0ed13f682d 100644 (file)
@@ -36,6 +36,7 @@ light railway: railway=light_rail
 preserved railway: railway=preserved
 disused railway tracks: railway=disused
 course of old railway: railway=abandoned
+railway platform: railway=platform
 
 way/natural
 lake: natural=water,landuse=
index 1dc9026bb2e7c18efb7ab5ca8cb62627c13a2b8a..cb78773365186042b1c99a8b6d3ef90cadf27a1b 100644 (file)
@@ -10,9 +10,9 @@ class DiaryEntryControllerTest < ActionController::TestCase
     @request.env["RAW_POST_DATA"] = c.to_s
   end
   
-  def test_showing_create_diary_entry
+  def test_showing_new_diary_entry
     get :new
-    assert_response 302
+    assert_response :redirect
     assert_redirected_to :controller => :user, :action => "login", :referer => "/diary_entry/new"
     # Now pretend to login by using the session hash, with the 
     # id of the person we want to login as through session(:user)=user.id
@@ -22,12 +22,20 @@ class DiaryEntryControllerTest < ActionController::TestCase
     
     #print @response.to_yaml
     assert_select "html:root", :count => 1 do
-      assert_select "body" do
-        assert_select "div#content" do
-          assert_select "h1", "New diary entry" 
-          assert_select "form[action='/diary_entry/new']" do
-            assert_select "input[id=diary_entry_title][name='diary_entry[title]']"
-            assert_select "textarea#diary_entry_body[name='diary_entry[body]']"
+      assert_select "head", :count => 1 do
+        assert_select "title", :text => /New diary entry/, :count => 1
+      end
+      assert_select "body", :count => 1 do
+        assert_select "div#content", :count => 1 do
+          assert_select "h1", "New diary entry", :count => 1
+          # We don't care about the layout, we just care about the form fields
+          # that are available
+          assert_select "form[action='/diary_entry/new']", :count => 1 do
+            assert_select "input[id=diary_entry_title][name='diary_entry[title]']", :count => 1
+            assert_select "textarea#diary_entry_body[name='diary_entry[body]']", :count => 1
+            assert_select "input#latitude[name='diary_entry[latitude]'][type=text]", :count => 1
+            assert_select "input#longitude[name='diary_entry[longitude]'][type=text]", :count => 1
+            assert_select "input[name=commit][type=submit][value=Save]", :count => 1
           end
         end
       end
@@ -36,8 +44,43 @@ class DiaryEntryControllerTest < ActionController::TestCase
   end
   
   def test_editing_diary_entry
+    # Make sure that you are redirected to the login page when you are 
+    # not logged in, without and with the id of the entry you want to edit
     get :edit
-    assert :not_authorized
+    assert_response :redirect
+    assert_redirected_to :controller => :user, :action => "login", :referer => "/diary_entry/edit"
+    
+    get :edit, :id => diary_entries(:normal_user_entry_1).id
+    assert_response :redirect
+    assert_redirected_to :controller => :user, :action => "login", :referer => "/diary_entry/edit"
+    
+    # Verify that you get a not found error, when you don't pass an id
+    get(:edit, nil, {'user' => users(:normal_user).id})
+    assert_response :not_found
+    assert_select "html:root", :count => 1 do
+      assert_select "body", :count => 1 do
+        assert_select "div#content", :count => 1 do
+          assert_select "h2", :text => "No entry with the id:", :count => 1 
+        end
+      end
+    end
+    
+    # Now pass the id, and check that you can edit it
+    get(:edit, {:id => diary_entries(:normal_user_entry_1).id}, {'user' => users(:normal_user).id})
+    assert_response :success
+    assert_select "html:root", :count => 1 do
+      assert_select "head", :count => 1 do
+        assert_select "title", :text => /Edit diary entry/, :count => 1
+      end
+      assert_select "body", :count => 1 do
+        assert_select "div#content", :count => 1 do 
+          assert_select "h1", :text => /Edit diary entry/, :count => 1
+          assert_select "form[action='/diary_entry/#{diary_entries(:normal_user_entry_1).id}/edit'][method=post]", :count => 1
+        end
+      end
+    end
+        
+    #print @response.body
   end
   
   def test_editing_creating_diary_comment