Added the ability to archive projects:

* Only administrators can archive/unarchive projects.
* Once archived, the project is visible on the admin project listing only. It doesn't show up anywhere else in the app. Subprojects are also archived.
* Archive/unarchive preserve everything on the project (issues, members, ...).
* A subproject can not be unarchived if its parent project is archived.

git-svn-id: http://redmine.rubyforge.org/svn/trunk@549 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Jean-Philippe Lang committed 2007-05-27 17:42:04 +00:00
1 parent 70374d084e
commit 413247ee5b
35 files changed
+275 -38

No files matched your search

+16 -1
View File
@@ -1,5 +1,5 @@
# redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang
# Copyright (C) 2006-2007 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
@@ -125,4 +125,19 @@ class ProjectsControllerTest < Test::Unit::TestCase
assert_template 'activity'
assert_not_nil assigns(:events_by_day)
end
def test_archive
@request.session[:user_id] = 1 # admin
post :archive, :id => 1
assert_redirected_to 'admin/projects'
assert !Project.find(1).active?
end
def test_unarchive
@request.session[:user_id] = 1 # admin
Project.find(1).archive
post :unarchive, :id => 1
assert_redirected_to 'admin/projects'
assert Project.find(1).active?
end
end
+44
View File
@@ -0,0 +1,44 @@
# redMine - project management software
# Copyright (C) 2006-2007 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"
class ProjectsTest < ActionController::IntegrationTest
fixtures :projects, :users, :members
def test_archive_project
subproject = Project.find(1).children.first
log_user("admin", "admin")
get "admin/projects"
assert_response :success
assert_template "admin/projects"
post "projects/archive", :id => 1
assert_redirected_to "admin/projects"
assert !Project.find(1).active?
get "projects/show", :id => 1
assert_response :missing
get "projects/show", :id => subproject.id
assert_response :missing
post "projects/unarchive", :id => 1
assert_redirected_to "admin/projects"
assert Project.find(1).active?
get "projects/show", :id => 1
assert_response :success
end
end
+29 -1
View File
@@ -1,5 +1,5 @@
# redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang
# Copyright (C) 2006-2007 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
@@ -51,6 +51,34 @@ class ProjectTest < Test::Unit::TestCase
assert_equal true, public_projects[0].is_public?
end
def test_archive
user = @ecookbook.members.first.user
@ecookbook.archive
@ecookbook.reload
assert !@ecookbook.active?
assert !user.projects.include?(@ecookbook)
# Subproject are also archived
assert !@ecookbook.children.empty?
assert @ecookbook.active_children.empty?
end
def test_unarchive
user = @ecookbook.members.first.user
@ecookbook.archive
# A subproject of an archived project can not be unarchived
assert !@ecookbook_sub1.unarchive
# Unarchive project
assert @ecookbook.unarchive
@ecookbook.reload
assert @ecookbook.active?
assert user.projects.include?(@ecookbook)
# Subproject can now be unarchived
@ecookbook_sub1.reload
assert @ecookbook_sub1.unarchive
end
def test_destroy
@ecookbook.destroy
assert_raise(ActiveRecord::RecordNotFound) { Project.find(@ecookbook.id) }