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.
This commit is contained in:
Andy Allan 2016-11-16 20:08:16 +00:00
parent a66f0f32e9
commit 717f4e1b7b

View file

@ -166,27 +166,48 @@ class TraceControllerTest < ActionController::TestCase
) )
end end
# Check that the list of changesets is displayed # Check that the list of traces is displayed
def test_list 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 # First with the public list
get :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 # Restrict traces to those with a given tag
get :list, :tag => "London" 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 # Should see more when we are logged in
get :list, {}, { :user => users(:public_user).id } 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 # Again, we should see more when we are logged in
get :list, { :tag => "London" }, { :user => users(:public_user).id } 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 end
# Check that I can get mine # Check that I can get mine
def test_list_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 # First try to get it when not logged in
get :mine get :mine
assert_redirected_to :controller => "user", :action => "login", :referer => "/traces/mine" assert_redirected_to :controller => "user", :action => "login", :referer => "/traces/mine"
@ -197,30 +218,36 @@ class TraceControllerTest < ActionController::TestCase
# Fetch the actual list # Fetch the actual list
get :list, { :display_name => users(:public_user).display_name }, { :user => users(:public_user).id } 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 end
# Check the list of changesets for a specific user # Check the list of traces for a specific user
def test_list_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 # Test a user with no traces
get :list, :display_name => users(:second_public_user).display_name 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 # Test a user with some traces - should see only public ones
get :list, :display_name => users(:public_user).display_name 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 # 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 } 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 # Should see all traces when authenticated as the target user
get :list, { :display_name => users(:public_user).display_name }, { :user => users(:public_user).id } 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 # 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 } 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 # Should get an error if the user does not exist
get :list, :display_name => "UnknownUser" get :list, :display_name => "UnknownUser"
@ -932,11 +959,12 @@ class TraceControllerTest < ActionController::TestCase
end end
end end
def check_trace_list(traces) def check_trace_list(traces, count)
assert_response :success assert_response :success
assert_template "list" 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 "table#trace_list tbody", :count => 1 do
assert_select "tr", :count => traces.visible.count do |rows| assert_select "tr", :count => traces.visible.count do |rows|
traces.visible.order("timestamp DESC").zip(rows).each do |trace, row| traces.visible.order("timestamp DESC").zip(rows).each do |trace, row|