##// END OF EJS Templates
Adds 'Delete wiki pages attachments' permission....
Jean-Philippe Lang -
r1936:ccbe48d77911
parent child
Show More
@@ -0,0 +1,13
1 class AddDeleteWikiPagesAttachmentsPermission < ActiveRecord::Migration
2 def self.up
3 Role.find(:all).each do |r|
4 r.add_permission!(:delete_wiki_pages_attachments) if r.has_permission?(:edit_wiki_pages)
5 end
6 end
7
8 def self.down
9 Role.find(:all).each do |r|
10 r.remove_permission!(:delete_wiki_pages_attachments)
11 end
12 end
13 end
@@ -1,151 +1,152
1 1 require 'redmine/access_control'
2 2 require 'redmine/menu_manager'
3 3 require 'redmine/activity'
4 4 require 'redmine/mime_type'
5 5 require 'redmine/core_ext'
6 6 require 'redmine/themes'
7 7 require 'redmine/hook'
8 8 require 'redmine/plugin'
9 9
10 10 begin
11 11 require_library_or_gem 'RMagick' unless Object.const_defined?(:Magick)
12 12 rescue LoadError
13 13 # RMagick is not available
14 14 end
15 15
16 16 REDMINE_SUPPORTED_SCM = %w( Subversion Darcs Mercurial Cvs Bazaar Git Filesystem )
17 17
18 18 # Permissions
19 19 Redmine::AccessControl.map do |map|
20 20 map.permission :view_project, {:projects => [:show, :activity]}, :public => true
21 21 map.permission :search_project, {:search => :index}, :public => true
22 22 map.permission :edit_project, {:projects => [:settings, :edit]}, :require => :member
23 23 map.permission :select_project_modules, {:projects => :modules}, :require => :member
24 24 map.permission :manage_members, {:projects => :settings, :members => [:new, :edit, :destroy]}, :require => :member
25 25 map.permission :manage_versions, {:projects => [:settings, :add_version], :versions => [:edit, :destroy]}, :require => :member
26 26
27 27 map.project_module :issue_tracking do |map|
28 28 # Issue categories
29 29 map.permission :manage_categories, {:projects => [:settings, :add_issue_category], :issue_categories => [:edit, :destroy]}, :require => :member
30 30 # Issues
31 31 map.permission :view_issues, {:projects => [:changelog, :roadmap],
32 32 :issues => [:index, :changes, :show, :context_menu],
33 33 :versions => [:show, :status_by],
34 34 :queries => :index,
35 35 :reports => :issue_report}, :public => true
36 36 map.permission :add_issues, {:issues => :new}
37 37 map.permission :edit_issues, {:issues => [:edit, :reply, :bulk_edit, :destroy_attachment]}
38 38 map.permission :manage_issue_relations, {:issue_relations => [:new, :destroy]}
39 39 map.permission :add_issue_notes, {:issues => [:edit, :reply]}
40 40 map.permission :edit_issue_notes, {:journals => :edit}, :require => :loggedin
41 41 map.permission :edit_own_issue_notes, {:journals => :edit}, :require => :loggedin
42 42 map.permission :move_issues, {:issues => :move}, :require => :loggedin
43 43 map.permission :delete_issues, {:issues => :destroy}, :require => :member
44 44 # Queries
45 45 map.permission :manage_public_queries, {:queries => [:new, :edit, :destroy]}, :require => :member
46 46 map.permission :save_queries, {:queries => [:new, :edit, :destroy]}, :require => :loggedin
47 47 # Gantt & calendar
48 48 map.permission :view_gantt, :issues => :gantt
49 49 map.permission :view_calendar, :issues => :calendar
50 50 # Watchers
51 51 map.permission :view_issue_watchers, {}
52 52 map.permission :add_issue_watchers, {:watchers => :new}
53 53 end
54 54
55 55 map.project_module :time_tracking do |map|
56 56 map.permission :log_time, {:timelog => :edit}, :require => :loggedin
57 57 map.permission :view_time_entries, :timelog => [:details, :report]
58 58 map.permission :edit_time_entries, {:timelog => [:edit, :destroy]}, :require => :member
59 59 map.permission :edit_own_time_entries, {:timelog => [:edit, :destroy]}, :require => :loggedin
60 60 end
61 61
62 62 map.project_module :news do |map|
63 63 map.permission :manage_news, {:news => [:new, :edit, :destroy, :destroy_comment]}, :require => :member
64 64 map.permission :view_news, {:news => [:index, :show]}, :public => true
65 65 map.permission :comment_news, {:news => :add_comment}
66 66 end
67 67
68 68 map.project_module :documents do |map|
69 69 map.permission :manage_documents, {:documents => [:new, :edit, :destroy, :add_attachment, :destroy_attachment]}, :require => :loggedin
70 70 map.permission :view_documents, :documents => [:index, :show, :download]
71 71 end
72 72
73 73 map.project_module :files do |map|
74 74 map.permission :manage_files, {:projects => :add_file, :versions => :destroy_file}, :require => :loggedin
75 75 map.permission :view_files, :projects => :list_files, :versions => :download
76 76 end
77 77
78 78 map.project_module :wiki do |map|
79 79 map.permission :manage_wiki, {:wikis => [:edit, :destroy]}, :require => :member
80 80 map.permission :rename_wiki_pages, {:wiki => :rename}, :require => :member
81 81 map.permission :delete_wiki_pages, {:wiki => :destroy}, :require => :member
82 82 map.permission :view_wiki_pages, :wiki => [:index, :special]
83 83 map.permission :view_wiki_edits, :wiki => [:history, :diff, :annotate]
84 map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment, :destroy_attachment]
84 map.permission :edit_wiki_pages, :wiki => [:edit, :preview, :add_attachment]
85 map.permission :delete_wiki_pages_attachments, :wiki => :destroy_attachment
85 86 map.permission :protect_wiki_pages, {:wiki => :protect}, :require => :member
86 87 end
87 88
88 89 map.project_module :repository do |map|
89 90 map.permission :manage_repository, {:repositories => [:edit, :destroy]}, :require => :member
90 91 map.permission :browse_repository, :repositories => [:show, :browse, :entry, :annotate, :changes, :diff, :stats, :graph]
91 92 map.permission :view_changesets, :repositories => [:show, :revisions, :revision]
92 93 map.permission :commit_access, {}
93 94 end
94 95
95 96 map.project_module :boards do |map|
96 97 map.permission :manage_boards, {:boards => [:new, :edit, :destroy]}, :require => :member
97 98 map.permission :view_messages, {:boards => [:index, :show], :messages => [:show]}, :public => true
98 99 map.permission :add_messages, {:messages => [:new, :reply, :quote]}
99 100 map.permission :edit_messages, {:messages => :edit}, :require => :member
100 101 map.permission :delete_messages, {:messages => :destroy}, :require => :member
101 102 end
102 103 end
103 104
104 105 Redmine::MenuManager.map :top_menu do |menu|
105 106 menu.push :home, :home_path, :html => { :class => 'home' }
106 107 menu.push :my_page, { :controller => 'my', :action => 'page' }, :html => { :class => 'mypage' }, :if => Proc.new { User.current.logged? }
107 108 menu.push :projects, { :controller => 'projects', :action => 'index' }, :caption => :label_project_plural, :html => { :class => 'projects' }
108 109 menu.push :administration, { :controller => 'admin', :action => 'index' }, :html => { :class => 'admin' }, :if => Proc.new { User.current.admin? }, :last => true
109 110 menu.push :help, Redmine::Info.help_url, :html => { :class => 'help' }, :last => true
110 111 end
111 112
112 113 Redmine::MenuManager.map :account_menu do |menu|
113 114 menu.push :login, :signin_path, :html => { :class => 'login' }, :if => Proc.new { !User.current.logged? }
114 115 menu.push :register, { :controller => 'account', :action => 'register' }, :html => { :class => 'register' }, :if => Proc.new { !User.current.logged? && Setting.self_registration? }
115 116 menu.push :my_account, { :controller => 'my', :action => 'account' }, :html => { :class => 'myaccount' }, :if => Proc.new { User.current.logged? }
116 117 menu.push :logout, :signout_path, :html => { :class => 'logout' }, :if => Proc.new { User.current.logged? }
117 118 end
118 119
119 120 Redmine::MenuManager.map :application_menu do |menu|
120 121 # Empty
121 122 end
122 123
123 124 Redmine::MenuManager.map :project_menu do |menu|
124 125 menu.push :overview, { :controller => 'projects', :action => 'show' }
125 126 menu.push :activity, { :controller => 'projects', :action => 'activity' }
126 127 menu.push :roadmap, { :controller => 'projects', :action => 'roadmap' },
127 128 :if => Proc.new { |p| p.versions.any? }
128 129 menu.push :issues, { :controller => 'issues', :action => 'index' }, :param => :project_id, :caption => :label_issue_plural
129 130 menu.push :new_issue, { :controller => 'issues', :action => 'new' }, :param => :project_id, :caption => :label_issue_new,
130 131 :html => { :accesskey => Redmine::AccessKeys.key_for(:new_issue) }
131 132 menu.push :news, { :controller => 'news', :action => 'index' }, :param => :project_id, :caption => :label_news_plural
132 133 menu.push :documents, { :controller => 'documents', :action => 'index' }, :param => :project_id, :caption => :label_document_plural
133 134 menu.push :wiki, { :controller => 'wiki', :action => 'index', :page => nil },
134 135 :if => Proc.new { |p| p.wiki && !p.wiki.new_record? }
135 136 menu.push :boards, { :controller => 'boards', :action => 'index', :id => nil }, :param => :project_id,
136 137 :if => Proc.new { |p| p.boards.any? }, :caption => :label_board_plural
137 138 menu.push :files, { :controller => 'projects', :action => 'list_files' }, :caption => :label_attachment_plural
138 139 menu.push :repository, { :controller => 'repositories', :action => 'show' },
139 140 :if => Proc.new { |p| p.repository && !p.repository.new_record? }
140 141 menu.push :settings, { :controller => 'projects', :action => 'settings' }, :last => true
141 142 end
142 143
143 144 Redmine::Activity.map do |activity|
144 145 activity.register :issues, :class_name => %w(Issue Journal)
145 146 activity.register :changesets
146 147 activity.register :news
147 148 activity.register :documents, :class_name => %w(Document Attachment)
148 149 activity.register :files, :class_name => 'Attachment'
149 150 activity.register :wiki_edits, :class_name => 'WikiContent::Version', :default => false
150 151 activity.register :messages, :default => false
151 152 end
@@ -1,172 +1,173
1 1 ---
2 2 roles_001:
3 3 name: Manager
4 4 id: 1
5 5 builtin: 0
6 6 permissions: |
7 7 ---
8 8 - :edit_project
9 9 - :manage_members
10 10 - :manage_versions
11 11 - :manage_categories
12 12 - :add_issues
13 13 - :edit_issues
14 14 - :manage_issue_relations
15 15 - :add_issue_notes
16 16 - :move_issues
17 17 - :delete_issues
18 18 - :view_issue_watchers
19 19 - :add_issue_watchers
20 20 - :manage_public_queries
21 21 - :save_queries
22 22 - :view_gantt
23 23 - :view_calendar
24 24 - :log_time
25 25 - :view_time_entries
26 26 - :edit_time_entries
27 27 - :delete_time_entries
28 28 - :manage_news
29 29 - :comment_news
30 30 - :view_documents
31 31 - :manage_documents
32 32 - :view_wiki_pages
33 33 - :view_wiki_edits
34 34 - :edit_wiki_pages
35 - :delete_wiki_pages_attachments
35 36 - :protect_wiki_pages
36 37 - :delete_wiki_pages
37 38 - :rename_wiki_pages
38 39 - :add_messages
39 40 - :edit_messages
40 41 - :delete_messages
41 42 - :manage_boards
42 43 - :view_files
43 44 - :manage_files
44 45 - :browse_repository
45 46 - :view_changesets
46 47
47 48 position: 1
48 49 roles_002:
49 50 name: Developer
50 51 id: 2
51 52 builtin: 0
52 53 permissions: |
53 54 ---
54 55 - :edit_project
55 56 - :manage_members
56 57 - :manage_versions
57 58 - :manage_categories
58 59 - :add_issues
59 60 - :edit_issues
60 61 - :manage_issue_relations
61 62 - :add_issue_notes
62 63 - :move_issues
63 64 - :delete_issues
64 65 - :view_issue_watchers
65 66 - :save_queries
66 67 - :view_gantt
67 68 - :view_calendar
68 69 - :log_time
69 70 - :view_time_entries
70 71 - :edit_own_time_entries
71 72 - :manage_news
72 73 - :comment_news
73 74 - :view_documents
74 75 - :manage_documents
75 76 - :view_wiki_pages
76 77 - :view_wiki_edits
77 78 - :edit_wiki_pages
78 79 - :protect_wiki_pages
79 80 - :delete_wiki_pages
80 81 - :add_messages
81 82 - :manage_boards
82 83 - :view_files
83 84 - :manage_files
84 85 - :browse_repository
85 86 - :view_changesets
86 87
87 88 position: 2
88 89 roles_003:
89 90 name: Reporter
90 91 id: 3
91 92 builtin: 0
92 93 permissions: |
93 94 ---
94 95 - :edit_project
95 96 - :manage_members
96 97 - :manage_versions
97 98 - :manage_categories
98 99 - :add_issues
99 100 - :edit_issues
100 101 - :manage_issue_relations
101 102 - :add_issue_notes
102 103 - :move_issues
103 104 - :view_issue_watchers
104 105 - :save_queries
105 106 - :view_gantt
106 107 - :view_calendar
107 108 - :log_time
108 109 - :view_time_entries
109 110 - :manage_news
110 111 - :comment_news
111 112 - :view_documents
112 113 - :manage_documents
113 114 - :view_wiki_pages
114 115 - :view_wiki_edits
115 116 - :edit_wiki_pages
116 117 - :delete_wiki_pages
117 118 - :add_messages
118 119 - :manage_boards
119 120 - :view_files
120 121 - :manage_files
121 122 - :browse_repository
122 123 - :view_changesets
123 124
124 125 position: 3
125 126 roles_004:
126 127 name: Non member
127 128 id: 4
128 129 builtin: 1
129 130 permissions: |
130 131 ---
131 132 - :add_issues
132 133 - :edit_issues
133 134 - :manage_issue_relations
134 135 - :add_issue_notes
135 136 - :move_issues
136 137 - :save_queries
137 138 - :view_gantt
138 139 - :view_calendar
139 140 - :log_time
140 141 - :view_time_entries
141 142 - :comment_news
142 143 - :view_documents
143 144 - :manage_documents
144 145 - :view_wiki_pages
145 146 - :view_wiki_edits
146 147 - :edit_wiki_pages
147 148 - :add_messages
148 149 - :view_files
149 150 - :manage_files
150 151 - :browse_repository
151 152 - :view_changesets
152 153
153 154 position: 4
154 155 roles_005:
155 156 name: Anonymous
156 157 id: 5
157 158 builtin: 2
158 159 permissions: |
159 160 ---
160 161 - :add_issue_notes
161 162 - :view_gantt
162 163 - :view_calendar
163 164 - :view_time_entries
164 165 - :view_documents
165 166 - :view_wiki_pages
166 167 - :view_wiki_edits
167 168 - :view_files
168 169 - :browse_repository
169 170 - :view_changesets
170 171
171 172 position: 5
172 173 No newline at end of file
@@ -1,254 +1,261
1 1 # redMine - project management software
2 2 # Copyright (C) 2006-2007 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.dirname(__FILE__) + '/../test_helper'
19 19 require 'wiki_controller'
20 20
21 21 # Re-raise errors caught by the controller.
22 22 class WikiController; def rescue_action(e) raise e end; end
23 23
24 24 class WikiControllerTest < Test::Unit::TestCase
25 25 fixtures :projects, :users, :roles, :members, :enabled_modules, :wikis, :wiki_pages, :wiki_contents, :wiki_content_versions, :attachments
26 26
27 27 def setup
28 28 @controller = WikiController.new
29 29 @request = ActionController::TestRequest.new
30 30 @response = ActionController::TestResponse.new
31 31 User.current = nil
32 32 end
33 33
34 34 def test_show_start_page
35 35 get :index, :id => 'ecookbook'
36 36 assert_response :success
37 37 assert_template 'show'
38 38 assert_tag :tag => 'h1', :content => /CookBook documentation/
39 39
40 40 # child_pages macro
41 41 assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
42 42 :child => { :tag => 'li',
43 43 :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/Page_with_an_inline_image' },
44 44 :content => 'Page with an inline image' } }
45 45 end
46 46
47 47 def test_show_page_with_name
48 48 get :index, :id => 1, :page => 'Another_page'
49 49 assert_response :success
50 50 assert_template 'show'
51 51 assert_tag :tag => 'h1', :content => /Another page/
52 52 # Included page with an inline image
53 53 assert_tag :tag => 'p', :content => /This is an inline image/
54 54 assert_tag :tag => 'img', :attributes => { :src => '/attachments/download/3',
55 55 :alt => 'This is a logo' }
56 56 end
57 57
58 58 def test_show_unexistent_page_without_edit_right
59 59 get :index, :id => 1, :page => 'Unexistent page'
60 60 assert_response 404
61 61 end
62 62
63 63 def test_show_unexistent_page_with_edit_right
64 64 @request.session[:user_id] = 2
65 65 get :index, :id => 1, :page => 'Unexistent page'
66 66 assert_response :success
67 67 assert_template 'edit'
68 68 end
69 69
70 70 def test_create_page
71 71 @request.session[:user_id] = 2
72 72 post :edit, :id => 1,
73 73 :page => 'New page',
74 74 :content => {:comments => 'Created the page',
75 75 :text => "h1. New page\n\nThis is a new page",
76 76 :version => 0}
77 77 assert_redirected_to 'wiki/ecookbook/New_page'
78 78 page = Project.find(1).wiki.find_page('New page')
79 79 assert !page.new_record?
80 80 assert_not_nil page.content
81 81 assert_equal 'Created the page', page.content.comments
82 82 end
83 83
84 84 def test_preview
85 85 @request.session[:user_id] = 2
86 86 xhr :post, :preview, :id => 1, :page => 'CookBook_documentation',
87 87 :content => { :comments => '',
88 88 :text => 'this is a *previewed text*',
89 89 :version => 3 }
90 90 assert_response :success
91 91 assert_template 'common/_preview'
92 92 assert_tag :tag => 'strong', :content => /previewed text/
93 93 end
94 94
95 95 def test_preview_new_page
96 96 @request.session[:user_id] = 2
97 97 xhr :post, :preview, :id => 1, :page => 'New page',
98 98 :content => { :text => 'h1. New page',
99 99 :comments => '',
100 100 :version => 0 }
101 101 assert_response :success
102 102 assert_template 'common/_preview'
103 103 assert_tag :tag => 'h1', :content => /New page/
104 104 end
105 105
106 106 def test_history
107 107 get :history, :id => 1, :page => 'CookBook_documentation'
108 108 assert_response :success
109 109 assert_template 'history'
110 110 assert_not_nil assigns(:versions)
111 111 assert_equal 3, assigns(:versions).size
112 112 assert_select "input[type=submit][name=commit]"
113 113 end
114 114
115 115 def test_history_with_one_version
116 116 get :history, :id => 1, :page => 'Another_page'
117 117 assert_response :success
118 118 assert_template 'history'
119 119 assert_not_nil assigns(:versions)
120 120 assert_equal 1, assigns(:versions).size
121 121 assert_select "input[type=submit][name=commit]", false
122 122 end
123 123
124 124 def test_diff
125 125 get :diff, :id => 1, :page => 'CookBook_documentation', :version => 2, :version_from => 1
126 126 assert_response :success
127 127 assert_template 'diff'
128 128 assert_tag :tag => 'span', :attributes => { :class => 'diff_in'},
129 129 :content => /updated/
130 130 end
131 131
132 132 def test_annotate
133 133 get :annotate, :id => 1, :page => 'CookBook_documentation', :version => 2
134 134 assert_response :success
135 135 assert_template 'annotate'
136 136 # Line 1
137 137 assert_tag :tag => 'tr', :child => { :tag => 'th', :attributes => {:class => 'line-num'}, :content => '1' },
138 138 :child => { :tag => 'td', :attributes => {:class => 'author'}, :content => /John Smith/ },
139 139 :child => { :tag => 'td', :content => /h1\. CookBook documentation/ }
140 140 # Line 2
141 141 assert_tag :tag => 'tr', :child => { :tag => 'th', :attributes => {:class => 'line-num'}, :content => '2' },
142 142 :child => { :tag => 'td', :attributes => {:class => 'author'}, :content => /redMine Admin/ },
143 143 :child => { :tag => 'td', :content => /Some updated \[\[documentation\]\] here/ }
144 144 end
145 145
146 146 def test_rename_with_redirect
147 147 @request.session[:user_id] = 2
148 148 post :rename, :id => 1, :page => 'Another_page',
149 149 :wiki_page => { :title => 'Another renamed page',
150 150 :redirect_existing_links => 1 }
151 151 assert_redirected_to 'wiki/ecookbook/Another_renamed_page'
152 152 wiki = Project.find(1).wiki
153 153 # Check redirects
154 154 assert_not_nil wiki.find_page('Another page')
155 155 assert_nil wiki.find_page('Another page', :with_redirect => false)
156 156 end
157 157
158 158 def test_rename_without_redirect
159 159 @request.session[:user_id] = 2
160 160 post :rename, :id => 1, :page => 'Another_page',
161 161 :wiki_page => { :title => 'Another renamed page',
162 162 :redirect_existing_links => "0" }
163 163 assert_redirected_to 'wiki/ecookbook/Another_renamed_page'
164 164 wiki = Project.find(1).wiki
165 165 # Check that there's no redirects
166 166 assert_nil wiki.find_page('Another page')
167 167 end
168 168
169 169 def test_destroy
170 170 @request.session[:user_id] = 2
171 171 post :destroy, :id => 1, :page => 'CookBook_documentation'
172 172 assert_redirected_to 'wiki/ecookbook/Page_index/special'
173 173 end
174 174
175 175 def test_page_index
176 176 get :special, :id => 'ecookbook', :page => 'Page_index'
177 177 assert_response :success
178 178 assert_template 'special_page_index'
179 179 pages = assigns(:pages)
180 180 assert_not_nil pages
181 181 assert_equal Project.find(1).wiki.pages.size, pages.size
182 182
183 183 assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
184 184 :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/CookBook_documentation' },
185 185 :content => 'CookBook documentation' },
186 186 :child => { :tag => 'ul',
187 187 :child => { :tag => 'li',
188 188 :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/Page_with_an_inline_image' },
189 189 :content => 'Page with an inline image' } } } },
190 190 :child => { :tag => 'li', :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/Another_page' },
191 191 :content => 'Another page' } }
192 192 end
193 193
194 194 def test_not_found
195 195 get :index, :id => 999
196 196 assert_response 404
197 197 end
198 198
199 199 def test_protect_page
200 200 page = WikiPage.find_by_wiki_id_and_title(1, 'Another_page')
201 201 assert !page.protected?
202 202 @request.session[:user_id] = 2
203 203 post :protect, :id => 1, :page => page.title, :protected => '1'
204 204 assert_redirected_to 'wiki/ecookbook/Another_page'
205 205 assert page.reload.protected?
206 206 end
207 207
208 208 def test_unprotect_page
209 209 page = WikiPage.find_by_wiki_id_and_title(1, 'CookBook_documentation')
210 210 assert page.protected?
211 211 @request.session[:user_id] = 2
212 212 post :protect, :id => 1, :page => page.title, :protected => '0'
213 213 assert_redirected_to 'wiki/ecookbook'
214 214 assert !page.reload.protected?
215 215 end
216 216
217 217 def test_show_page_with_edit_link
218 218 @request.session[:user_id] = 2
219 219 get :index, :id => 1
220 220 assert_response :success
221 221 assert_template 'show'
222 222 assert_tag :tag => 'a', :attributes => { :href => '/wiki/1/CookBook_documentation/edit' }
223 223 end
224 224
225 225 def test_show_page_without_edit_link
226 226 @request.session[:user_id] = 4
227 227 get :index, :id => 1
228 228 assert_response :success
229 229 assert_template 'show'
230 230 assert_no_tag :tag => 'a', :attributes => { :href => '/wiki/1/CookBook_documentation/edit' }
231 231 end
232 232
233 233 def test_edit_unprotected_page
234 234 # Non members can edit unprotected wiki pages
235 235 @request.session[:user_id] = 4
236 236 get :edit, :id => 1, :page => 'Another_page'
237 237 assert_response :success
238 238 assert_template 'edit'
239 239 end
240 240
241 241 def test_edit_protected_page_by_nonmember
242 242 # Non members can't edit protected wiki pages
243 243 @request.session[:user_id] = 4
244 244 get :edit, :id => 1, :page => 'CookBook_documentation'
245 245 assert_response 403
246 246 end
247 247
248 248 def test_edit_protected_page_by_member
249 249 @request.session[:user_id] = 2
250 250 get :edit, :id => 1, :page => 'CookBook_documentation'
251 251 assert_response :success
252 252 assert_template 'edit'
253 253 end
254
255 def test_destroy_attachment
256 @request.session[:user_id] = 2
257 assert_difference 'Attachment.count', -1 do
258 post :destroy_attachment, :id => 1, :page => 'Page_with_an_inline_image', :attachment_id => 3
259 end
260 end
254 261 end
General Comments 0
You need to be logged in to leave comments. Login now