From: Andy Allan Date: Wed, 16 Nov 2016 20:08:16 +0000 (+0000) Subject: Create object for list tests, and assert the responses have the X-Git-Tag: live~3597^2~1 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/717f4e1b7b765d12dd5cc13bb8ae193d07a1637f?hp=a66f0f32e977cb2d6ae7231e7014861c119cc657;ds=sidebyside Create object for list tests, and assert the responses have the required number of results. Previously, the tests would pass regardless of whether anything was in the database. --- diff --git a/test/controllers/trace_controller_test.rb b/test/controllers/trace_controller_test.rb index d6159ae40..2c47b42ec 100644 --- a/test/controllers/trace_controller_test.rb +++ b/test/controllers/trace_controller_test.rb @@ -166,27 +166,48 @@ class TraceControllerTest < ActionController::TestCase ) end - # Check that the list of changesets is displayed + # Check that the list of traces is displayed def test_list + # The fourth test below is surpisingly sensitive to timestamp ordering when the timestamps are equal. + create(:trace, :visibility => "public", :timestamp => 4.seconds.ago) do |trace| + create(:tracetag, :trace => trace, :tag => "London") + end + create(:trace, :visibility => "public", :timestamp => 3.seconds.ago) do |trace| + create(:tracetag, :trace => trace, :tag => "Birmingham") + end + create(:trace, :visibility => "private", :user => users(:public_user), :timestamp => 2.seconds.ago) do |trace| + create(:tracetag, :trace => trace, :tag => "London") + end + create(:trace, :visibility => "private", :user => users(:public_user), :timestamp => 1.second.ago) do |trace| + create(:tracetag, :trace => trace, :tag => "Birmingham") + end + # First with the public list get :list - check_trace_list Trace.visible_to_all + check_trace_list Trace.visible_to_all, 2 # Restrict traces to those with a given tag get :list, :tag => "London" - check_trace_list Trace.tagged("London").visible_to_all + check_trace_list Trace.tagged("London").visible_to_all, 1 # Should see more when we are logged in get :list, {}, { :user => users(:public_user).id } - check_trace_list Trace.visible_to(users(:public_user).id) + check_trace_list Trace.visible_to(users(:public_user).id), 4 # Again, we should see more when we are logged in get :list, { :tag => "London" }, { :user => users(:public_user).id } - check_trace_list Trace.tagged("London").visible_to(users(:public_user).id) + check_trace_list Trace.visible_to(users(:public_user).id).tagged("London"), 2 end # Check that I can get mine def test_list_mine + create(:trace, :visibility => "public") do |trace| + create(:tracetag, :trace => trace, :tag => "Birmingham") + end + create(:trace, :visibility => "private", :user => users(:public_user)) do |trace| + create(:tracetag, :trace => trace, :tag => "London") + end + # First try to get it when not logged in get :mine assert_redirected_to :controller => "user", :action => "login", :referer => "/traces/mine" @@ -197,30 +218,36 @@ class TraceControllerTest < ActionController::TestCase # Fetch the actual list get :list, { :display_name => users(:public_user).display_name }, { :user => users(:public_user).id } - check_trace_list users(:public_user).traces + check_trace_list users(:public_user).traces, 1 end - # Check the list of changesets for a specific user + # Check the list of traces for a specific user def test_list_user + create(:trace) + create(:trace, :visibility => "public", :user => users(:public_user)) + create(:trace, :visibility => "private", :user => users(:public_user)) do |trace| + create(:tracetag, :trace => trace, :tag => "London") + end + # Test a user with no traces get :list, :display_name => users(:second_public_user).display_name - check_trace_list users(:second_public_user).traces.visible_to_all + check_trace_list users(:second_public_user).traces.visible_to_all, 0 # Test a user with some traces - should see only public ones get :list, :display_name => users(:public_user).display_name - check_trace_list users(:public_user).traces.visible_to_all + check_trace_list users(:public_user).traces.visible_to_all, 1 # Should still see only public ones when authenticated as another user get :list, { :display_name => users(:public_user).display_name }, { :user => users(:normal_user).id } - check_trace_list users(:public_user).traces.visible_to_all + check_trace_list users(:public_user).traces.visible_to_all, 1 # Should see all traces when authenticated as the target user get :list, { :display_name => users(:public_user).display_name }, { :user => users(:public_user).id } - check_trace_list users(:public_user).traces + check_trace_list users(:public_user).traces, 2 # Should only see traces with the correct tag when a tag is specified get :list, { :display_name => users(:public_user).display_name, :tag => "London" }, { :user => users(:public_user).id } - check_trace_list users(:public_user).traces.tagged("London") + check_trace_list users(:public_user).traces.tagged("London"), 1 # Should get an error if the user does not exist get :list, :display_name => "UnknownUser" @@ -932,11 +959,12 @@ class TraceControllerTest < ActionController::TestCase end end - def check_trace_list(traces) + def check_trace_list(traces, count) assert_response :success assert_template "list" + assert_equal traces.count, count - if traces.count > 0 + if count > 0 assert_select "table#trace_list tbody", :count => 1 do assert_select "tr", :count => traces.visible.count do |rows| traces.visible.order("timestamp DESC").zip(rows).each do |trace, row|