]> source.dussan.org Git - redmine.git/commitdiff
Use POST/DELETE to watch/unwatch an item.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 10 Feb 2013 16:10:53 +0000 (16:10 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 10 Feb 2013 16:10:53 +0000 (16:10 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@11343 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/watchers_helper.rb
config/routes.rb
test/functional/watchers_controller_test.rb
test/integration/routing/watchers_test.rb

index 3c27fc02da5605af03b6990592fa5bb2a781d51c..4aab507bdb7534e76e1a29ebc768cccb5e209b85 100644 (file)
@@ -31,14 +31,13 @@ module WatchersHelper
     watched = objects.any? {|object| object.watched_by?(user)}
     css = [watcher_css(objects), watched ? 'icon icon-fav' : 'icon icon-fav-off'].join(' ')
     text = watched ? l(:button_unwatch) : l(:button_watch)
-    url = {
-      :controller => 'watchers',
-      :action => (watched ? 'unwatch' : 'watch'),
+    url = watch_path(
       :object_type => objects.first.class.to_s.underscore,
       :object_id => (objects.size == 1 ? objects.first.id : objects.map(&:id).sort)
-    }
+    )
+    method = watched ? 'delete' : 'post'
 
-    link_to text, url, :remote => true, :method => 'post', :class => css
+    link_to text, url, :remote => true, :method => method, :class => css
   end
 
   # Returns the css class used to identify watch links for a given +object+
index 2bed011dfc1d87368eb029651cf6e0cc7b6df2b3..f157f764c234e708fe2bc97792d6f89f39a62e4c 100644 (file)
@@ -77,12 +77,12 @@ RedmineApp::Application.routes.draw do
   match 'users/:id/memberships/:membership_id', :to => 'users#destroy_membership', :via => :delete
   match 'users/:id/memberships', :to => 'users#edit_membership', :via => :post, :as => 'user_memberships'
 
+  post 'watchers/watch', :to => 'watchers#watch', :as => 'watch'
+  delete 'watchers/watch', :to => 'watchers#unwatch'
   get 'watchers/new', :to => 'watchers#new'
   post 'watchers', :to => 'watchers#create'
   post 'watchers/append', :to => 'watchers#append'
   post 'watchers/destroy', :to => 'watchers#destroy'
-  post 'watchers/watch', :to => 'watchers#watch'
-  post 'watchers/unwatch', :to => 'watchers#unwatch'
   get 'watchers/autocomplete_for_user', :to => 'watchers#autocomplete_for_user'
   # Specific routes for issue watchers API
   post 'issues/:object_id/watchers', :to => 'watchers#create', :object_type => 'issue'
index 44bda3d99c92a8b6745cda3056e43221a0fcb8f7..7c80b0f4ba12584150b64aefcc6b56f95c93da67 100644 (file)
@@ -84,7 +84,7 @@ class WatchersControllerTest < ActionController::TestCase
   def test_unwatch
     @request.session[:user_id] = 3
     assert_difference('Watcher.count', -1) do
-      xhr :post, :unwatch, :object_type => 'issue', :object_id => '2'
+      xhr :delete, :unwatch, :object_type => 'issue', :object_id => '2'
       assert_response :success
       assert_include '$(".issue-2-watcher")', response.body
     end
@@ -97,7 +97,7 @@ class WatchersControllerTest < ActionController::TestCase
     Watcher.create!(:user_id => 3, :watchable => Issue.find(3))
 
     assert_difference('Watcher.count', -2) do
-      xhr :post, :unwatch, :object_type => 'issue', :object_id => ['1', '3']
+      xhr :delete, :unwatch, :object_type => 'issue', :object_id => ['1', '3']
       assert_response :success
       assert_include '$(".issue-bulk-watcher")', response.body
     end
index 3c203f4bc848b74b6d7af1c850335e8ebc063453..39ef5a78638bdab4b0757fcf26db2dbe02c2e779 100644 (file)
@@ -44,7 +44,7 @@ class RoutingWatchersTest < ActionController::IntegrationTest
         { :controller => 'watchers', :action => 'watch' }
       )
     assert_routing(
-        { :method => 'post', :path => "/watchers/unwatch" },
+        { :method => 'delete', :path => "/watchers/watch" },
         { :controller => 'watchers', :action => 'unwatch' }
       )
     assert_routing(