1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
# frozen_string_literal: true
# Redmine - project management software
# Copyright (C) 2006-2022 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.expand_path('../../test_helper', __FILE__)
class VersionsHelperTest < Redmine::HelperTest
include Rails.application.routes.url_helpers
fixtures :projects, :versions, :enabled_modules,
:users, :members, :roles, :member_roles,
:trackers, :projects_trackers,
:issue_statuses
def test_version_filtered_issues_path_sharing_none
version = Version.new(:name => 'test', :sharing => 'none')
version.project = Project.find(5)
assert_match '/projects/private-child/issues?', version_filtered_issues_path(version)
end
def test_version_filtered_issues_path_sharing_descendants
version = Version.new(:name => 'test', :sharing => 'descendants')
version.project = Project.find(5)
assert_match '/projects/private-child/issues?', version_filtered_issues_path(version)
end
def test_version_filtered_issues_path_sharing_hierarchy
version = Version.new(:name => 'test', :sharing => 'hierarchy')
version.project = Project.find(5)
assert_match '/projects/private-child/issues?', version_filtered_issues_path(version)
end
def test_version_filtered_issues_path_sharing_tree
version = Version.new(:name => 'test', :sharing => 'tree')
version.project = Project.find(5)
assert_match '/projects/ecookbook/issues?', version_filtered_issues_path(version)
end
def test_version_filtered_issues_path_sharing_tree_without_permission_to_root_project
EnabledModule.where("name = 'issue_tracking' AND project_id = 1").delete_all
version = Version.new(:name => 'test', :sharing => 'tree')
version.project = Project.find(5)
assert_no_match '/projects/ecookbook/issues?', version_filtered_issues_path(version)
assert_match '/issues?', version_filtered_issues_path(version)
end
def test_version_filtered_issues_path_sharing_system
version = Version.new(:name => 'test', :sharing => 'system')
version.project = Project.find(5)
assert_match /^\/issues\?/, version_filtered_issues_path(version)
end
def test_link_to_new_issue_should_return_link_to_add_issue
version = Version.find(3)
project = Project.find(1)
User.current = User.find(1)
# href should contain the following params:
# fixed_version_id=3
# tracker_id=1
assert_select_in(
link_to_new_issue(version, project),
'[href=?]',
'/projects/ecookbook/issues/new?back_url=' \
'%2Fversions%2F3&issue%5Bfixed_version_id%5D=3&issue%5Btracker_id%5D=1',
:text => 'New issue'
)
end
def test_link_to_new_issue_should_return_nil_if_version_status_is_not_open
# locked version
version = Version.find(2)
project = Project.find(1)
User.current = User.find(1)
assert_nil link_to_new_issue(version, project)
end
def test_link_to_new_issue_should_return_nil_if_user_does_not_have_permission_to_add_issue
Role.find(1).remove_permission! :add_issues
version = Version.find(3)
project = Project.find(1)
User.current = User.find(2)
assert_nil link_to_new_issue(version, project)
end
def test_link_to_new_issue_should_return_nil_if_no_tracker_is_available_for_project
trackers = Tracker::CORE_FIELDS - %w(fixed_version_id)
# disable fixed_version_id field for all trackers
Tracker.all.each do |tracker|
tracker.core_fields = trackers
tracker.save!
end
version = Version.find(3)
project = Project.find(1)
User.current = User.find(2)
assert_nil link_to_new_issue(version, project)
end
def test_link_to_new_issue_should_take_into_account_user_permissions_on_fixed_version_id_field
WorkflowPermission.delete_all
WorkflowPermission.create!(:role_id => 1, :tracker_id => 1,
:old_status_id => 1,
:field_name => 'fixed_version_id',
:rule => 'readonly')
version = Version.find(3)
project = Project.find(1)
User.current = User.find(2)
# href should contain param tracker_id=2 because for tracker_id 1,
# user has only readonly permissions on fixed_version_id
assert_select_in(
link_to_new_issue(version, project),
'[href=?]',
'/projects/ecookbook/issues/new?back_url=' \
'%2Fversions%2F3&issue%5Bfixed_version_id%5D=3&issue%5Btracker_id%5D=2'
)
end
end
|