Adds permissions for viewing the watcher list and adding new watchers on the issue detail view (#398).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1712 e93f8b46-1217-0410-a6f0-8f06a7374b81pull/351/head
parent
6034067d86
commit
a332e0a4fe
@ -0,0 +1,25 @@ |
||||
<div class="contextual"> |
||||
<%= link_to_remote l(:button_add), |
||||
:url => {:controller => 'watchers', |
||||
:action => 'new', |
||||
:object_type => watched.class.name.underscore, |
||||
:object_id => watched} if User.current.allowed_to?(:add_issue_watchers, @project) %> |
||||
</div> |
||||
|
||||
<p><strong><%= l(:label_issue_watchers) %></strong></p> |
||||
<%= watchers_list(watched) %> |
||||
|
||||
<% unless @watcher.nil? %> |
||||
<% remote_form_for(:watcher, @watcher, |
||||
:url => {:controller => 'watchers', |
||||
:action => 'new', |
||||
:object_type => watched.class.name.underscore, |
||||
:object_id => watched}, |
||||
:method => :post, |
||||
:html => {:id => 'new-watcher-form'}) do |f| %> |
||||
<p><%= f.select :user_id, (watched.addable_watcher_users.collect {|m| [m.name, m.id]}), :prompt => true %> |
||||
|
||||
<%= submit_tag l(:button_add) %> |
||||
<%= toggle_link l(:button_cancel), 'new-watcher-form'%></p> |
||||
<% end %> |
||||
<% end %> |
@ -0,0 +1,6 @@ |
||||
--- |
||||
watchers_001: |
||||
watchable_type: Issue |
||||
watchable_id: 2 |
||||
user_id: 3 |
||||
|
@ -0,0 +1,70 @@ |
||||
# Redmine - project management software |
||||
# Copyright (C) 2006-2008 Jean-Philippe Lang |
||||
# |
||||
# This program is free software; you can redistribute it and/or |
||||
# modify it under the terms of the GNU General Public License |
||||
# as published by the Free Software Foundation; either version 2 |
||||
# of the License, or (at your option) any later version. |
||||
# |
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU General Public License |
||||
# along with this program; if not, write to the Free Software |
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
||||
|
||||
require File.dirname(__FILE__) + '/../test_helper' |
||||
require 'watchers_controller' |
||||
|
||||
# Re-raise errors caught by the controller. |
||||
class WatchersController; def rescue_action(e) raise e end; end |
||||
|
||||
class WatchersControllerTest < Test::Unit::TestCase |
||||
fixtures :projects, :users, :roles, :members, :enabled_modules, |
||||
:issues, :trackers, :projects_trackers, :issue_statuses, :enumerations, :watchers |
||||
|
||||
def setup |
||||
@controller = WatchersController.new |
||||
@request = ActionController::TestRequest.new |
||||
@response = ActionController::TestResponse.new |
||||
User.current = nil |
||||
end |
||||
|
||||
def test_get_watch_should_be_invalid |
||||
@request.session[:user_id] = 3 |
||||
get :watch, :object_type => 'issue', :object_id => '1' |
||||
assert_response 405 |
||||
end |
||||
|
||||
def test_watch |
||||
@request.session[:user_id] = 3 |
||||
assert_difference('Watcher.count') do |
||||
xhr :post, :watch, :object_type => 'issue', :object_id => '1' |
||||
assert_response :success |
||||
assert_select_rjs :replace_html, 'watcher' |
||||
end |
||||
assert Issue.find(1).watched_by?(User.find(3)) |
||||
end |
||||
|
||||
def test_unwatch |
||||
@request.session[:user_id] = 3 |
||||
assert_difference('Watcher.count', -1) do |
||||
xhr :post, :unwatch, :object_type => 'issue', :object_id => '2' |
||||
assert_response :success |
||||
assert_select_rjs :replace_html, 'watcher' |
||||
end |
||||
assert !Issue.find(1).watched_by?(User.find(3)) |
||||
end |
||||
|
||||
def test_new_watcher |
||||
@request.session[:user_id] = 2 |
||||
assert_difference('Watcher.count') do |
||||
xhr :post, :new, :object_type => 'issue', :object_id => '2', :watcher => {:user_id => '4'} |
||||
assert_response :success |
||||
assert_select_rjs :replace_html, 'watchers' |
||||
end |
||||
assert Issue.find(2).watched_by?(User.find(4)) |
||||
end |
||||
end |
Loading…
Reference in new issue