# 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 }
# 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
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
# 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)
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
# 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) }
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