+ ##
+ # test the unredaction of an old version of a node, while not being
+ # authorised.
+ def test_unredact_node_unauthorised
+ node = create(:node, :with_history, :version => 2)
+ node_v1 = node.old_nodes.find_by(:version => 1)
+ node_v1.redact!(create(:redaction))
+
+ post :redact, :id => node_v1.node_id, :version => node_v1.version
+ assert_response :unauthorized, "should need to be authenticated to unredact."
+ end
+
+ ##
+ # test the unredaction of an old version of a node, while being
+ # authorised as a normal user.
+ def test_unredact_node_normal_user
+ user = create(:user)
+ node = create(:node, :with_history, :version => 2)
+ node_v1 = node.old_nodes.find_by(:version => 1)
+ node_v1.redact!(create(:redaction))
+
+ basic_authorization(user.email, "test")
+
+ post :redact, :id => node_v1.node_id, :version => node_v1.version
+ assert_response :forbidden, "should need to be moderator to unredact."
+ end
+
+ ##
+ # test the unredaction of an old version of a node, while being
+ # authorised as a moderator.
+ def test_unredact_node_moderator
+ moderator_user = create(:moderator_user)
+ node = create(:node, :with_history, :version => 2)
+ node_v1 = node.old_nodes.find_by(:version => 1)
+ node_v1.redact!(create(:redaction))
+
+ basic_authorization(moderator_user.email, "test")
+
+ post :redact, :id => node_v1.node_id, :version => node_v1.version
+ assert_response :success, "should be OK to unredact old version as moderator."
+
+ # check moderator can now see the redacted data, when not
+ # passing the aspecial flag
+ get :version, :id => node_v1.node_id, :version => node_v1.version
+ assert_response :success, "After unredaction, node should not be gone for moderator."
+
+ # and when accessed via history
+ get :history, :id => node_v1.node_id
+ assert_response :success, "Unredaction shouldn't have stopped history working."
+ assert_select "osm node[id='#{node_v1.node_id}'][version='#{node_v1.version}']", 1, "node #{node_v1.node_id} version #{node_v1.version} should now be present in the history for moderators without passing flag."
+
+ basic_authorization(create(:user).email, "test")
+
+ # check normal user can now see the redacted data
+ get :version, :id => node_v1.node_id, :version => node_v1.version
+ assert_response :success, "After unredaction, node should be visible to normal users."
+
+ # and when accessed via history
+ get :history, :id => node_v1.node_id
+ assert_response :success, "Unredaction shouldn't have stopped history working."
+ assert_select "osm node[id='#{node_v1.node_id}'][version='#{node_v1.version}']", 1, "node #{node_v1.node_id} version #{node_v1.version} should now be present in the history for normal users without passing flag."
+ end
+
+ private
+