]> git.openstreetmap.org Git - rails.git/blobdiff - test/controllers/traces_controller_test.rb
Merge remote-tracking branch 'upstream/pull/4329'
[rails.git] / test / controllers / traces_controller_test.rb
index 48b5c457f7fe98b2f024d09ba9db0894897a3a7b..595284bb6d54fb06636e55c187d09535aa7f337a 100644 (file)
@@ -1,22 +1,6 @@
 require "test_helper"
 
 class TracesControllerTest < ActionDispatch::IntegrationTest
 require "test_helper"
 
 class TracesControllerTest < ActionDispatch::IntegrationTest
-  # Use temporary directories with unique names for each test
-  # This allows the tests to be run in parallel.
-  def setup
-    @gpx_trace_dir_orig = Settings.gpx_trace_dir
-    @gpx_image_dir_orig = Settings.gpx_image_dir
-    Settings.gpx_trace_dir = Dir.mktmpdir("trace", Rails.root.join("test/gpx"))
-    Settings.gpx_image_dir = Dir.mktmpdir("image", Rails.root.join("test/gpx"))
-  end
-
-  def teardown
-    FileUtils.remove_dir(Settings.gpx_trace_dir)
-    FileUtils.remove_dir(Settings.gpx_image_dir)
-    Settings.gpx_trace_dir = @gpx_trace_dir_orig
-    Settings.gpx_image_dir = @gpx_image_dir_orig
-  end
-
   ##
   # test all routes which lead to this controller
   def test_routes
   ##
   # test all routes which lead to this controller
   def test_routes
@@ -24,51 +8,27 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
       { :path => "/traces", :method => :get },
       { :controller => "traces", :action => "index" }
     )
       { :path => "/traces", :method => :get },
       { :controller => "traces", :action => "index" }
     )
-    assert_routing(
-      { :path => "/traces/page/1", :method => :get },
-      { :controller => "traces", :action => "index", :page => "1" }
-    )
     assert_routing(
       { :path => "/traces/tag/tagname", :method => :get },
       { :controller => "traces", :action => "index", :tag => "tagname" }
     )
     assert_routing(
       { :path => "/traces/tag/tagname", :method => :get },
       { :controller => "traces", :action => "index", :tag => "tagname" }
     )
-    assert_routing(
-      { :path => "/traces/tag/tagname/page/1", :method => :get },
-      { :controller => "traces", :action => "index", :tag => "tagname", :page => "1" }
-    )
     assert_routing(
       { :path => "/user/username/traces", :method => :get },
       { :controller => "traces", :action => "index", :display_name => "username" }
     )
     assert_routing(
       { :path => "/user/username/traces", :method => :get },
       { :controller => "traces", :action => "index", :display_name => "username" }
     )
-    assert_routing(
-      { :path => "/user/username/traces/page/1", :method => :get },
-      { :controller => "traces", :action => "index", :display_name => "username", :page => "1" }
-    )
     assert_routing(
       { :path => "/user/username/traces/tag/tagname", :method => :get },
       { :controller => "traces", :action => "index", :display_name => "username", :tag => "tagname" }
     )
     assert_routing(
       { :path => "/user/username/traces/tag/tagname", :method => :get },
       { :controller => "traces", :action => "index", :display_name => "username", :tag => "tagname" }
     )
-    assert_routing(
-      { :path => "/user/username/traces/tag/tagname/page/1", :method => :get },
-      { :controller => "traces", :action => "index", :display_name => "username", :tag => "tagname", :page => "1" }
-    )
 
     assert_routing(
       { :path => "/traces/mine", :method => :get },
       { :controller => "traces", :action => "mine" }
     )
 
     assert_routing(
       { :path => "/traces/mine", :method => :get },
       { :controller => "traces", :action => "mine" }
     )
-    assert_routing(
-      { :path => "/traces/mine/page/1", :method => :get },
-      { :controller => "traces", :action => "mine", :page => "1" }
-    )
     assert_routing(
       { :path => "/traces/mine/tag/tagname", :method => :get },
       { :controller => "traces", :action => "mine", :tag => "tagname" }
     )
     assert_routing(
       { :path => "/traces/mine/tag/tagname", :method => :get },
       { :controller => "traces", :action => "mine", :tag => "tagname" }
     )
-    assert_routing(
-      { :path => "/traces/mine/tag/tagname/page/1", :method => :get },
-      { :controller => "traces", :action => "mine", :tag => "tagname", :page => "1" }
-    )
 
     assert_routing(
       { :path => "/traces/rss", :method => :get },
 
     assert_routing(
       { :path => "/traces/rss", :method => :get },
@@ -128,6 +88,24 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
       { :path => "/traces/1", :method => :delete },
       { :controller => "traces", :action => "destroy", :id => "1" }
     )
       { :path => "/traces/1", :method => :delete },
       { :controller => "traces", :action => "destroy", :id => "1" }
     )
+
+    get "/traces/page/1"
+    assert_redirected_to "/traces"
+
+    get "/traces/tag/tagname/page/1"
+    assert_redirected_to "/traces/tag/tagname"
+
+    get "/user/username/traces/page/1"
+    assert_redirected_to "/user/username/traces"
+
+    get "/user/username/traces/tag/tagname/page/1"
+    assert_redirected_to "/user/username/traces/tag/tagname"
+
+    get "/traces/mine/page/1"
+    assert_redirected_to "/traces/mine"
+
+    get "/traces/mine/tag/tagname/page/1"
+    assert_redirected_to "/traces/mine/tag/tagname"
   end
 
   # Check that the index of traces is displayed
   end
 
   # Check that the index of traces is displayed
@@ -243,13 +221,97 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     assert_select "table#trace_list tbody", :count => 1 do
       assert_select "tr", :count => 20
     end
     assert_select "table#trace_list tbody", :count => 1 do
       assert_select "tr", :count => 20
     end
+    assert_select "li.page-item.disabled span.page-link", :text => "Newer Traces", :count => 2
+    assert_select "li.page-item a.page-link", :text => "Older Traces", :count => 2
 
     # Try and get the second page
 
     # Try and get the second page
-    get traces_path(:page => 2)
+    get css_select("li.page-item a.page-link").last["href"]
+    assert_response :success
+    assert_select "table#trace_list tbody", :count => 1 do
+      assert_select "tr", :count => 20
+    end
+    assert_select "li.page-item a.page-link", :text => "Newer Traces", :count => 2
+    assert_select "li.page-item a.page-link", :text => "Older Traces", :count => 2
+
+    # Try and get the third page
+    get css_select("li.page-item a.page-link").last["href"]
+    assert_response :success
+    assert_select "table#trace_list tbody", :count => 1 do
+      assert_select "tr", :count => 10
+    end
+    assert_select "li.page-item a.page-link", :text => "Newer Traces", :count => 2
+    assert_select "li.page-item.disabled span.page-link", :text => "Older Traces", :count => 2
+
+    # Go back to the second page
+    get css_select("li.page-item a.page-link").first["href"]
+    assert_response :success
+    assert_select "table#trace_list tbody", :count => 1 do
+      assert_select "tr", :count => 20
+    end
+    assert_select "li.page-item a.page-link", :text => "Newer Traces", :count => 2
+    assert_select "li.page-item a.page-link", :text => "Older Traces", :count => 2
+
+    # Go back to the first page
+    get css_select("li.page-item a.page-link").first["href"]
+    assert_response :success
+    assert_select "table#trace_list tbody", :count => 1 do
+      assert_select "tr", :count => 20
+    end
+    assert_select "li.page-item.disabled span.page-link", :text => "Newer Traces", :count => 2
+    assert_select "li.page-item a.page-link", :text => "Older Traces", :count => 2
+  end
+
+  # Check a multi-page index of tagged traces
+  def test_index_tagged_paged
+    # Create several pages worth of traces
+    create_list(:trace, 100) do |trace, index|
+      create(:tracetag, :trace => trace, :tag => "London") if index.even?
+    end
+
+    # Try and get the index
+    get traces_path(:tag => "London")
+    assert_response :success
+    assert_select "table#trace_list tbody", :count => 1 do
+      assert_select "tr", :count => 20
+    end
+    assert_select "li.page-item.disabled span.page-link", :text => "Newer Traces", :count => 2
+    assert_select "li.page-item a.page-link", :text => "Older Traces", :count => 2
+
+    # Try and get the second page
+    get css_select("li.page-item a.page-link").last["href"]
+    assert_response :success
+    assert_select "table#trace_list tbody", :count => 1 do
+      assert_select "tr", :count => 20
+    end
+    assert_select "li.page-item a.page-link", :text => "Newer Traces", :count => 2
+    assert_select "li.page-item a.page-link", :text => "Older Traces", :count => 2
+
+    # Try and get the third page
+    get css_select("li.page-item a.page-link").last["href"]
+    assert_response :success
+    assert_select "table#trace_list tbody", :count => 1 do
+      assert_select "tr", :count => 10
+    end
+    assert_select "li.page-item a.page-link", :text => "Newer Traces", :count => 2
+    assert_select "li.page-item.disabled span.page-link", :text => "Older Traces", :count => 2
+
+    # Go back to the second page
+    get css_select("li.page-item a.page-link").first["href"]
+    assert_response :success
+    assert_select "table#trace_list tbody", :count => 1 do
+      assert_select "tr", :count => 20
+    end
+    assert_select "li.page-item a.page-link", :text => "Newer Traces", :count => 2
+    assert_select "li.page-item a.page-link", :text => "Older Traces", :count => 2
+
+    # Go back to the first page
+    get css_select("li.page-item a.page-link").first["href"]
     assert_response :success
     assert_select "table#trace_list tbody", :count => 1 do
       assert_select "tr", :count => 20
     end
     assert_response :success
     assert_select "table#trace_list tbody", :count => 1 do
       assert_select "tr", :count => 20
     end
