Merge remote-tracking branch 'upstream/pull/5517'
This commit is contained in:
commit
fb7762feb9
10 changed files with 152 additions and 133 deletions
109
test/controllers/traces/feeds_controller_test.rb
Normal file
109
test/controllers/traces/feeds_controller_test.rb
Normal file
|
@ -0,0 +1,109 @@
|
|||
require "test_helper"
|
||||
|
||||
module Traces
|
||||
class FeedsControllerTest < ActionDispatch::IntegrationTest
|
||||
##
|
||||
# test all routes which lead to this controller
|
||||
def test_routes
|
||||
assert_routing(
|
||||
{ :path => "/traces/rss", :method => :get },
|
||||
{ :controller => "traces/feeds", :action => "show", :format => :rss }
|
||||
)
|
||||
assert_routing(
|
||||
{ :path => "/traces/tag/tagname/rss", :method => :get },
|
||||
{ :controller => "traces/feeds", :action => "show", :tag => "tagname", :format => :rss }
|
||||
)
|
||||
assert_routing(
|
||||
{ :path => "/user/username/traces/rss", :method => :get },
|
||||
{ :controller => "traces/feeds", :action => "show", :display_name => "username", :format => :rss }
|
||||
)
|
||||
assert_routing(
|
||||
{ :path => "/user/username/traces/tag/tagname/rss", :method => :get },
|
||||
{ :controller => "traces/feeds", :action => "show", :display_name => "username", :tag => "tagname", :format => :rss }
|
||||
)
|
||||
end
|
||||
|
||||
def test_show
|
||||
user = create(:user)
|
||||
# The fourth test below is surprisingly 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 traces_feed_path
|
||||
check_trace_feed [trace_b, trace_a]
|
||||
|
||||
# Restrict traces to those with a given tag
|
||||
get traces_feed_path(:tag => "London")
|
||||
check_trace_feed [trace_a]
|
||||
end
|
||||
|
||||
def test_show_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 traces_feed_path(:display_name => second_user)
|
||||
check_trace_feed []
|
||||
|
||||
# Test the user with the traces - should see only public ones
|
||||
get traces_feed_path(:display_name => user)
|
||||
check_trace_feed [trace_c, trace_b]
|
||||
|
||||
# Should only see traces with the correct tag when a tag is specified
|
||||
get traces_feed_path(:display_name => user, :tag => "London")
|
||||
check_trace_feed [trace_c]
|
||||
|
||||
# Should no traces if the user does not exist
|
||||
get traces_feed_path(:display_name => "UnknownUser")
|
||||
check_trace_feed []
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def check_trace_feed(traces)
|
||||
assert_response :success
|
||||
assert_template "traces/feeds/show"
|
||||
assert_equal "application/rss+xml", @response.media_type
|
||||
assert_select "rss", :count => 1 do
|
||||
assert_select "channel", :count => 1 do
|
||||
assert_select "title"
|
||||
assert_select "description"
|
||||
assert_select "link"
|
||||
assert_select "image"
|
||||
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://www.example.com/user/#{ERB::Util.u(trace.user.display_name)}/traces/#{trace.id}"
|
||||
assert_select item, "guid", "http://www.example.com/user/#{ERB::Util.u(trace.user.display_name)}/traces/#{trace.id}"
|
||||
assert_select item, "description" do
|
||||
assert_dom_encoded do
|
||||
assert_select "img[src='#{trace_icon_url trace.user, trace}']"
|
||||
end
|
||||
end
|
||||
# assert_select item, "dc:creator", trace.user.display_name
|
||||
assert_select item, "pubDate", trace.timestamp.rfc822
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -30,23 +30,6 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
|
|||
{ :controller => "traces", :action => "mine", :tag => "tagname" }
|
||||
)
|
||||
|
||||
assert_routing(
|
||||
{ :path => "/traces/rss", :method => :get },
|
||||
{ :controller => "traces", :action => "georss", :format => :rss }
|
||||
)
|
||||
assert_routing(
|
||||
{ :path => "/traces/tag/tagname/rss", :method => :get },
|
||||
{ :controller => "traces", :action => "georss", :tag => "tagname", :format => :rss }
|
||||
)
|
||||
assert_routing(
|
||||
{ :path => "/user/username/traces/rss", :method => :get },
|
||||
{ :controller => "traces", :action => "georss", :display_name => "username", :format => :rss }
|
||||
)
|
||||
assert_routing(
|
||||
{ :path => "/user/username/traces/tag/tagname/rss", :method => :get },
|
||||
{ :controller => "traces", :action => "georss", :display_name => "username", :tag => "tagname", :format => :rss }
|
||||
)
|
||||
|
||||
assert_routing(
|
||||
{ :path => "/user/username/traces/1", :method => :get },
|
||||
{ :controller => "traces", :action => "show", :display_name => "username", :id => "1" }
|
||||
|
@ -333,61 +316,6 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
|
|||
end
|
||||
end
|
||||
|
||||
# Check the RSS feed
|
||||
def test_rss
|
||||
user = create(:user)
|
||||
# The fourth test below is surprisingly 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 traces_rss_path
|
||||
check_trace_feed [trace_b, trace_a]
|
||||
|
||||
# Restrict traces to those with a given tag
|
||||
get traces_rss_path(:tag => "London")
|
||||
check_trace_feed [trace_a]
|
||||
end
|
||||
|
||||
# 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 traces_rss_path(:display_name => second_user.display_name)
|
||||
check_trace_feed []
|
||||
|
||||
# Test the user with the traces - should see only public ones
|
||||
get traces_rss_path(:display_name => user.display_name)
|
||||
check_trace_feed [trace_c, trace_b]
|
||||
|
||||
# Should only see traces with the correct tag when a tag is specified
|
||||
get traces_rss_path(:display_name => user.display_name, :tag => "London")
|
||||
check_trace_feed [trace_c]
|
||||
|
||||
# Should no traces if the user does not exist
|
||||
get traces_rss_path(:display_name => "UnknownUser")
|
||||
check_trace_feed []
|
||||
end
|
||||
|
||||
# Test showing a trace
|
||||
def test_show
|
||||
public_trace_file = create(:trace, :visibility => "public")
|
||||
|
@ -721,34 +649,6 @@ class TracesControllerTest < ActionDispatch::IntegrationTest
|
|||
|
||||
private
|
||||
|
||||
def check_trace_feed(traces)
|
||||
assert_response :success
|
||||
assert_template "georss"
|
||||
assert_equal "application/rss+xml", @response.media_type
|
||||
assert_select "rss", :count => 1 do
|
||||
assert_select "channel", :count => 1 do
|
||||
assert_select "title"
|
||||
assert_select "description"
|
||||
assert_select "link"
|
||||
assert_select "image"
|
||||
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://www.example.com/user/#{ERB::Util.u(trace.user.display_name)}/traces/#{trace.id}"
|
||||
assert_select item, "guid", "http://www.example.com/user/#{ERB::Util.u(trace.user.display_name)}/traces/#{trace.id}"
|
||||
assert_select item, "description" do
|
||||
assert_dom_encoded do
|
||||
assert_select "img[src='#{trace_icon_url trace.user, trace}']"
|
||||
end
|
||||
end
|
||||
# assert_select item, "dc:creator", trace.user.display_name
|
||||
assert_select item, "pubDate", trace.timestamp.rfc822
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def check_trace_index(traces)
|
||||
assert_response :success
|
||||
assert_template "index"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue