]> git.openstreetmap.org Git - rails.git/blobdiff - test/functional/changeset_controller_test.rb
Extend API to allow changesets to be queried by ids
[rails.git] / test / functional / changeset_controller_test.rb
index a586b3dee77ea43b9e30effa7e784afc7e2e83a9..724a5749de659808e00fa3835b313525e56e5431 100644 (file)
@@ -40,41 +40,29 @@ class ChangesetControllerTest < ActionController::TestCase
       { :controller => "changeset", :action => "query" }
     )
     assert_routing(
-      { :path => "/user/name/edits", :method => :get },
+      { :path => "/user/name/history", :method => :get },
       { :controller => "changeset", :action => "list", :display_name => "name" }
     )
     assert_routing(
-      { :path => "/user/name/edits/feed", :method => :get },
+      { :path => "/user/name/history/feed", :method => :get },
       { :controller => "changeset", :action => "feed", :display_name => "name", :format => :atom }
     )
     assert_routing(
-      { :path => "/browse/friends", :method => :get },
+      { :path => "/history/friends", :method => :get },
       { :controller => "changeset", :action => "list", :friends => true }
     )
     assert_routing(
-      { :path => "/browse/nearby", :method => :get },
+      { :path => "/history/nearby", :method => :get },
       { :controller => "changeset", :action => "list", :nearby => true }
     )
     assert_routing(
-      { :path => "/browse/changesets", :method => :get },
+      { :path => "/history", :method => :get },
       { :controller => "changeset", :action => "list" }
     )
     assert_routing(
-      { :path => "/browse/changesets/feed", :method => :get },
+      { :path => "/history/feed", :method => :get },
       { :controller => "changeset", :action => "feed", :format => :atom }
     )
-    assert_recognizes(
-      { :controller => "changeset", :action => "list" },
-      { :path => "/browse", :method => :get }
-    )
-    assert_recognizes(
-      { :controller => "changeset", :action => "list" },
-      { :path => "/history", :method => :get }
-    )
-    assert_recognizes(
-      { :controller => "changeset", :action => "feed", :format => :atom },
-      { :path => "/history/feed", :method => :get }
-    )
   end
 
   # -----------------------
@@ -172,8 +160,12 @@ class ChangesetControllerTest < ActionController::TestCase
   # check that a changeset that doesn't exist returns an appropriate message
   def test_read_not_found
     [0, -32, 233455644, "afg", "213"].each do |id|
-      get :read, :id => id
-      assert_response :not_found, "should get a not found"
+      begin
+        get :read, :id => id
+        assert_response :not_found, "should get a not found"
+      rescue ActionController::UrlGenerationError => ex
+        assert_match /No route matches/, ex.to_s
+      end
     end
   end
   
@@ -234,15 +226,23 @@ class ChangesetControllerTest < ActionController::TestCase
     
     # First try to do it with no auth
     cs_ids.each do |id|
-      put :close, :id => id
-      assert_response :unauthorized, "Shouldn't be able close the non-existant changeset #{id}, when not authorized"
+      begin
+        put :close, :id => id
+        assert_response :unauthorized, "Shouldn't be able close the non-existant changeset #{id}, when not authorized"
+      rescue ActionController::UrlGenerationError => ex
+        assert_match /No route matches/, ex.to_s
+      end
     end
     
     # Now try with auth
     basic_authorization users(:public_user).email, "test"
     cs_ids.each do |id|
-      put :close, :id => id
-      assert_response :not_found, "The changeset #{id} doesn't exist, so can't be closed"
+      begin
+        put :close, :id => id
+        assert_response :not_found, "The changeset #{id} doesn't exist, so can't be closed"
+      rescue ActionController::UrlGenerationError => ex
+        assert_match /No route matches/, ex.to_s
+      end
     end
   end
 
@@ -1543,6 +1543,13 @@ EOF
     get :query, :closed => 'true', :user => users(:public_user).id
     assert_response :success, "can't get changesets by closed-ness and user"
     assert_changesets [7]
+
+    get :query, :changesets => '1,2,3'
+    assert_response :success, "can't get changesets by id (as comma-separated string)"
+    assert_changesets [1,2,3]
+
+    get :query, :changesets => ''
+    assert_response :bad_request, "should be a bad request since changesets is empty"
   end
 
   ##
@@ -1716,14 +1723,23 @@ EOF
   ##
   # This should display the last 20 changesets closed.
   def test_list
-    changesets = Changeset.find(:all, :order => "created_at DESC", :conditions => ['num_changes > 0'], :limit=> 20)
-    assert changesets.size <= 20
     get :list, {:format => "html"}
     assert_response :success
+    assert_template "changeset/history"
+    assert_select "h2", :text => "Changesets", :count => 1
+
+    get :list, {:format => "html", :list => '1', :bbox => '-180,-90,90,180'}
+    assert_response :success
     assert_template "list"
+
+    changesets = Changeset.
+        where("num_changes > 0 and min_lon is not null").
+        order(:created_at => :desc).
+        limit(20)
+    assert changesets.size <= 20
+
     # Now check that all 20 (or however many were returned) changesets are in the html
-    assert_select "h1", :text => "Changesets", :count => 1
-    assert_select "table[id='changeset_list'] tr", :count => changesets.size
+    assert_select "li", :count => changesets.size
     changesets.each do |changeset|
       # FIXME this test needs rewriting - test for table contents
     end
@@ -1735,7 +1751,7 @@ EOF
     user = users(:public_user)
     get :list, {:format => "html", :display_name => user.display_name}
     assert_response :success
-    assert_template "changeset/_user"
+    assert_template "changeset/history"
     ## FIXME need to add more checks to see which if edits are actually shown if your data is public
   end
   
@@ -1746,7 +1762,57 @@ EOF
     assert_response :not_found
     assert_template 'user/no_such_user'
   end
+      
+  ##
+  # This should display the last 20 changesets closed.
+  def test_feed
+    changesets = Changeset.where("num_changes > 0").order(:created_at => :desc).limit(20)
+    assert changesets.size <= 20
+    get :feed, {:format => "atom"}
+    assert_response :success
+    assert_template "list"
+    # Now check that all 20 (or however many were returned) changesets are in the html
+    assert_select "feed", :count => 1
+    assert_select "entry", :count => changesets.size
+    changesets.each do |changeset|
+      # FIXME this test needs rewriting - test for feed contents
+    end
+  end
+
+  ##
+  # Checks the display of the user changesets feed
+  def test_feed_user
+    user = users(:public_user)
+    get :feed, {:format => "atom", :display_name => user.display_name}
+    assert_response :success
+    assert_template "changeset/list"
+    assert_equal "application/atom+xml", response.content_type
+    ## FIXME need to add more checks to see which if edits are actually shown if your data is public
+  end
+
+  ##
+  # Check the not found of the user changesets feed
+  def test_feed_user_not_found
+    get :feed, {:format => "atom", :display_name => "Some random user"}
+    assert_response :not_found
+  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
   #------------------------------------------------------------