+    assert_select "li.page-item.disabled span.page-link", :text => "Newer Traces", :count => 2
+    assert_select "li.page-item a.page-link", :text => "Older Traces", :count => 2
   end
 
   # Check the RSS feed
   end
 
   # Check the RSS feed
@@ -596,7 +658,7 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
 
     # Now authenticated
     create(:user_preference, :user => user, :k => "gps.trace.visibility", :v => "identifiable")
 
     # Now authenticated
     create(:user_preference, :user => user, :k => "gps.trace.visibility", :v => "identifiable")
-    assert_not_equal "trackable", user.preferences.where(:k => "gps.trace.visibility").first.v
+    assert_not_equal "trackable", user.preferences.find_by(:k => "gps.trace.visibility").v
     session_for(user)
     post traces_path, :params => { :trace => { :gpx_file => file, :description => "New Trace", :tagstring => "new,trace", :visibility => "trackable" } }
     assert_response :redirect
     session_for(user)
     post traces_path, :params => { :trace => { :gpx_file => file, :description => "New Trace", :tagstring => "new,trace", :visibility => "trackable" } }
     assert_response :redirect
@@ -610,7 +672,7 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     assert_not trace.inserted
     assert_equal File.new(fixture).read, trace.file.blob.download
     trace.destroy
     assert_not trace.inserted
     assert_equal File.new(fixture).read, trace.file.blob.download
     trace.destroy
-    assert_equal "trackable", user.preferences.where(:k => "gps.trace.visibility").first.v
+    assert_equal "trackable", user.preferences.find_by(:k => "gps.trace.visibility").v
   end
 
   # Test creating a trace with validation errors
   end
 
   # Test creating a trace with validation errors
@@ -622,7 +684,7 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
 
     # Now authenticated
     create(:user_preference, :user => user, :k => "gps.trace.visibility", :v => "identifiable")
 
     # Now authenticated
     create(:user_preference, :user => user, :k => "gps.trace.visibility", :v => "identifiable")
-    assert_not_equal "trackable", user.preferences.where(:k => "gps.trace.visibility").first.v
+    assert_not_equal "trackable", user.preferences.find_by(:k => "gps.trace.visibility").v
     session_for(user)
     post traces_path, :params => { :trace => { :gpx_file => file, :description => "", :tagstring => "new,trace", :visibility => "trackable" } }
     assert_template :new
     session_for(user)
     post traces_path, :params => { :trace => { :gpx_file => file, :description => "", :tagstring => "new,trace", :visibility => "trackable" } }
     assert_template :new
@@ -772,7 +834,7 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     assert_template "index"
 
     if traces.empty?
     assert_template "index"
 
     if traces.empty?
-      assert_select "h4", /Nothing here yet/
+      assert_select "h2", /Nothing here yet/
     else
       assert_select "table#trace_list tbody", :count => 1 do
         assert_select "tr", :count => traces.length do |rows|
     else
       assert_select "table#trace_list tbody", :count => 1 do
         assert_select "tr", :count => traces.length do |rows|