]> git.openstreetmap.org Git - rails.git/blobdiff - test/controllers/traces_controller_test.rb
Merge remote-tracking branch 'upstream/pull/2083'
[rails.git] / test / controllers / traces_controller_test.rb
index e11fe146559fed8f2edfb8212958bb5288325e51..cd30746fe4a15b7d5315b3168b08a696a3618b26 100644 (file)
@@ -210,7 +210,7 @@ class TracesControllerTest < ActionController::TestCase
 
     # First try to get it when not logged in
     get :mine
-    assert_redirected_to :controller => "user", :action => "login", :referer => "/traces/mine"
+    assert_redirected_to :controller => "users", :action => "login", :referer => "/traces/mine"
 
     # Now try when logged in
     get :mine, :session => { :user => user }
@@ -255,7 +255,7 @@ class TracesControllerTest < ActionController::TestCase
     # Should get an error if the user does not exist
     get :index, :params => { :display_name => "UnknownUser" }
     assert_response :not_found
-    assert_template "user/no_such_user"
+    assert_template "users/no_such_user"
   end
 
   # Check a multi-page index
@@ -278,25 +278,59 @@ class TracesControllerTest < ActionController::TestCase
     end
   end
 
-  # Check that the rss loads
+  # Check the RSS feed
   def test_rss
     user = create(:user)
+    # The fourth test below is surpisingly sensitive to timestamp ordering when the timestamps are equal.
+    trace_a = create(:trace, :visibility => "public", :timestamp => 4.seconds.ago) do |trace|
+      create(:tracetag, :trace => trace, :tag => "London")
+    end
+    trace_b = create(:trace, :visibility => "public", :timestamp => 3.seconds.ago) do |trace|
+      create(:tracetag, :trace => trace, :tag => "Birmingham")
+    end
+    create(:trace, :visibility => "private", :user => user, :timestamp => 2.seconds.ago) do |trace|
+      create(:tracetag, :trace => trace, :tag => "London")
+    end
+    create(:trace, :visibility => "private", :user => user, :timestamp => 1.second.ago) do |trace|
+      create(:tracetag, :trace => trace, :tag => "Birmingham")
+    end
 
     # First with the public feed
     get :georss, :params => { :format => :rss }
-    check_trace_feed Trace.visible_to_all
+    check_trace_feed [trace_b, trace_a]
 
     # Restrict traces to those with a given tag
     get :georss, :params => { :tag => "London", :format => :rss }
-    check_trace_feed Trace.tagged("London").visible_to_all
+    check_trace_feed [trace_a]
+  end
 
-    # Restrict traces to those for a given user
+  # Check the RSS feed for a specific user
+  def test_rss_user
+    user = create(:user)
+    second_user = create(:user)
+    create(:user)
+    create(:trace)
+    trace_b = create(:trace, :visibility => "public", :timestamp => 4.seconds.ago, :user => user)
+    trace_c = create(:trace, :visibility => "public", :timestamp => 3.seconds.ago, :user => user) do |trace|
+      create(:tracetag, :trace => trace, :tag => "London")
+    end
+    create(:trace, :visibility => "private")
+
+    # Test a user with no traces
+    get :georss, :params => { :display_name => second_user.display_name, :format => :rss }
+    check_trace_feed []
+
+    # Test the user with the traces - should see only public ones
     get :georss, :params => { :display_name => user.display_name, :format => :rss }
-    check_trace_feed user.traces.visible_to_all
+    check_trace_feed [trace_c, trace_b]
+
+    # Should only see traces with the correct tag when a tag is specified
+    get :georss, :params => { :display_name => user.display_name, :tag => "London", :format => :rss }
+    check_trace_feed [trace_c]
 
-    # Restrict traces to those for a given user with a tiven tag
-    get :georss, :params => { :display_name => user.display_name, :tag => "Birmingham", :format => :rss }
-    check_trace_feed user.traces.tagged("Birmingham").visible_to_all
+    # Should no traces if the user does not exist
+    get :georss, :params => { :display_name => "UnknownUser", :format => :rss }
+    check_trace_feed []
   end
 
   # Test showing a trace
@@ -513,7 +547,7 @@ class TracesControllerTest < ActionController::TestCase
     # First with no auth
     get :new
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :referer => new_trace_path
+    assert_redirected_to :controller => :users, :action => :login, :referer => new_trace_path
 
     # Now authenticated as a user with gps.trace.visibility set
     user = create(:user)
@@ -559,7 +593,7 @@ class TracesControllerTest < ActionController::TestCase
     post :create, :params => { :trace => { :gpx_file => file, :description => "New Trace", :tagstring => "new,trace", :visibility => "trackable" } }, :session => { :user => user }
     assert_response :redirect
     assert_redirected_to :action => :index, :display_name => user.display_name
