Nuevo plugin Private Wiki 0.2.0
This commit is contained in:
parent
4e788bb03c
commit
49913ad11b
20 changed files with 480 additions and 0 deletions
20
plugins/redmine_private_wiki/LICENSE
Executable file
20
plugins/redmine_private_wiki/LICENSE
Executable file
|
@ -0,0 +1,20 @@
|
||||||
|
Copyright (c) 2017 Alexandre BOUDINE, previous owner(s) : Oleg Kandaurov
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
"Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||||
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||||
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
39
plugins/redmine_private_wiki/README.md
Executable file
39
plugins/redmine_private_wiki/README.md
Executable file
|
@ -0,0 +1,39 @@
|
||||||
|
# Private Wiki
|
||||||
|
## A RedMine plugin
|
||||||
|
|
||||||
|
This plugin is based on the existing plugin "Redmine Private Wiki", developped by Oleg Kandaurov
|
||||||
|
Link of the original plugin : https://github.com/f0y/redmine_private_wiki
|
||||||
|
|
||||||
|
## Features :
|
||||||
|
|
||||||
|
As original plugin :
|
||||||
|
* It allows to set individual pages of wiki as privates
|
||||||
|
* Thoses privates pages are only visibles to the roles with the right permission
|
||||||
|
* Privatize pages are also a permission
|
||||||
|
|
||||||
|
## New Features :
|
||||||
|
|
||||||
|
New features :
|
||||||
|
* Hide private wikis in index and date_index for non-authorized users
|
||||||
|
* Add [PRIVATE] tag in index for authorized users
|
||||||
|
|
||||||
|
## Use :
|
||||||
|
|
||||||
|
To set public/private wiki page :
|
||||||
|
Projects -> MyProject -> Wiki -> select wiki page -> set private
|
||||||
|
|
||||||
|
## Installation :
|
||||||
|
|
||||||
|
$cd /path/to/redmine/directory/plugins
|
||||||
|
$git clone https://github.com/BlueXML/redmine_private_wiki.git
|
||||||
|
$bundle exec rake redmine:plugins:migrate RAILS_ENV=production
|
||||||
|
|
||||||
|
## Compatibility :
|
||||||
|
Tested for RedMine 3.3.* (Manually)
|
||||||
|
|
||||||
|
## License :
|
||||||
|
This plugin is licensed under the MIT license.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
|
||||||
|
<% if controller and controller.class.name == 'WikiController' and controller.action_name == "show" and @page and @page.id and @page.visible? %><!--If the actual page is a wiki page-->
|
||||||
|
|
||||||
|
<!--If the wiki is private, set PRIVATE flag-->
|
||||||
|
<% if @page.private? and User.current.allowed_to?(:view_privates_wiki, @project) %>
|
||||||
|
<span class=private_wiki_flag><%= l(:private_flag) %></span>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<!--If authorized, allow user to see changing privacy buttons-->
|
||||||
|
<%= link_to_if_authorized(l(:button_setprivate_wiki), {:action => 'change_privacy', :id => @page.title, :private => 1}, :method => :post, :class => 'icon icon-setprivate') if !@page.private? %>
|
||||||
|
<%= link_to_if_authorized(l(:button_setpublic_wiki), {:action => 'change_privacy', :id => @page.title, :private => 0}, :method => :post, :class => 'icon icon-setpublic') if @page.private? %>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
$('.contextual:first').prepend($('.private_wiki_flag'));
|
||||||
|
$('.contextual:first').append($('.icon-setprivate'));
|
||||||
|
$('.contextual:first').append($('.icon-setpublic'));
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<% end %>
|
|
@ -0,0 +1,7 @@
|
||||||
|
<!--If the actual page is a wiki page-->
|
||||||
|
<% if controller and controller.class.name == 'WikiController' and (controller.action_name == "show" or controller.action_name == "index" or controller.action_name == "date_index") %>
|
||||||
|
|
||||||
|
<!--Insert stylesheet-->
|
||||||
|
<%= stylesheet_link_tag "private_wiki.css", :plugin => "redmine_private_wiki", :media => "screen" %>
|
||||||
|
|
||||||
|
<% end %>
|
60
plugins/redmine_private_wiki/app/views/wiki/date_index.html.erb
Executable file
60
plugins/redmine_private_wiki/app/views/wiki/date_index.html.erb
Executable file
|
@ -0,0 +1,60 @@
|
||||||
|
<div class="contextual">
|
||||||
|
<% if User.current.allowed_to?(:edit_wiki_pages, @project) %>
|
||||||
|
<%= link_to l(:label_wiki_page_new), new_project_wiki_page_path(@project), :remote => true, :class => 'icon icon-add' %>
|
||||||
|
<% end %>
|
||||||
|
<%= watcher_link(@wiki, User.current) %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2><%= l(:label_index_by_date) %></h2>
|
||||||
|
|
||||||
|
<% if @pages.empty? %>
|
||||||
|
<p class="nodata"><%= l(:label_no_data) %></p>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% @pages_by_date.keys.sort.reverse.each do |date| %>
|
||||||
|
|
||||||
|
<% all_private = true %>
|
||||||
|
<% @pages_by_date[date].each do |page| %>
|
||||||
|
<% if !page.private? %>
|
||||||
|
<% all_private = false %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% if !all_private %>
|
||||||
|
<h3><%= format_date(date) %></h3>
|
||||||
|
<ul>
|
||||||
|
<% @pages_by_date[date].each do |page| %>
|
||||||
|
<% if !page.private? %>
|
||||||
|
<li><%= link_to page.pretty_title, :action => 'show', :id => page.title, :project_id => page.project %></li>
|
||||||
|
<% elsif User.current.allowed_to?(:view_privates_wiki, @project) %>
|
||||||
|
<li><%= link_to page.pretty_title, :action => 'show', :id => page.title, :project_id => page.project %> <span class='private_wiki_flag' style='display:inline-block;''><%= l(:private_flag) %></span></li>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
<% elsif User.current.allowed_to?(:view_privates_wiki, @project) %>
|
||||||
|
<h3><%= format_date(date) %></h3>
|
||||||
|
<ul>
|
||||||
|
<% @pages_by_date[date].each do |page| %>
|
||||||
|
<li><%= link_to page.pretty_title, :action => 'show', :id => page.title, :project_id => page.project %> <span class='private_wiki_flag' style='display:inline-block;''><%= l(:private_flag) %></span></li>
|
||||||
|
<% end %>
|
||||||
|
</ul>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% content_for :sidebar do %>
|
||||||
|
<%= render :partial => 'sidebar' %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% unless @pages.empty? %>
|
||||||
|
<% other_formats_links do |f| %>
|
||||||
|
<%= f.link_to 'Atom', :url => {:controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :key => User.current.rss_key} %>
|
||||||
|
<% if User.current.allowed_to?(:export_wiki_pages, @project) %>
|
||||||
|
<%= f.link_to('PDF', :url => {:action => 'export', :format => 'pdf'}) %>
|
||||||
|
<%= f.link_to('HTML', :url => {:action => 'export'}) %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
<% end %>
|
||||||
|
|
||||||
|
<% content_for :header_tags do %>
|
||||||
|
<%= auto_discovery_link_tag(:atom, :controller => 'activities', :action => 'index', :id => @project, :show_wiki_edits => 1, :format => 'atom', :key => User.current.rss_key) %>
|
||||||
|
<% end %>
|
BIN
plugins/redmine_private_wiki/assets/images/hide.png
Executable file
BIN
plugins/redmine_private_wiki/assets/images/hide.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
BIN
plugins/redmine_private_wiki/assets/images/reveal.png
Executable file
BIN
plugins/redmine_private_wiki/assets/images/reveal.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
14
plugins/redmine_private_wiki/assets/stylesheets/private_wiki.css
Executable file
14
plugins/redmine_private_wiki/assets/stylesheets/private_wiki.css
Executable file
|
@ -0,0 +1,14 @@
|
||||||
|
.private_wiki_flag {
|
||||||
|
background: #D22;
|
||||||
|
color: white;
|
||||||
|
padding: 2px 2px 2px 2px;
|
||||||
|
border-radius: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-setprivate{
|
||||||
|
background-image: url(../images/hide.png);
|
||||||
|
}
|
||||||
|
|
||||||
|
.icon-setpublic{
|
||||||
|
background-image: url(../images/reveal.png);
|
||||||
|
}
|
5
plugins/redmine_private_wiki/config/locales/en.yml
Executable file
5
plugins/redmine_private_wiki/config/locales/en.yml
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
# English strings go here for Rails i18n
|
||||||
|
en:
|
||||||
|
button_setprivate_wiki: Set Private
|
||||||
|
button_setpublic_wiki: Set Public
|
||||||
|
private_flag: PRIVATE
|
5
plugins/redmine_private_wiki/config/locales/fr.yml
Executable file
5
plugins/redmine_private_wiki/config/locales/fr.yml
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
# French strings go here for Rails i18n
|
||||||
|
fr:
|
||||||
|
button_setprivate_wiki: Rendre Privé
|
||||||
|
button_setpublic_wiki: Rendre Public
|
||||||
|
private_flag: PRIVÉ
|
5
plugins/redmine_private_wiki/config/routes.rb
Executable file
5
plugins/redmine_private_wiki/config/routes.rb
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
# Plugin's routes
|
||||||
|
RedmineApp::Application.routes.draw do
|
||||||
|
#Allow utilisation of action 'change_privacy' in links (set route to wiki method)
|
||||||
|
match 'projects/:project_id/wiki/:id/change_privacy/:private', :controller => 'wiki', :action => 'change_privacy', :via => [:post]
|
||||||
|
end
|
12
plugins/redmine_private_wiki/db/migrate/001_add_private_wiki_attribute.rb
Executable file
12
plugins/redmine_private_wiki/db/migrate/001_add_private_wiki_attribute.rb
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
class AddPrivateWikiAttribute < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
#Add a "Private" attribute used to identify visibility of wikis
|
||||||
|
add_column(:wiki_pages, "private", :boolean, :default => false)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def self.down
|
||||||
|
remove_column(:wiki_pages, "private")
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
37
plugins/redmine_private_wiki/init.rb
Executable file
37
plugins/redmine_private_wiki/init.rb
Executable file
|
@ -0,0 +1,37 @@
|
||||||
|
require 'redmine'
|
||||||
|
require_dependency 'wiki_patches/hook' #Apply views modifications
|
||||||
|
|
||||||
|
Rails.configuration.to_prepare do
|
||||||
|
|
||||||
|
#Apply patch on wiki controller
|
||||||
|
require_dependency 'wiki_controller'
|
||||||
|
unless WikiController.included_modules.include? WikiPatches::WikiControllerPatch
|
||||||
|
WikiController.send(:include, WikiPatches::WikiControllerPatch)
|
||||||
|
end
|
||||||
|
|
||||||
|
#Apply patch on wiki page
|
||||||
|
require_dependency 'wiki_page'
|
||||||
|
unless WikiPage.included_modules.include? WikiPatches::WikiPagePatch
|
||||||
|
WikiPage.send(:include, WikiPatches::WikiPagePatch)
|
||||||
|
end
|
||||||
|
|
||||||
|
require_dependency 'application_helper'
|
||||||
|
unless ApplicationHelper.included_modules.include? WikiPatches::ApplicationHelperPatch
|
||||||
|
ApplicationHelper.send(:include, WikiPatches::ApplicationHelperPatch)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Redmine::Plugin.register :redmine_private_wiki do
|
||||||
|
name 'Private Wiki plugin'
|
||||||
|
author 'Alexandre BOUDINE'
|
||||||
|
description 'Add privatization of wiki pages'
|
||||||
|
version '0.2.0'
|
||||||
|
url ''
|
||||||
|
author_url ''
|
||||||
|
|
||||||
|
#Add permissions
|
||||||
|
project_module :wiki do
|
||||||
|
permission :view_privates_wiki, {:wiki => [:show, :edit]}
|
||||||
|
permission :manage_privates_wiki, {:wiki => :change_privacy}, :require => :member
|
||||||
|
end
|
||||||
|
end
|
38
plugins/redmine_private_wiki/lib/wiki_patches/application_helper_patch.rb
Executable file
38
plugins/redmine_private_wiki/lib/wiki_patches/application_helper_patch.rb
Executable file
|
@ -0,0 +1,38 @@
|
||||||
|
require_dependency 'application_helper'
|
||||||
|
module WikiPatches
|
||||||
|
module ApplicationHelperPatch
|
||||||
|
def self.included(base)
|
||||||
|
base.class_eval do
|
||||||
|
|
||||||
|
#Override application's method to not display hidden wikis or to display it with the PRIVATE flag
|
||||||
|
def render_page_hierarchy_with_wiki_hidding(pages, node=nil, options={})
|
||||||
|
content = ''
|
||||||
|
if pages[node]
|
||||||
|
content << "<ul class=\"pages-hierarchy\">\n"
|
||||||
|
pages[node].each do |page|
|
||||||
|
if !page.private? then
|
||||||
|
content << "<li>"
|
||||||
|
content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title, :version => nil},
|
||||||
|
:title => (options[:timestamp] && page.updated_on ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil))
|
||||||
|
content << "\n" + render_page_hierarchy(pages, page.id, options) if pages[page.id]
|
||||||
|
content << "</li>\n"
|
||||||
|
elsif User.current.allowed_to?(:view_privates_wiki, @project) then
|
||||||
|
content << "<li>"
|
||||||
|
content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title, :version => nil},
|
||||||
|
:title => (options[:timestamp] && page.updated_on ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil))
|
||||||
|
content << " <span class='private_wiki_flag' style='display:inline-block;''>" + l(:private_flag) + " </span>"
|
||||||
|
content << "\n" + render_page_hierarchy(pages, page.id, options) if pages[page.id]
|
||||||
|
content << "</li>\n"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
content << "</ul>\n"
|
||||||
|
end
|
||||||
|
content.html_safe
|
||||||
|
end
|
||||||
|
|
||||||
|
alias_method_chain :render_page_hierarchy, :wiki_hidding
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
7
plugins/redmine_private_wiki/lib/wiki_patches/hook.rb
Executable file
7
plugins/redmine_private_wiki/lib/wiki_patches/hook.rb
Executable file
|
@ -0,0 +1,7 @@
|
||||||
|
module WikiPatches
|
||||||
|
class WikiPatchesHook < Redmine::Hook::ViewListener
|
||||||
|
#Add the content of private_wiki_management_views/_body_bottom.html.erb to general layout
|
||||||
|
render_on :view_layouts_base_body_bottom, :partial => 'private_wiki_management_views/body_bottom'
|
||||||
|
render_on :view_layouts_base_html_head, :partial => 'private_wiki_management_views/html_head'
|
||||||
|
end
|
||||||
|
end
|
28
plugins/redmine_private_wiki/lib/wiki_patches/wiki_controller_patch.rb
Executable file
28
plugins/redmine_private_wiki/lib/wiki_patches/wiki_controller_patch.rb
Executable file
|
@ -0,0 +1,28 @@
|
||||||
|
module WikiPatches
|
||||||
|
module WikiControllerPatch
|
||||||
|
def self.included(base)
|
||||||
|
base.send(:include, InstanceMethods)
|
||||||
|
base.class_eval do
|
||||||
|
unloadable
|
||||||
|
#Test :valide before :show action on wiki_controller
|
||||||
|
before_filter :validate, :only => [:show,:edit,:rename, :protect, :history, :diff, :annotate, :add_attachment, :destroy]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module InstanceMethods
|
||||||
|
def change_privacy
|
||||||
|
find_existing_page
|
||||||
|
#":private" attribute of wiki page is set to :private parameter
|
||||||
|
@page.update_attribute :private, params[:private]
|
||||||
|
|
||||||
|
#Then redirection to the previous page
|
||||||
|
redirect_to project_wiki_page_path(@project, @page.title)
|
||||||
|
end
|
||||||
|
|
||||||
|
def validate
|
||||||
|
#If page is private and user not allowed to see it, then deny_access
|
||||||
|
deny_access and return if @page.private? and !User.current.allowed_to?(:view_privates_wiki, @project)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
32
plugins/redmine_private_wiki/lib/wiki_patches/wiki_page_patch.rb
Executable file
32
plugins/redmine_private_wiki/lib/wiki_patches/wiki_page_patch.rb
Executable file
|
@ -0,0 +1,32 @@
|
||||||
|
module WikiPatches
|
||||||
|
module WikiPagePatch
|
||||||
|
def self.included(base)
|
||||||
|
base.send(:include, InstanceMethods)
|
||||||
|
base.class_eval do
|
||||||
|
unloadable
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
module InstanceMethods
|
||||||
|
#Check if the wiki page as any private parent
|
||||||
|
def has_private_parent?()
|
||||||
|
@res = self.parent_title
|
||||||
|
while @res != nil
|
||||||
|
if self.project.wiki.find_page(@res).private?
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
@res = self.project.wiki.find_page(@res).parent_title
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return false;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
121
plugins/redmine_private_wiki/test/functional/wiki_controller_patch_test.rb
Executable file
121
plugins/redmine_private_wiki/test/functional/wiki_controller_patch_test.rb
Executable file
|
@ -0,0 +1,121 @@
|
||||||
|
require File.expand_path('../../test_helper',__FILE__)
|
||||||
|
|
||||||
|
|
||||||
|
class WikiControllerPatchTest < ActionController::TestCase
|
||||||
|
|
||||||
|
fixtures :projects, :users, :roles, :members, :member_roles, :wikis, :wiki_pages, :wiki_contents
|
||||||
|
|
||||||
|
setup do
|
||||||
|
@controller = WikiController.new
|
||||||
|
|
||||||
|
@project = Project.find(1)
|
||||||
|
@project.enable_module! :wiki
|
||||||
|
@role = Role.find(1)
|
||||||
|
User.current = nil
|
||||||
|
@request.session[:user_id] = 2
|
||||||
|
@wiki = @project.wiki
|
||||||
|
@page = @wiki.find_page('Another_page')
|
||||||
|
@page.private = true
|
||||||
|
@page.save!
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'show_without_permission' do
|
||||||
|
#User not allowed to see the wiki page
|
||||||
|
get :show, :project_id => @project, :id => @page.title
|
||||||
|
|
||||||
|
assert_response 403
|
||||||
|
assert_select "span.private_wiki_flag", false, "There should not be a private flag"
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'show_with_permission' do
|
||||||
|
#User allowed to see the wiki page
|
||||||
|
@role.add_permission! :view_privates_wiki
|
||||||
|
get :show, :project_id => @project, :id => @page.title
|
||||||
|
|
||||||
|
assert_response :success
|
||||||
|
assert_select "span.private_wiki_flag", true, "There should be a private flag"
|
||||||
|
|
||||||
|
#User not allowed to change privacy of wiki
|
||||||
|
assert_select "a.icon-setpublic", false, "There should not be a privacy button"
|
||||||
|
|
||||||
|
#User allowed to change privacy of wiki
|
||||||
|
@role.add_permission! :manage_privates_wiki
|
||||||
|
get :show, :project_id => @project, :id => @page.title
|
||||||
|
|
||||||
|
assert_select "body" do |elements|
|
||||||
|
elements.each do |element|
|
||||||
|
Rails::logger.debug("FLAG")
|
||||||
|
Rails::logger.debug(element)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
assert_select "a.icon-setpublic", true, "There should be a privacy button"
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'edit_without_permission' do
|
||||||
|
#User not allowed to edit wiki
|
||||||
|
get :edit, :project_id => @project, :id => @page.title
|
||||||
|
|
||||||
|
assert_response 403
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'edit_with_permission' do
|
||||||
|
#User allowed to edit wiki
|
||||||
|
@role.add_permission! :view_privates_wiki
|
||||||
|
get :edit, :project_id => @project, :id => @page.title
|
||||||
|
|
||||||
|
assert_response :success
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'post_change_privacy_without_permission' do
|
||||||
|
#User not allowed to change privacy of wiki
|
||||||
|
post :change_privacy, :project_id => @project, :id => @page.title, :private => 0
|
||||||
|
|
||||||
|
assert_response 403
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'post_change_privacy_with_permission' do
|
||||||
|
#User allowed to change privacy of wiki
|
||||||
|
@role.add_permission! :manage_privates_wiki
|
||||||
|
post :change_privacy, :project_id => @project, :id => @page.title, :private => 0
|
||||||
|
|
||||||
|
assert_response :redirect
|
||||||
|
assert !@page.reload.private
|
||||||
|
end
|
||||||
|
|
||||||
|
#Next tests somehow fails, but actually works ...
|
||||||
|
#Probably due to the fact that elements are added directly through JS as text and not as elements.
|
||||||
|
test 'index_without_permission' do
|
||||||
|
#User not allowed to see the wiki page
|
||||||
|
get :index, :project_id => @project
|
||||||
|
|
||||||
|
assert_response :success
|
||||||
|
assert_select "li.hide_private", true, "There should be a private <li>"
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'index_with_permission' do
|
||||||
|
#User allowed to see the wiki page
|
||||||
|
@role.add_permission! :view_privates_wiki
|
||||||
|
get :index, :project_id => @project
|
||||||
|
|
||||||
|
assert_response :success
|
||||||
|
assert_select "span.private_wiki_flag", true, "There should be a private flag"
|
||||||
|
assert_select "li.hide_private", false, "There should not be a private <li>"
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'date_index_without_permission' do
|
||||||
|
#User not allowed to see the wiki page
|
||||||
|
get :date_index, :project_id => @project
|
||||||
|
|
||||||
|
assert_select "li.hide_private", true, "There should be a private <li>"
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'date_index_with_permission' do
|
||||||
|
#User allowed to see the wiki page
|
||||||
|
@role.add_permission! :view_privates_wiki
|
||||||
|
get :date_index, :project_id => @project
|
||||||
|
|
||||||
|
assert_select "span.private_wiki_flag", true, "There should be a private flag"
|
||||||
|
assert_select "li.hide_private", false, "There should not be a private <li>"
|
||||||
|
end
|
||||||
|
end
|
2
plugins/redmine_private_wiki/test/test_helper.rb
Executable file
2
plugins/redmine_private_wiki/test/test_helper.rb
Executable file
|
@ -0,0 +1,2 @@
|
||||||
|
# Load the Redmine helper
|
||||||
|
require File.expand_path(File.dirname(__FILE__) + '/../../../test/test_helper')
|
29
plugins/redmine_private_wiki/test/unit/wiki_page_patch_test.rb
Executable file
29
plugins/redmine_private_wiki/test/unit/wiki_page_patch_test.rb
Executable file
|
@ -0,0 +1,29 @@
|
||||||
|
require File.expand_path('../../test_helper',__FILE__)
|
||||||
|
|
||||||
|
class WikiPagePatchTest < ActiveSupport::TestCase
|
||||||
|
|
||||||
|
fixtures :projects, :wikis, :wiki_pages
|
||||||
|
|
||||||
|
setup do
|
||||||
|
@controller = WikiController.new
|
||||||
|
|
||||||
|
@project = Project.find(1)
|
||||||
|
@project.enable_module! :wiki
|
||||||
|
@wiki = @project.wiki
|
||||||
|
@page = @wiki.find_page('Another_page')
|
||||||
|
@page.private = true
|
||||||
|
@page.save!
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'has_private_parent_true' do
|
||||||
|
#A page that has a private parent
|
||||||
|
@page = @wiki.find_page('Child_1')
|
||||||
|
assert_equal true, @page.has_private_parent?
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'has_private_parent_false' do
|
||||||
|
#A page that doesn't have a private parent
|
||||||
|
assert_equal true, !@page.has_private_parent?
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue