openstreetmap-website/test/functional/browse_controller_test.rb
Saman Bemel-Benrud a36f3558dd Site cleanup
I set out to do a quick and dirty typography overhaul to make things
more consistent and a bit cleaner, but I kept running into things I
didn't like, so this lead me down something of a rabbit hole of design
tweaks to the OSM site.

Goals here are to have better content hierarchy, better vertical
rhythm, more consistent UI, cleaner markup with less tables, all while
keeping the basics pretty much intact. There are a lot of things I
didn't touch even though they need to be updated (lots of tables where
stuff shouldn't be tables, mostly).

Basic overview of changes:

I added a new persistent header that helps segment pages. It's now
a lot easier to know what you're looking at. The header has a page
title, a description, plus a submenu of actions.

There is now a pattern of 20px/10px margins and padding for more
rhythm and breathing room throughout the site.

I know there are other problems here or things I've missed - would
love another set of eyes to look over this! I am still getting comfortable
working on the site - it's my first time ever digging into a ruby or rails
so I'm not familiar with the templating language yet.
2013-01-14 21:27:08 +00:00

137 lines
4.5 KiB
Ruby

require File.dirname(__FILE__) + '/../test_helper'
require 'browse_controller'
class BrowseControllerTest < ActionController::TestCase
api_fixtures
##
# test all routes which lead to this controller
def test_routes
assert_routing(
{ :path => "/browse/start", :method => :get },
{ :controller => "browse", :action => "start" }
)
assert_routing(
{ :path => "/browse/node/1", :method => :get },
{ :controller => "browse", :action => "node", :id => "1" }
)
assert_routing(
{ :path => "/browse/node/1/history", :method => :get },
{ :controller => "browse", :action => "node_history", :id => "1" }
)
assert_routing(
{ :path => "/browse/way/1", :method => :get },
{ :controller => "browse", :action => "way", :id => "1" }
)
assert_routing(
{ :path => "/browse/way/1/history", :method => :get },
{ :controller => "browse", :action => "way_history", :id => "1" }
)
assert_routing(
{ :path => "/browse/relation/1", :method => :get },
{ :controller => "browse", :action => "relation", :id => "1" }
)
assert_routing(
{ :path => "/browse/relation/1/history", :method => :get },
{ :controller => "browse", :action => "relation_history", :id => "1" }
)
assert_routing(
{ :path => "/browse/changeset/1", :method => :get },
{ :controller => "browse", :action => "changeset", :id => "1" }
)
end
def test_start
xhr :get, :start
assert_response :success
end
def test_read_relation
browse_check 'relation', relations(:visible_relation).relation_id
end
def test_read_relation_history
browse_check 'relation_history', relations(:visible_relation).relation_id
end
def test_read_way
browse_check 'way', ways(:visible_way).way_id
end
def test_read_way_history
browse_check 'way_history', ways(:visible_way).way_id
end
def test_read_node
browse_check 'node', nodes(:visible_node).node_id
end
def test_read_node_history
browse_check 'node_history', nodes(:visible_node).node_id
end
def test_read_changeset
browse_check 'changeset', changesets(:normal_user_first_change).id
end
##
# Methods to check redaction.
#
# note that these are presently highly reliant on the structure of the
# page for the selection tests, which doesn't work out particularly
# well if that structure changes. so... if you change the page layout
# then please make it more easily (and robustly) testable!
##
def test_redacted_node_history
get :node_history, :id => nodes(:redacted_node_redacted_version).node_id
assert_response :success
assert_template 'node_history'
# there are 2 revisions of the redacted node, but only one
# should be showing up here.
assert_select "body div[id=content] div[class=browse_details]", 1
assert_select "body div[id=content] div[class=browse_details][id=1]", 0
end
def test_redacted_way_history
get :way_history, :id => ways(:way_with_redacted_versions_v1).way_id
assert_response :success
assert_template 'way_history'
# there are 4 revisions of the redacted way, but only 2
# should be showing up here.
assert_select "body div[id=content] div[class=browse_details]", 2
# redacted revisions are 2 & 3
assert_select "body div[id=content] div[class=browse_details][id=2]", 0
assert_select "body div[id=content] div[class=browse_details][id=3]", 0
end
def test_redacted_relation_history
get :relation_history, :id => relations(:relation_with_redacted_versions_v1).relation_id
assert_response :success
assert_template 'relation_history'
# there are 4 revisions of the redacted relation, but only 2
# should be showing up here.
assert_select "body div[id=content] div[class=browse_details]", 2
# redacted revisions are 2 & 3
assert_select "body div[id=content] div[class=browse_details][id=2]", 0
assert_select "body div[id=content] div[class=browse_details][id=3]", 0
end
# This is a convenience method for most of the above checks
# First we check that when we don't have an id, it will correctly return a 404
# then we check that we get the correct 404 when a non-existant id is passed
# then we check that it will get a successful response, when we do pass an id
def browse_check(type, id)
assert_raise ActionController::RoutingError do
get type
end
assert_raise ActionController::RoutingError do
get type, {:id => -10} # we won't have an id that's negative
end
get type, {:id => id}
assert_response :success
assert_template type
end
end