Added test for changeset/download hiding redacted elements
authorMatt Amos <zerebubuth@gmail.com>
Thu, 29 Mar 2012 15:12:01 +0000 (16:12 +0100)
committerTom Hughes <tom@compton.nu>
Thu, 5 Apr 2012 12:49:53 +0000 (13:49 +0100)
app/controllers/changeset_controller.rb
test/functional/changeset_controller_test.rb

index 2e6258ea8b2b25195fce22cae6956f82bddb2113..34ca24762a9b42783d87cd86652929c4c5a6bca0 100644 (file)
@@ -143,10 +143,11 @@ class ChangesetController < ApplicationController
   def download
     changeset = Changeset.find(params[:id])
     
-    # get all the elements in the changeset and stick them in a big array.
-    elements = [changeset.old_nodes, 
-                changeset.old_ways, 
-                changeset.old_relations].flatten
+    # get all the elements in the changeset which haven't been redacted
+    # and stick them in a big array.
+    elements = [changeset.old_nodes.unredacted, 
+                changeset.old_ways.unredacted, 
+                changeset.old_relations.unredacted].flatten
     
     # sort the elements by timestamp and version number, as this is the 
     # almost sensible ordering available. this would be much nicer if 
index a586b3dee77ea43b9e30effa7e784afc7e2e83a9..8bba90975a3f0cddf3fc017dc917bfc2b2d97faf 100644 (file)
@@ -1747,6 +1747,22 @@ EOF
     assert_template 'user/no_such_user'
   end
   
+  ##
+  # check that the changeset download for a changeset with a redacted
+  # element in it doesn't contain that element.
+  def test_diff_download_redacted
+    changeset_id = changesets(:public_user_first_change).id
+
+    get :download, :id => changeset_id
+    assert_response :success
+
+    assert_select "osmChange", 1
+    # this changeset contains node 17 in versions 1 & 2, but 1 should
+    # be hidden.
+    assert_select "osmChange node[id=17]", 1
+    assert_select "osmChange node[id=17][version=1]", 0
+  end
+
   #------------------------------------------------------------
   # utility functions
   #------------------------------------------------------------