X-Git-Url: https://git.openstreetmap.org/rails.git/blobdiff_plain/7d41b926cfd4edb026056fd5f421e78f5a6681c8..72e59b49fa0512e5c7d16217edce62225094ffe3:/test/functional/old_way_controller_test.rb diff --git a/test/functional/old_way_controller_test.rb b/test/functional/old_way_controller_test.rb index f0ab6bd85..e79d7b480 100644 --- a/test/functional/old_way_controller_test.rb +++ b/test/functional/old_way_controller_test.rb @@ -56,6 +56,112 @@ class OldWayControllerTest < ActionController::TestCase check_history_equals_versions(current_ways(:way_with_versions).id) end + ## + # test the redaction of an old version of a way, while not being + # authorised. + def test_redact_way_unauthorised + do_redact_way(ways(:way_with_versions), + redactions(:example)) + assert_response :unauthorized, "should need to be authenticated to redact." + end + + ## + # test the redaction of an old version of a way, while being + # authorised as a normal user. + def test_redact_way_normal_user + basic_authorization(users(:public_user).email, "test") + + do_redact_way(ways(:way_with_versions), + redactions(:example)) + assert_response :forbidden, "should need to be moderator to redact." + end + + ## + # test that, even as moderator, the current version of a way + # can't be redacted. + def test_redact_way_current_version + basic_authorization(users(:moderator_user).email, "test") + + do_redact_way(ways(:way_with_versions_v4), + redactions(:example)) + assert_response :forbidden, "shouldn't be OK to redact current version as moderator." + end + + ## + # test that redacted ways aren't visible, regardless of + # authorisation except as moderator... + def test_version_redacted + way = ways(:way_with_redacted_versions_v2) + + get :version, :id => way.way_id, :version => way.version + assert_response :forbidden, "Redacted node shouldn't be visible via the version API." + + # not even to a logged-in user + basic_authorization(users(:public_user).email, "test") + get :version, :id => way.way_id, :version => way.version + assert_response :forbidden, "Redacted node shouldn't be visible via the version API, even when logged in." + end + + ## + # test that redacted nodes aren't visible in the history + def test_history_redacted + way = ways(:way_with_redacted_versions_v2) + + get :history, :id => way.way_id + assert_response :success, "Redaction shouldn't have stopped history working." + assert_select "osm way[id=#{way.way_id}][version=#{way.version}]", 0, "redacted way #{way.way_id} version #{way.version} shouldn't be present in the history." + + # not even to a logged-in user + basic_authorization(users(:public_user).email, "test") + get :version, :id => way.way_id, :version => way.version + get :history, :id => way.way_id + assert_response :success, "Redaction shouldn't have stopped history working." + assert_select "osm way[id=#{way.way_id}][version=#{way.version}]", 0, "redacted node #{way.way_id} version #{way.version} shouldn't be present in the history, even when logged in." + end + + ## + # test the redaction of an old version of a way, while being + # authorised as a moderator. + def test_redact_way_moderator + way = ways(:way_with_versions) + basic_authorization(users(:moderator_user).email, "test") + + do_redact_way(way, redactions(:example)) + assert_response :success, "should be OK to redact old version as moderator." + + # check moderator can still see the redacted data + get :version, :id => way.way_id, :version => way.version + assert_response :success, "After redaction, node should not be gone for moderator." + + # and when accessed via history + get :history, :id => way.way_id + assert_response :success, "Redaction shouldn't have stopped history working." + assert_select "osm way[id=#{way.way_id}][version=#{way.version}]", 1, "way #{way.way_id} version #{way.version} should still be present in the history for moderators." + end + + # testing that if the moderator drops auth, he can't see the + # redacted stuff any more. + def test_redact_way_is_redacted + way = ways(:way_with_versions) + basic_authorization(users(:moderator_user).email, "test") + + do_redact_way(way, redactions(:example)) + assert_response :success, "should be OK to redact old version as moderator." + + # re-auth as non-moderator + basic_authorization(users(:public_user).email, "test") + + # check can't see the redacted data + get :version, :id => way.way_id, :version => way.version + assert_response :forbidden, "Redacted node shouldn't be visible via the version API." + + # and when accessed via history + get :version, :id => way.node_id, :version => way.version + get :history, :id => way.node_id + assert_response :success, "Redaction shouldn't have stopped history working." + assert_select "osm way[id=#{way.way_id}][version=#{way.version}]", 0, "redacted way #{way.way_id} version #{way.version} shouldn't be present in the history." + end + ## # check that the current version of a way is equivalent to the # version which we're getting from the versions call. @@ -99,4 +205,12 @@ class OldWayControllerTest < ActionController::TestCase end end + def do_redact_way(way, redaction) + get :version, :id => way.way_id, :version => way.version + assert_response :success, "should be able to get version #{way.version} of node #{way.way_id}." + + # now redact it + post :redact, :id => way.way_id, :version => way.version, :redaction => redaction.id + end + end