]> git.openstreetmap.org Git - rails.git/blobdiff - test/controllers/traces_controller_test.rb
Merge remote-tracking branch 'upstream/pull/4554'
[rails.git] / test / controllers / traces_controller_test.rb
index 614b21b1e3d7331ba372023ce813f77dbd5bec23..e6f3af4f1dc0548c99ad0d41d57b7b87a0d73e00 100644 (file)
@@ -221,13 +221,97 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     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 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_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
@@ -310,13 +394,11 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
 
     # First with no auth
     get show_trace_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
-    assert_response :redirect
     assert_redirected_to :action => :index
 
     # Now with some other user, which should not work since the trace is anon
     session_for(create(:user))
     get show_trace_path(:display_name => anon_trace_file.user.display_name, :id => anon_trace_file)
-    assert_response :redirect
     assert_redirected_to :action => :index
 
     # And finally we should be able to do it with the owner of the trace
@@ -331,13 +413,11 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
 
     # First with a trace that has never existed
     get show_trace_path(:display_name => create(:user).display_name, :id => 0)
-    assert_response :redirect
     assert_redirected_to :action => :index
 
     # Now with a trace that has been deleted
     session_for(deleted_trace_file.user)
     get show_trace_path(:display_name => deleted_trace_file.user.display_name, :id => deleted_trace_file)
-    assert_response :redirect
     assert_redirected_to :action => :index
   end
 
@@ -528,7 +608,6 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
   def test_new_get
     # First with no auth
     get new_trace_path
-    assert_response :redirect
     assert_redirected_to login_path(:referer => new_trace_path)
 
     # Now authenticated as a user with gps.trace.visibility set
@@ -574,10 +653,9 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
 
     # 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
     assert_redirected_to :action => :index, :display_name => user.display_name
     assert_match(/file has been uploaded/, flash[:notice])
     trace = Trace.order(:id => :desc).first
@@ -588,7 +666,7 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     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
@@ -600,7 +678,7 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
 
     # 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
@@ -614,7 +692,6 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
 
     # First with no auth
     get edit_trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
-    assert_response :redirect
     assert_redirected_to login_path(: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
@@ -668,7 +745,6 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     # Finally with a trace that we are allowed to edit
     session_for(public_trace_file.user)
     put trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file, :trace => new_details)
-    assert_response :redirect
     assert_redirected_to :action => :show, :display_name => public_trace_file.user.display_name
     trace = Trace.find(public_trace_file.id)
     assert_equal new_details[:description], trace.description
@@ -703,7 +779,6 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     # Now with a trace that we are allowed to delete
     session_for(public_trace_file.user)
     delete trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
-    assert_response :redirect
     assert_redirected_to :action => :index, :display_name => public_trace_file.user.display_name
     trace = Trace.find(public_trace_file.id)
     assert_not trace.visible
@@ -713,7 +788,6 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
     admin = create(:administrator_user)
     session_for(admin)
     delete trace_path(:display_name => public_trace_file.user.display_name, :id => public_trace_file)
-    assert_response :redirect
     assert_redirected_to :action => :index, :display_name => public_trace_file.user.display_name
     trace = Trace.find(public_trace_file.id)
     assert_not trace.visible