-
- # MySQL and Postgres require that the C based functions are installed for
- # this test to work. More information is available from:
- # http://wiki.openstreetmap.org/wiki/Rails#Installing_the_quadtile_functions
- # or by looking at the readme in db/README
- def test_changes_simple
- # create a selection of nodes
- (1..5).each do |n|
- create(:node, :timestamp => Time.utc(2007, 1, 1, 0, 0, 0), :lat => n, :lon => n)
- end
- # deleted nodes should also be counted
- create(:node, :deleted, :timestamp => Time.utc(2007, 1, 1, 0, 0, 0), :lat => 6, :lon => 6)
- # nodes in the same tile won't change the total
- create(:node, :timestamp => Time.utc(2007, 1, 1, 0, 0, 0), :lat => 6, :lon => 6)
- # nodes with a different timestamp should be ignored
- create(:node, :timestamp => Time.utc(2008, 1, 1, 0, 0, 0), :lat => 7, :lon => 7)
-
- Timecop.freeze(Time.utc(2010, 4, 3, 10, 55, 0))
- get :changes
- assert_response :success
- now = Time.now.getutc
- hourago = now - 1.hour
- assert_select "osm[version='#{API_VERSION}'][generator='#{GENERATOR}']", :count => 1 do
- assert_select "changes[starttime='#{hourago.xmlschema}'][endtime='#{now.xmlschema}']", :count => 1 do
- assert_select "tile", :count => 0
- end
- end
- Timecop.return
-
- Timecop.freeze(Time.utc(2007, 1, 1, 0, 30, 0))
- get :changes
- assert_response :success
- # print @response.body
- # As we have loaded the fixtures, we can assume that there are some
- # changes at the time we have frozen at
- now = Time.now.getutc
- hourago = now - 1.hour
- assert_select "osm[version='#{API_VERSION}'][generator='#{GENERATOR}']", :count => 1 do
- assert_select "changes[starttime='#{hourago.xmlschema}'][endtime='#{now.xmlschema}']", :count => 1 do
- assert_select "tile", :count => 6
- end
- end
- Timecop.return
- end
-
- def test_changes_zoom_invalid
- zoom_to_test = %w[p -1 0 17 one two]
- zoom_to_test.each do |zoom|
- get :changes, :zoom => zoom
- assert_response :bad_request
- assert_equal @response.body, "Requested zoom is invalid, or the supplied start is after the end time, or the start duration is more than 24 hours"
- end
- end
-
- def test_changes_zoom_valid
- 1.upto(16) do |zoom|
- get :changes, :zoom => zoom
- assert_response :success
- # NOTE: there was a test here for the timing, but it was too sensitive to be a good test
- # and it was annoying.
- assert_select "osm[version='#{API_VERSION}'][generator='#{GENERATOR}']", :count => 1 do
- assert_select "changes", :count => 1
- end
- end
- end
-
- def test_changes_hours_invalid
- invalid = %w[-21 335 -1 0 25 26 100 one two three ping pong :]
- invalid.each do |hour|
- get :changes, :hours => hour
- assert_response :bad_request, "Problem with the hour: #{hour}"
- assert_equal @response.body, "Requested zoom is invalid, or the supplied start is after the end time, or the start duration is more than 24 hours", "Problem with the hour: #{hour}."
- end
- end
-
- def test_changes_hours_valid
- 1.upto(24) do |hour|
- get :changes, :hours => hour
- assert_response :success
- end
- end
-
- def test_changes_start_end_invalid
- get :changes, :start => "2010-04-03 10:55:00", :end => "2010-04-03 09:55:00"
- assert_response :bad_request
- assert_equal @response.body, "Requested zoom is invalid, or the supplied start is after the end time, or the start duration is more than 24 hours"
- end
-
- def test_changes_start_end_valid
- get :changes, :start => "2010-04-03 09:55:00", :end => "2010-04-03 10:55:00"
- assert_response :success
- end
-
- def test_capabilities
- get :capabilities
- assert_response :success
- assert_select "osm[version='#{API_VERSION}'][generator='#{GENERATOR}']", :count => 1 do
- assert_select "api", :count => 1 do
- assert_select "version[minimum='#{API_VERSION}'][maximum='#{API_VERSION}']", :count => 1
- assert_select "area[maximum='#{MAX_REQUEST_AREA}']", :count => 1
- assert_select "note_area[maximum='#{MAX_NOTE_REQUEST_AREA}']", :count => 1
- assert_select "tracepoints[per_page='#{TRACEPOINTS_PER_PAGE}']", :count => 1
- assert_select "changesets[maximum_elements='#{Changeset::MAX_ELEMENTS}']", :count => 1
- assert_select "status[database='online']", :count => 1
- assert_select "status[api='online']", :count => 1
- assert_select "status[gpx='online']", :count => 1
- end
- end
- end
-
- def test_permissions_anonymous
- get :permissions
- assert_response :success
- assert_select "osm > permissions", :count => 1 do
- assert_select "permission", :count => 0
- end
- end
-
- def test_permissions_basic_auth
- basic_authorization(create(:user).email, "test")
- get :permissions
- assert_response :success
- assert_select "osm > permissions", :count => 1 do
- assert_select "permission", :count => ClientApplication.all_permissions.size
- ClientApplication.all_permissions.each do |p|
- assert_select "permission[name='#{p}']", :count => 1
- end
- end
- end
-
- def test_permissions_oauth
- @request.env["oauth.token"] = AccessToken.new do |token|
- # Just to test a few
- token.allow_read_prefs = true
- token.allow_write_api = true
- token.allow_read_gpx = false
- end
- get :permissions
- assert_response :success
- assert_select "osm > permissions", :count => 1 do
- assert_select "permission", :count => 2
- assert_select "permission[name='allow_read_prefs']", :count => 1
- assert_select "permission[name='allow_write_api']", :count => 1
- assert_select "permission[name='allow_read_gpx']", :count => 0
- end
- end