- node_v1 = node.old_nodes.find_by(:version => 1)
- node_v1.redact!(create(:redaction))
-
- get api_node_version_path(node_v1.node_id, node_v1.version)
- assert_response :forbidden, "Redacted node shouldn't be visible via the version API."
-
- # not even to a logged-in user
- auth_header = bearer_authorization_header
- get api_node_version_path(node_v1.node_id, node_v1.version), :headers => auth_header
- assert_response :forbidden, "Redacted node shouldn't be visible via the version API, even when logged in."
- end
-
- # Ensure the lat/lon is formatted as a decimal e.g. not 4.0e-05
- def test_lat_lon_xml_format
- old_node = create(:old_node, :latitude => (0.00004 * OldNode::SCALE).to_i, :longitude => (0.00008 * OldNode::SCALE).to_i)
-
- get api_node_versions_path(old_node.node_id)
- assert_match(/lat="0.0000400"/, response.body)
- assert_match(/lon="0.0000800"/, response.body)
- end
-
- ##
- # test the redaction of an old version of a node, while not being
- # authorised.
- def test_redact_node_unauthorised
- node = create(:node, :with_history, :version => 4)
- node_v3 = node.old_nodes.find_by(:version => 3)
-
- do_redact_node(node_v3,
- create(:redaction))
- assert_response :unauthorized, "should need to be authenticated to redact."
- end
-
- ##
- # test the redaction of an old version of a node, while being
- # authorised as a normal user.
- def test_redact_node_normal_user
- auth_header = bearer_authorization_header
-
- node = create(:node, :with_history, :version => 4)
- node_v3 = node.old_nodes.find_by(:version => 3)
-
- do_redact_node(node_v3,
- create(:redaction),
- auth_header)
- assert_response :forbidden, "should need to be moderator to redact."
- end
-
- ##
- # test that, even as moderator, the current version of a node
- # can't be redacted.
- def test_redact_node_current_version
- auth_header = bearer_authorization_header create(:moderator_user)
-
- node = create(:node, :with_history, :version => 4)
- node_v4 = node.old_nodes.find_by(:version => 4)
-
- do_redact_node(node_v4,
- create(:redaction),
- auth_header)
- assert_response :bad_request, "shouldn't be OK to redact current version as moderator."
- end
-
- def test_redact_node_by_regular_without_write_redactions_scope
- auth_header = bearer_authorization_header(create(:user), :scopes => %w[read_prefs write_api])
- do_redact_redactable_node(auth_header)
- assert_response :forbidden, "should need to be moderator to redact."
- end
-
- def test_redact_node_by_regular_with_write_redactions_scope
- auth_header = bearer_authorization_header(create(:user), :scopes => %w[write_redactions])
- do_redact_redactable_node(auth_header)
- assert_response :forbidden, "should need to be moderator to redact."
- end
-
- def test_redact_node_by_moderator_without_write_redactions_scope
- auth_header = bearer_authorization_header(create(:moderator_user), :scopes => %w[read_prefs write_api])
- do_redact_redactable_node(auth_header)
- assert_response :forbidden, "should need to have write_redactions scope to redact."
- end
-
- def test_redact_node_by_moderator_with_write_redactions_scope
- auth_header = bearer_authorization_header(create(:moderator_user), :scopes => %w[write_redactions])
- do_redact_redactable_node(auth_header)
- assert_response :success, "should be OK to redact old version as moderator with write_redactions scope."
- end
-
- ##
- # test the redaction of an old version of a node, while being
- # authorised as a moderator.
- def test_redact_node_moderator
- node = create(:node, :with_history, :version => 4)
- node_v3 = node.old_nodes.find_by(:version => 3)
- auth_header = bearer_authorization_header create(:moderator_user)
-
- do_redact_node(node_v3, create(:redaction), auth_header)
- assert_response :success, "should be OK to redact old version as moderator."
-
- # check moderator can still see the redacted data, when passing
- # the appropriate flag
- get api_node_version_path(node_v3.node_id, node_v3.version), :headers => auth_header
- assert_response :forbidden, "After redaction, node should be gone for moderator, when flag not passed."
- get api_node_version_path(node_v3.node_id, node_v3.version, :show_redactions => "true"), :headers => auth_header
- assert_response :success, "After redaction, node should not be gone for moderator, when flag passed."
-
- # and when accessed via history
- get api_node_versions_path(node)
- assert_response :success, "Redaction shouldn't have stopped history working."
- assert_select "osm node[id='#{node_v3.node_id}'][version='#{node_v3.version}']", 0,
- "node #{node_v3.node_id} version #{node_v3.version} should not be present in the history for moderators when not passing flag."
- get api_node_versions_path(node, :show_redactions => "true"), :headers => auth_header
- assert_response :success, "Redaction shouldn't have stopped history working."
- assert_select "osm node[id='#{node_v3.node_id}'][version='#{node_v3.version}']", 1,
- "node #{node_v3.node_id} version #{node_v3.version} should still be present in the history for moderators when passing flag."
- end
-
- # testing that if the moderator drops auth, he can't see the
- # redacted stuff any more.
- def test_redact_node_is_redacted
- node = create(:node, :with_history, :version => 4)
- node_v3 = node.old_nodes.find_by(:version => 3)
- auth_header = bearer_authorization_header create(:moderator_user)
-
- do_redact_node(node_v3, create(:redaction), auth_header)
- assert_response :success, "should be OK to redact old version as moderator."