|
|
@@ -1,16 +1,16 @@ |
|
|
|
# Redmine - project management software |
|
|
|
# Copyright (C) 2006-2008 Jean-Philippe Lang |
|
|
|
# Copyright (C) 2006-2011 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. |
|
|
@@ -33,13 +33,13 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
@request.session[:user_id] = nil |
|
|
|
Setting.default_language = 'en' |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_index |
|
|
|
get :index |
|
|
|
assert_response :success |
|
|
|
assert_template 'index' |
|
|
|
assert_not_nil assigns(:projects) |
|
|
|
|
|
|
|
|
|
|
|
assert_tag :ul, :child => {:tag => 'li', |
|
|
|
:descendant => {:tag => 'a', :content => 'eCookbook'}, |
|
|
|
:child => { :tag => 'ul', |
|
|
@@ -48,10 +48,10 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
assert_no_tag :a, :content => /Private child of eCookbook/ |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_index_atom |
|
|
|
get :index, :format => 'atom' |
|
|
|
assert_response :success |
|
|
@@ -59,7 +59,7 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_select 'feed>title', :text => 'Redmine: Latest projects' |
|
|
|
assert_select 'feed>entry', :count => Project.count(:conditions => Project.visible_condition(User.current)) |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
context "#index" do |
|
|
|
context "by non-admin user with view_time_entries permission" do |
|
|
|
setup do |
|
|
@@ -71,7 +71,7 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_tag :a, :attributes => {:href => '/time_entries'} |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
context "by non-admin user without view_time_entries permission" do |
|
|
|
setup do |
|
|
|
Role.find(2).remove_permission! :view_time_entries |
|
|
@@ -84,15 +84,15 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_template 'index' |
|
|
|
assert_no_tag :a, :attributes => {:href => '/time_entries'} |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
context "#new" do |
|
|
|
context "by admin user" do |
|
|
|
setup do |
|
|
|
@request.session[:user_id] = 1 |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
should "accept get" do |
|
|
|
get :new |
|
|
|
assert_response :success |
|
|
@@ -121,7 +121,7 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
Role.find(1).add_permission! :add_subprojects |
|
|
|
@request.session[:user_id] = 2 |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
should "accept get" do |
|
|
|
get :new, :parent_id => 'ecookbook' |
|
|
|
assert_response :success |
|
|
@@ -134,7 +134,7 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
:child => {:tag => 'option', :attributes => {:value => ''}} |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
end |
|
|
|
|
|
|
|
context "POST :create" do |
|
|
@@ -142,11 +142,11 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
setup do |
|
|
|
@request.session[:user_id] = 1 |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
should "create a new project" do |
|
|
|
post :create, |
|
|
|
:project => { |
|
|
|
:name => "blog", |
|
|
|
:name => "blog", |
|
|
|
:description => "weblog", |
|
|
|
:homepage => 'http://weblog', |
|
|
|
:identifier => "blog", |
|
|
@@ -158,11 +158,11 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
:enabled_module_names => ['issue_tracking', 'news', 'repository'] |
|
|
|
} |
|
|
|
assert_redirected_to '/projects/blog/settings' |
|
|
|
|
|
|
|
|
|
|
|
project = Project.find_by_name('blog') |
|
|
|
assert_kind_of Project, project |
|
|
|
assert project.active? |
|
|
|
assert_equal 'weblog', project.description |
|
|
|
assert_equal 'weblog', project.description |
|
|
|
assert_equal 'http://weblog', project.homepage |
|
|
|
assert_equal true, project.is_public? |
|
|
|
assert_nil project.parent |
|
|
@@ -171,9 +171,9 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort |
|
|
|
assert project.issue_custom_fields.include?(IssueCustomField.find(9)) |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
should "create a new subproject" do |
|
|
|
post :create, :project => { :name => "blog", |
|
|
|
post :create, :project => { :name => "blog", |
|
|
|
:description => "weblog", |
|
|
|
:identifier => "blog", |
|
|
|
:is_public => 1, |
|
|
@@ -181,21 +181,21 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
:parent_id => 1 |
|
|
|
} |
|
|
|
assert_redirected_to '/projects/blog/settings' |
|
|
|
|
|
|
|
|
|
|
|
project = Project.find_by_name('blog') |
|
|
|
assert_kind_of Project, project |
|
|
|
assert_equal Project.find(1), project.parent |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
context "by non-admin user with add_project permission" do |
|
|
|
setup do |
|
|
|
Role.non_member.add_permission! :add_project |
|
|
|
@request.session[:user_id] = 9 |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
should "accept create a Project" do |
|
|
|
post :create, :project => { :name => "blog", |
|
|
|
post :create, :project => { :name => "blog", |
|
|
|
:description => "weblog", |
|
|
|
:identifier => "blog", |
|
|
|
:is_public => 1, |
|
|
@@ -203,24 +203,24 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
:tracker_ids => ['1', '3'], |
|
|
|
:enabled_module_names => ['issue_tracking', 'news', 'repository'] |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
assert_redirected_to '/projects/blog/settings' |
|
|
|
|
|
|
|
|
|
|
|
project = Project.find_by_name('blog') |
|
|
|
assert_kind_of Project, project |
|
|
|
assert_equal 'weblog', project.description |
|
|
|
assert_equal 'weblog', project.description |
|
|
|
assert_equal true, project.is_public? |
|
|
|
assert_equal [1, 3], project.trackers.map(&:id).sort |
|
|
|
assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort |
|
|
|
|
|
|
|
|
|
|
|
# User should be added as a project member |
|
|
|
assert User.find(9).member_of?(project) |
|
|
|
assert_equal 1, project.members.size |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
should "fail with parent_id" do |
|
|
|
assert_no_difference 'Project.count' do |
|
|
|
post :create, :project => { :name => "blog", |
|
|
|
post :create, :project => { :name => "blog", |
|
|
|
:description => "weblog", |
|
|
|
:identifier => "blog", |
|
|
|
:is_public => 1, |
|
|
@@ -234,16 +234,16 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_not_nil project.errors.on(:parent_id) |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
context "by non-admin user with add_subprojects permission" do |
|
|
|
setup do |
|
|
|
Role.find(1).remove_permission! :add_project |
|
|
|
Role.find(1).add_permission! :add_subprojects |
|
|
|
@request.session[:user_id] = 2 |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
should "create a project with a parent_id" do |
|
|
|
post :create, :project => { :name => "blog", |
|
|
|
post :create, :project => { :name => "blog", |
|
|
|
:description => "weblog", |
|
|
|
:identifier => "blog", |
|
|
|
:is_public => 1, |
|
|
@@ -253,10 +253,10 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_redirected_to '/projects/blog/settings' |
|
|
|
project = Project.find_by_name('blog') |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
should "fail without parent_id" do |
|
|
|
assert_no_difference 'Project.count' do |
|
|
|
post :create, :project => { :name => "blog", |
|
|
|
post :create, :project => { :name => "blog", |
|
|
|
:description => "weblog", |
|
|
|
:identifier => "blog", |
|
|
|
:is_public => 1, |
|
|
@@ -268,11 +268,11 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_kind_of Project, project |
|
|
|
assert_not_nil project.errors.on(:parent_id) |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
should "fail with unauthorized parent_id" do |
|
|
|
assert !User.find(2).member_of?(Project.find(6)) |
|
|
|
assert_no_difference 'Project.count' do |
|
|
|
post :create, :project => { :name => "blog", |
|
|
|
post :create, :project => { :name => "blog", |
|
|
|
:description => "weblog", |
|
|
|
:identifier => "blog", |
|
|
|
:is_public => 1, |
|
|
@@ -287,7 +287,7 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
end |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_create_should_preserve_modules_on_validation_failure |
|
|
|
with_settings :default_projects_modules => ['issue_tracking', 'repository'] do |
|
|
|
@request.session[:user_id] = 1 |
|
|
@@ -303,13 +303,13 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_equal %w(issue_tracking news), project.enabled_module_names.sort |
|
|
|
end |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_create_should_not_accept_get |
|
|
|
@request.session[:user_id] = 1 |
|
|
|
get :create |
|
|
|
assert_response :method_not_allowed |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_show_by_id |
|
|
|
get :show, :id => 1 |
|
|
|
assert_response :success |
|
|
@@ -323,7 +323,7 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_template 'show' |
|
|
|
assert_not_nil assigns(:project) |
|
|
|
assert_equal Project.find_by_identifier('ecookbook'), assigns(:project) |
|
|
|
|
|
|
|
|
|
|
|
assert_tag 'li', :content => /Development status/ |
|
|
|
end |
|
|
|
|
|
|
@@ -333,10 +333,10 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_response :success |
|
|
|
assert_template 'show' |
|
|
|
assert_not_nil assigns(:project) |
|
|
|
|
|
|
|
|
|
|
|
assert_no_tag 'li', :content => /Development status/ |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_show_should_not_fail_when_custom_values_are_nil |
|
|
|
project = Project.find_by_identifier('ecookbook') |
|
|
|
project.custom_values.first.update_attribute(:value, nil) |
|
|
@@ -346,17 +346,17 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_not_nil assigns(:project) |
|
|
|
assert_equal Project.find_by_identifier('ecookbook'), assigns(:project) |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def show_archived_project_should_be_denied |
|
|
|
project = Project.find_by_identifier('ecookbook') |
|
|
|
project.archive! |
|
|
|
|
|
|
|
|
|
|
|
get :show, :id => 'ecookbook' |
|
|
|
assert_response 403 |
|
|
|
assert_nil assigns(:project) |
|
|
|
assert_tag :tag => 'p', :content => /archived/ |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_private_subprojects_hidden |
|
|
|
get :show, :id => 'ecookbook' |
|
|
|
assert_response :success |
|
|
@@ -371,14 +371,14 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_template 'show' |
|
|
|
assert_tag :tag => 'a', :content => /Private child/ |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_settings |
|
|
|
@request.session[:user_id] = 2 # manager |
|
|
|
get :settings, :id => 1 |
|
|
|
assert_response :success |
|
|
|
assert_template 'settings' |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_update |
|
|
|
@request.session[:user_id] = 2 # manager |
|
|
|
post :update, :id => 1, :project => {:name => 'Test changed name', |
|
|
@@ -391,7 +391,7 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
def test_modules |
|
|
|
@request.session[:user_id] = 2 |
|
|
|
Project.find(1).enabled_module_names = ['issue_tracking', 'news'] |
|
|
|
|
|
|
|
|
|
|
|
post :modules, :id => 1, :enabled_module_names => ['issue_tracking', 'repository', 'documents'] |
|
|
|
assert_redirected_to '/projects/ecookbook/settings/modules' |
|
|
|
assert_equal ['documents', 'issue_tracking', 'repository'], Project.find(1).enabled_module_names.sort |
|
|
@@ -402,7 +402,7 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
get :modules, :id => 1 |
|
|
|
assert_response :method_not_allowed |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_get_destroy |
|
|
|
@request.session[:user_id] = 1 # admin |
|
|
|
get :destroy, :id => 1 |
|
|
@@ -417,14 +417,14 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_redirected_to '/admin/projects' |
|
|
|
assert_nil Project.find_by_id(1) |
|
|
|
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 |
|
|
@@ -432,7 +432,7 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_redirected_to '/admin/projects' |
|
|
|
assert Project.find(1).active? |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_project_breadcrumbs_should_be_limited_to_3_ancestors |
|
|
|
CustomField.delete_all |
|
|
|
parent = nil |
|
|
@@ -443,7 +443,7 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_tag :h1, :parent => { :attributes => {:id => 'header'}}, |
|
|
|
:children => { :count => [i, 3].min, |
|
|
|
:only => { :tag => 'a' } } |
|
|
|
|
|
|
|
|
|
|
|
parent = p |
|
|
|
end |
|
|
|
end |
|
|
@@ -456,7 +456,7 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert assigns(:project) |
|
|
|
assert_equal Project.find(1).description, assigns(:project).description |
|
|
|
assert_nil assigns(:project).id |
|
|
|
|
|
|
|
|
|
|
|
assert_tag :tag => 'input', |
|
|
|
:attributes => {:name => 'project[enabled_module_names][]', :value => 'issue_tracking'} |
|
|
|
end |
|
|
@@ -467,11 +467,11 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
assert_response :redirect |
|
|
|
assert_redirected_to :controller => 'admin', :action => 'projects' |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_post_copy_should_copy_requested_items |
|
|
|
@request.session[:user_id] = 1 # admin |
|
|
|
CustomField.delete_all |
|
|
|
|
|
|
|
|
|
|
|
assert_difference 'Project.count' do |
|
|
|
post :copy, :id => 1, |
|
|
|
:project => { |
|
|
@@ -485,7 +485,7 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
project = Project.find('unique-copy') |
|
|
|
source = Project.find(1) |
|
|
|
assert_equal %w(issue_tracking time_tracking), project.enabled_module_names.sort |
|
|
|
|
|
|
|
|
|
|
|
assert_equal source.versions.count, project.versions.count, "All versions were not copied" |
|
|
|
# issues assigned to a closed version won't be copied |
|
|
|
assert_equal source.issues.select {|i| i.fixed_version.nil? || i.fixed_version.open?}.size, |
|
|
@@ -504,13 +504,13 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
get :show, :id => 1, :jump => 'issues' |
|
|
|
assert_redirected_to '/projects/ecookbook/issues' |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_jump_should_not_redirect_to_inactive_tab |
|
|
|
get :show, :id => 3, :jump => 'documents' |
|
|
|
assert_response :success |
|
|
|
assert_template 'show' |
|
|
|
end |
|
|
|
|
|
|
|
|
|
|
|
def test_jump_should_not_redirect_to_unknown_tab |
|
|
|
get :show, :id => 3, :jump => 'foobar' |
|
|
|
assert_response :success |
|
|
@@ -526,13 +526,13 @@ class ProjectsControllerTest < ActionController::TestCase |
|
|
|
end |
|
|
|
# Don't use this hook now |
|
|
|
Redmine::Hook.clear_listeners |
|
|
|
|
|
|
|
|
|
|
|
def test_hook_response |
|
|
|
Redmine::Hook.add_listener(ProjectBasedTemplate) |
|
|
|
get :show, :id => 1 |
|
|
|
assert_tag :tag => 'link', :attributes => {:href => '/stylesheets/ecookbook.css'}, |
|
|
|
:parent => {:tag => 'head'} |
|
|
|
|
|
|
|
|
|
|
|
Redmine::Hook.clear_listeners |
|
|
|
end |
|
|
|
end |