-    assert_match /file has been uploaded/, flash[:notice]
+    assert_match(/file has been uploaded/, flash[:notice])
     trace = Trace.order(:id => :desc).first
     assert_equal "a.gpx", trace.name
     assert_equal "New Trace", trace.description
@@ -594,7 +628,7 @@ class TracesControllerTest < ActionController::TestCase
     # First with no auth
     get :edit, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }
     assert_response :redirect
-    assert_redirected_to :controller => :user, :action => :login, :referer => edit_trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file.id)
+    assert_redirected_to :controller => :users, :action => :login, :referer => edit_trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file.id)
 
     # Now with some other user, which should fail
     get :edit, :params => { :display_name => public_trace_file.user.display_name, :id => public_trace_file.id }, :session => { :user => create(:user) }
@@ -895,32 +929,27 @@ class TracesControllerTest < ActionController::TestCase
     anon_trace_file = create(:trace, :visibility => "private")
 
     # First with no auth
-    content public_trace_file.to_xml
-    put :api_update, :params => { :id => public_trace_file.id }
+    put :api_update, :params => { :id => public_trace_file.id }, :body => public_trace_file.to_xml.to_s
     assert_response :unauthorized
 
     # Now with some other user, which should fail
     basic_authorization create(:user).display_name, "test"
-    content public_trace_file.to_xml
-    put :api_update, :params => { :id => public_trace_file.id }
+    put :api_update, :params => { :id => public_trace_file.id }, :body => public_trace_file.to_xml.to_s
     assert_response :forbidden
 
     # Now with a trace which doesn't exist
     basic_authorization create(:user).display_name, "test"
-    content public_trace_file.to_xml
-    put :api_update, :params => { :id => 0 }
+    put :api_update, :params => { :id => 0 }, :body => public_trace_file.to_xml.to_s
     assert_response :not_found
 
     # Now with a trace which did exist but has been deleted
     basic_authorization deleted_trace_file.user.display_name, "test"
-    content deleted_trace_file.to_xml
-    put :api_update, :params => { :id => deleted_trace_file.id }
+    put :api_update, :params => { :id => deleted_trace_file.id }, :body => deleted_trace_file.to_xml.to_s
     assert_response :not_found
 
     # Now try an update with the wrong ID
     basic_authorization public_trace_file.user.display_name, "test"
-    content anon_trace_file.to_xml
-    put :api_update, :params => { :id => public_trace_file.id }
+    put :api_update, :params => { :id => public_trace_file.id }, :body => anon_trace_file.to_xml.to_s
     assert_response :bad_request,
                     "should not be able to update a trace with a different ID from the XML"
 
@@ -929,8 +958,7 @@ class TracesControllerTest < ActionController::TestCase
     t = public_trace_file
     t.description = "Changed description"
     t.visibility = "private"
-    content t.to_xml
-    put :api_update, :params => { :id => t.id }
+    put :api_update, :params => { :id => t.id }, :body => t.to_xml.to_s
     assert_response :success
     nt = Trace.find(t.id)
     assert_equal nt.description, t.description
@@ -943,8 +971,7 @@ class TracesControllerTest < ActionController::TestCase
     trace = tracetag.trace
     basic_authorization trace.user.display_name, "test"
 
-    content trace.to_xml
-    put :api_update, :params => { :id => trace.id }
+    put :api_update, :params => { :id => trace.id }, :body => trace.to_xml.to_s
     assert_response :success
 
     updated = Trace.find(trace.id)
@@ -995,11 +1022,11 @@ class TracesControllerTest < ActionController::TestCase
         assert_select "description"
         assert_select "link"
         assert_select "image"
-        assert_select "item", :count => traces.visible.count do |items|
-          traces.visible.order("timestamp DESC").zip(items).each do |trace, item|
+        assert_select "item", :count => traces.length do |items|
+          traces.zip(items).each do |trace, item|
             assert_select item, "title", trace.name
-            assert_select item, "link", "http://test.host/user/#{trace.user.display_name}/traces/#{trace.id}"
-            assert_select item, "guid", "http://test.host/user/#{trace.user.display_name}/traces/#{trace.id}"
+            assert_select item, "link", "http://test.host/user/#{ERB::Util.u(trace.user.display_name)}/traces/#{trace.id}"
+            assert_select item, "guid", "http://test.host/user/#{ERB::Util.u(trace.user.display_name)}/traces/#{trace.id}"
             assert_select item, "description"
             # assert_select item, "dc:creator", trace.user.display_name
             assert_select item, "pubDate", trace.timestamp.rfc822