<% content_for :sidebar do %>
<%= render :partial => 'sidebar' %>
+ <% if User.current.allowed_to?(:add_wiki_page_watchers, @project) ||
+ (@page.watchers.present? && User.current.allowed_to?(:view_wiki_page_watchers, @project)) %>
+ <div id="watchers">
+ <%= render :partial => 'watchers/watchers', :locals => {:watched => @page} %>
+ </div>
+ <% end %>
<% end %>
<% content_for :header_tags do %>
permission_view_wiki_edits: View wiki history
permission_edit_wiki_pages: Edit wiki pages
permission_delete_wiki_pages_attachments: Delete attachments
+ permission_view_wiki_page_watchers: View wiki page watchers list
+ permission_add_wiki_page_watchers: Add wiki page watchers
+ permission_delete_wiki_page_watchers: Delete wiki page watchers
permission_protect_wiki_pages: Protect wiki pages
permission_manage_repository: Manage repository
permission_browse_repository: Browse repository
label_generate_key: Generate a key
label_issue_watchers: Watchers
label_message_watchers: Watchers
+ label_wiki_page_watchers: Watchers
label_example: Example
label_display: Display
label_sort: Sort
map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
map.permission :delete_wiki_pages, {:wiki => [:destroy, :destroy_version]}, :require => :member
map.permission :delete_wiki_pages_attachments, {}
+ map.permission :view_wiki_page_watchers, {}, :read => true
+ map.permission :add_wiki_page_watchers, {:watchers => [:new, :create, :autocomplete_for_user]}
+ map.permission :delete_wiki_page_watchers, {:watchers => :destroy}
map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
map.permission :manage_wiki, {:wikis => [:edit, :destroy], :wiki => :rename}, :require => :member
end
- :protect_wiki_pages
- :delete_wiki_pages
- :rename_wiki_pages
+ - :view_wiki_page_watchers
+ - :add_wiki_page_watchers
+ - :delete_wiki_page_watchers
- :manage_wiki
- :view_messages
- :add_messages
- :edit_wiki_pages
- :protect_wiki_pages
- :delete_wiki_pages
+ - :view_wiki_page_watchers
- :view_messages
- :add_messages
- :edit_own_messages
- :view_wiki_edits
- :edit_wiki_pages
- :delete_wiki_pages
+ - :view_wiki_page_watchers
- :view_messages
- :add_messages
- :view_message_watchers
watchable_type: Issue
watchable_id: 2
user_id: 1
+watchers_004:
+ watchable_type: WikiPage
+ watchable_id: 1
+ user_id: 1
class WatchersControllerTest < Redmine::ControllerTest
fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules,
:issues, :trackers, :projects_trackers, :issue_statuses, :enumerations, :watchers,
- :boards, :messages
+ :boards, :messages, :wikis, :wiki_pages
def setup
User.current = nil
assert_match /ajax-modal/, response.body
end
+ def test_new_for_wiki_page
+ @request.session[:user_id] = 2
+ get :new, :params => {:object_type => 'wiki_page', :object_id => '1'}, :xhr => true
+ assert_response :success
+ assert_match /ajax-modal/, response.body
+ end
+
def test_new_with_multiple_objects
@request.session[:user_id] = 2
get :new, :params => {:object_type => 'issue', :object_id => ['1', '2']}, :xhr => true
assert Message.find(1).watched_by?(User.find(4))
end
+ def test_create_for_wiki_page
+ @request.session[:user_id] = 2
+ assert_difference('Watcher.count') do
+ post :create, :params => {
+ :object_type => 'wiki_page', :object_id => '1',
+ :watcher => {:user_id => '4'}
+ }, :xhr => true
+ assert_response :success
+ assert_match /watchers/, response.body
+ assert_match /ajax-modal/, response.body
+ end
+ assert WikiPage.find(1).watched_by?(User.find(4))
+ end
+
def test_create_with_mutiple_users
@request.session[:user_id] = 2
assert_difference('Watcher.count', 3) do
assert message.watched_by?(Group.find(10))
end
+ def test_create_for_wiki_page_with_mutiple_users
+ @request.session[:user_id] = 2
+ assert_difference('Watcher.count', 3) do
+ post :create, :params => {
+ :object_type => 'wiki_page', :object_id => '1',
+ :watcher => {:user_ids => ['4', '7', '10']}
+ }, :xhr => true
+ assert_response :success
+ assert_match /watchers/, response.body
+ assert_match /ajax-modal/, response.body
+ end
+ wiki_page = WikiPage.find(1)
+ assert wiki_page.watched_by?(User.find(4))
+ assert wiki_page.watched_by?(User.find(7))
+ assert wiki_page.watched_by?(Group.find(10))
+ end
+
def test_create_with_mutiple_objects
@request.session[:user_id] = 2
assert_difference('Watcher.count', 6) do
assert !message.watched_by?(user)
end
+ def test_destroy_for_wiki_page
+ @request.session[:user_id] = 2
+ wiki_page = WikiPage.find(1)
+ user = User.find(1)
+ assert wiki_page.watched_by?(user)
+ assert_difference('Watcher.count', -1) do
+ delete :destroy, :params => {
+ :object_type => 'wiki_page', :object_id => '1', :user_id => '1'
+ }, :xhr => true
+ assert_response :success
+ assert_match /watchers/, response.body
+ end
+ wiki_page.reload
+ assert !wiki_page.watched_by?(user)
+ end
+
def test_destroy_locked_user
user = User.find(3)
user.lock!
fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles,
:enabled_modules, :wikis, :wiki_pages, :wiki_contents,
:wiki_content_versions, :attachments,
- :issues, :issue_statuses, :trackers
+ :issues, :issue_statuses, :trackers, :watchers
def setup
User.current = nil
assert_select 'div#sidebar', :text => /Side bar content for test_show_with_sidebar/
end
+ def test_show_should_display_watchers
+ @request.session[:user_id] = 2
+ page = Project.find(1).wiki.find_page('Another_page')
+ page.add_watcher User.find(2)
+ page.add_watcher Group.find(10)
+ [['1', true], ['0', false]].each do |(gravatar_enabled, is_display_gravatar)|
+ with_settings :gravatar_enabled => gravatar_enabled do
+ get :show, :params => {:project_id => 1, :id => 'Another_page'}
+ end
+
+ assert_select 'div#watchers ul' do
+ assert_select 'li.user-2' do
+ assert_select 'img.gravatar[title=?]', 'John Smith', is_display_gravatar
+ assert_select 'a[href="/users/2"]'
+ assert_select 'a[class*=delete]'
+ end
+ assert_select 'li.user-10' do
+ assert_select 'img.gravatar[title=?]', 'A Team', is_display_gravatar
+ assert_select 'a[href="/users/10"]', false
+ assert_select 'a[class*=delete]'
+ end
+ end
+ end
+ end
+
def test_show_should_display_section_edit_links
@request.session[:user_id] = 2
get :show, :params => {:project_id => 1, :id => 'Page with sections'}