Defect #35827 ยป 0001-Allow-to-delete-closed-and-archived-projects.patch
app/controllers/projects_controller.rb | ||
---|---|---|
26 | 26 |
:except => [:index, :autocomplete, :list, :new, :create, :copy] |
27 | 27 |
before_action :authorize, |
28 | 28 |
:except => [:index, :autocomplete, :list, :new, :create, :copy, |
29 |
:archive, :unarchive] |
|
29 |
:archive, :unarchive, |
|
30 |
:destroy |
|
31 |
] |
|
30 | 32 |
before_action :authorize_global, :only => [:new, :create] |
31 | 33 |
before_action :require_admin, :only => [:copy, :archive, :unarchive] |
32 | 34 |
accept_rss_auth :index |
lib/redmine.rb | ||
---|---|---|
90 | 90 |
map.permission :add_project, {:projects => [:new, :create]}, :require => :loggedin |
91 | 91 |
map.permission :edit_project, {:projects => [:settings, :edit, :update]}, :require => :member |
92 | 92 |
map.permission :close_project, {:projects => [:close, :reopen]}, :require => :member, :read => true |
93 |
map.permission :delete_project, {:projects => :destroy}, :require => :member |
|
93 |
map.permission :delete_project, {:projects => :destroy}, :require => :member, :read => true
|
|
94 | 94 |
map.permission :select_project_modules, {:projects => :modules}, :require => :member |
95 | 95 |
map.permission :view_members, {:members => [:index, :show]}, :public => true, :read => true |
96 | 96 |
map.permission :manage_members, {:projects => :settings, :members => [:index, :show, :new, :create, :edit, :update, :destroy, :autocomplete]}, :require => :member |
test/functional/projects_controller_test.rb | ||
---|---|---|
1110 | 1110 |
assert_nil Project.find_by_id(1) |
1111 | 1111 |
end |
1112 | 1112 | |
1113 |
def test_destroy_should_destroy_archived_project |
|
1114 |
set_tmp_attachments_directory |
|
1115 |
@request.session[:user_id] = 1 # admin |
|
1116 | ||
1117 |
Project.find_by_id(2).update_attribute :status, Project::STATUS_ARCHIVED |
|
1118 | ||
1119 |
assert_difference 'Project.count', -1 do |
|
1120 |
delete( |
|
1121 |
:destroy, |
|
1122 |
:params => { |
|
1123 |
:id => 2, |
|
1124 |
:confirm => 'onlinestore' |
|
1125 |
} |
|
1126 |
) |
|
1127 |
assert_redirected_to '/admin/projects' |
|
1128 |
end |
|
1129 |
assert_nil Project.find_by_id(2) |
|
1130 |
end |
|
1131 | ||
1113 | 1132 |
def test_destroy_with_normal_user_should_destroy |
1114 | 1133 |
set_tmp_attachments_directory |
1115 | 1134 |
@request.session[:user_id] = 2 # non-admin |
... | ... | |
1127 | 1146 |
assert_nil Project.find_by_id(2) |
1128 | 1147 |
end |
1129 | 1148 | |
1149 |
def test_destroy_with_normal_user_should_destroy_closed_project |
|
1150 |
set_tmp_attachments_directory |
|
1151 |
@request.session[:user_id] = 2 # non-admin |
|
1152 | ||
1153 |
Project.find_by_id(2).update_attribute :status, Project::STATUS_CLOSED |
|
1154 | ||
1155 |
assert_difference 'Project.count', -1 do |
|
1156 |
delete( |
|
1157 |
:destroy, |
|
1158 |
:params => { |
|
1159 |
:id => 2, |
|
1160 |
:confirm => 'onlinestore' |
|
1161 |
} |
|
1162 |
) |
|
1163 |
assert_redirected_to '/projects' |
|
1164 |
end |
|
1165 |
assert_nil Project.find_by_id(2) |
|
1166 |
end |
|
1167 | ||
1130 | 1168 |
def test_destroy_with_normal_user_should_not_destroy_with_subprojects |
1131 | 1169 |
set_tmp_attachments_directory |
1132 | 1170 |
@request.session[:user_id] = 2 # non-admin |