Added tests for changeset close method.
authorMatt Amos <zerebubuth@gmail.com>
Mon, 17 Nov 2008 11:59:42 +0000 (11:59 +0000)
committerMatt Amos <zerebubuth@gmail.com>
Mon, 17 Nov 2008 11:59:42 +0000 (11:59 +0000)
app/controllers/changeset_controller.rb
test/functional/changeset_controller_test.rb

index cd49176e63e105e16819cdc00f392189594e58d9..1e6a44189ba1bac5cd0f8508dbdb71419cf86ba5 100644 (file)
@@ -38,25 +38,28 @@ class ChangesetController < ApplicationController
     end
   end
   
+  ##
+  # marks a changeset as closed. this may be called multiple times
+  # on the same changeset, so is idempotent.
   def close 
-    begin
-      unless request.put?
-        render :nothing => true, :status => :method_not_allowed
-        return
-      end
-
-      changeset = Changeset.find(params[:id])
-
-      unless @user.id == changeset.user_id 
-        raise OSM::APIUserChangesetMismatchError 
-      end
-
-      changeset.open = false
-      changeset.save!
-      render :nothing => true
-    rescue ActiveRecord::RecordNotFound
-      render :nothing => true, :status => :not_found
+    unless request.put?
+      render :nothing => true, :status => :method_not_allowed
+      return
+    end
+    
+    changeset = Changeset.find(params[:id])
+    
+    unless @user.id == changeset.user_id 
+      raise OSM::APIUserChangesetMismatchError 
     end
+    
+    changeset.open = false
+    changeset.save!
+    render :nothing => true
+  rescue ActiveRecord::RecordNotFound
+    render :nothing => true, :status => :not_found
+  rescue OSM::APIError => ex
+    render ex.render_opts
   end
 
   ##
index 1b0c63e2d32d72da15cd564f2dd99f627ab7f929..6cbee1eb886b6f777c8f02df361f70426ce7cfa5 100644 (file)
@@ -48,8 +48,22 @@ class ChangesetControllerTest < ActionController::TestCase
     assert_select "osm>changeset[id=#{changeset_id}]", 1
   end
   
+  ##
+  # test that the user who opened a change can close it
   def test_close
-    # FIXME FIXME FIXME!
+    basic_authorization "test@openstreetmap.org", "test"
+
+    put :close, :id => changesets(:normal_user_first_change).id
+    assert_response :success
+  end
+
+  ##
+  # test that a different user can't close another user's changeset
+  def test_close_invalid
+    basic_authorization "test@example.com", "test"
+
+    put :close, :id => changesets(:normal_user_first_change).id
+    assert_response :conflict
   end
 
   ##