2019-03-16 15:03:47 +00:00
|
|
|
# frozen_string_literal: true
|
2019-03-15 01:32:57 +00:00
|
|
|
|
2011-08-30 04:13:19 +00:00
|
|
|
# Redmine - project management software
|
2023-01-01 06:19:35 +00:00
|
|
|
# Copyright (C) 2006-2023 Jean-Philippe Lang
|
2008-03-15 08:27:38 +00:00
|
|
|
#
|
|
|
|
|
# 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.
|
2011-08-30 04:13:19 +00:00
|
|
|
#
|
2008-03-15 08:27:38 +00:00
|
|
|
# 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.
|
2011-08-30 04:13:19 +00:00
|
|
|
#
|
2008-03-15 08:27:38 +00:00
|
|
|
# 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.
|
|
|
|
|
|
2023-01-01 07:13:39 +00:00
|
|
|
require_relative '../test_helper'
|
2008-03-15 08:27:38 +00:00
|
|
|
|
2009-09-13 17:14:35 +00:00
|
|
|
class TrackerTest < ActiveSupport::TestCase
|
2020-12-02 03:32:35 +00:00
|
|
|
fixtures :trackers, :workflows, :issue_statuses, :roles, :issues, :custom_fields, :projects, :projects_trackers, :enabled_modules
|
2012-05-25 20:18:55 +00:00
|
|
|
|
2018-12-16 17:23:31 +00:00
|
|
|
def setup
|
|
|
|
|
User.current = nil
|
|
|
|
|
end
|
|
|
|
|
|
2012-05-25 20:18:55 +00:00
|
|
|
def test_sorted_scope
|
2014-10-22 17:37:16 +00:00
|
|
|
assert_equal Tracker.all.sort, Tracker.sorted.to_a
|
2012-05-25 20:18:55 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_named_scope
|
2016-12-12 21:36:14 +00:00
|
|
|
assert_equal Tracker.find(2), Tracker.named('feature request').first
|
2012-05-25 20:18:55 +00:00
|
|
|
end
|
2008-03-15 08:27:38 +00:00
|
|
|
|
2016-06-18 06:42:25 +00:00
|
|
|
def test_visible_scope_chained_with_project_rolled_up_trackers
|
|
|
|
|
project = Project.find(1)
|
|
|
|
|
role = Role.generate!
|
|
|
|
|
role.add_permission! :view_issues
|
|
|
|
|
role.set_permission_trackers :view_issues, [2]
|
|
|
|
|
role.save!
|
|
|
|
|
user = User.generate!
|
|
|
|
|
User.add_to_project user, project, role
|
|
|
|
|
|
|
|
|
|
assert_equal [2], project.rolled_up_trackers(false).visible(user).map(&:id)
|
|
|
|
|
end
|
|
|
|
|
|
2020-11-25 07:51:58 +00:00
|
|
|
def test_copy_from
|
|
|
|
|
tracker = Tracker.find(1)
|
|
|
|
|
copy = Tracker.new.copy_from(tracker)
|
|
|
|
|
|
|
|
|
|
assert_nil copy.id
|
|
|
|
|
assert_nil copy.position
|
|
|
|
|
assert_equal '', copy.name
|
|
|
|
|
assert_equal tracker.default_status_id, copy.default_status_id
|
|
|
|
|
assert_equal tracker.is_in_roadmap, copy.is_in_roadmap
|
|
|
|
|
assert_equal tracker.core_fields, copy.core_fields
|
|
|
|
|
assert_equal tracker.description, copy.description
|
|
|
|
|
|
|
|
|
|
copy.name = 'Copy'
|
|
|
|
|
assert copy.save
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_copy_from_should_copy_custom_fields
|
|
|
|
|
tracker = Tracker.generate!(:custom_field_ids => [1, 2, 6])
|
|
|
|
|
copy = Tracker.new.copy_from(tracker)
|
|
|
|
|
assert_equal [1, 2, 6], copy.custom_field_ids.sort
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_copy_from_should_copy_projects
|
|
|
|
|
tracker = Tracker.generate!(:project_ids => [1, 2, 3, 4, 5, 6])
|
|
|
|
|
copy = Tracker.new.copy_from(tracker)
|
|
|
|
|
assert_equal [1, 2, 3, 4, 5, 6], copy.project_ids.sort
|
|
|
|
|
end
|
|
|
|
|
|
2008-03-15 08:27:38 +00:00
|
|
|
def test_copy_workflows
|
|
|
|
|
source = Tracker.find(1)
|
2015-07-26 08:30:19 +00:00
|
|
|
rules_count = source.workflow_rules.count
|
|
|
|
|
assert rules_count > 0
|
2011-08-30 04:13:19 +00:00
|
|
|
|
2014-11-02 19:45:14 +00:00
|
|
|
target = Tracker.new(:name => 'Target', :default_status_id => 1)
|
2008-03-15 08:27:38 +00:00
|
|
|
assert target.save
|
2017-06-03 08:04:13 +00:00
|
|
|
target.copy_workflow_rules(source)
|
2008-03-15 08:27:38 +00:00
|
|
|
target.reload
|
2015-07-26 08:30:19 +00:00
|
|
|
assert_equal rules_count, target.workflow_rules.size
|
2008-03-15 08:27:38 +00:00
|
|
|
end
|
2011-08-30 04:13:19 +00:00
|
|
|
|
2009-12-18 15:41:32 +00:00
|
|
|
def test_issue_statuses
|
|
|
|
|
tracker = Tracker.find(1)
|
2012-07-15 14:12:17 +00:00
|
|
|
WorkflowTransition.delete_all
|
2022-09-17 07:58:12 +00:00
|
|
|
WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 1)
|
2012-07-15 14:12:17 +00:00
|
|
|
WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 2, :new_status_id => 3)
|
|
|
|
|
WorkflowTransition.create!(:role_id => 2, :tracker_id => 1, :old_status_id => 3, :new_status_id => 5)
|
2011-08-30 04:13:19 +00:00
|
|
|
|
2009-12-18 15:41:32 +00:00
|
|
|
assert_kind_of Array, tracker.issue_statuses
|
|
|
|
|
assert_kind_of IssueStatus, tracker.issue_statuses.first
|
|
|
|
|
assert_equal [2, 3, 5], Tracker.find(1).issue_statuses.collect(&:id)
|
|
|
|
|
end
|
2011-08-30 04:13:19 +00:00
|
|
|
|
2009-12-18 15:41:32 +00:00
|
|
|
def test_issue_statuses_empty
|
2016-07-16 10:20:21 +00:00
|
|
|
WorkflowTransition.where(:tracker_id => 1).delete_all
|
2009-12-18 15:41:32 +00:00
|
|
|
assert_equal [], Tracker.find(1).issue_statuses
|
|
|
|
|
end
|
2012-04-18 19:33:29 +00:00
|
|
|
|
|
|
|
|
def test_issue_statuses_should_be_empty_for_new_record
|
|
|
|
|
assert_equal [], Tracker.new.issue_statuses
|
|
|
|
|
end
|
2012-05-05 16:21:22 +00:00
|
|
|
|
2012-07-05 12:20:07 +00:00
|
|
|
def test_core_fields_should_be_enabled_by_default
|
|
|
|
|
tracker = Tracker.new
|
|
|
|
|
assert_equal Tracker::CORE_FIELDS, tracker.core_fields
|
|
|
|
|
assert_equal [], tracker.disabled_core_fields
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_core_fields
|
|
|
|
|
tracker = Tracker.new
|
|
|
|
|
tracker.core_fields = %w(assigned_to_id due_date)
|
|
|
|
|
|
|
|
|
|
assert_equal %w(assigned_to_id due_date), tracker.core_fields
|
|
|
|
|
assert_equal Tracker::CORE_FIELDS - %w(assigned_to_id due_date), tracker.disabled_core_fields
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_core_fields_should_return_fields_enabled_for_any_tracker
|
|
|
|
|
trackers = []
|
|
|
|
|
trackers << Tracker.new(:core_fields => %w(assigned_to_id due_date))
|
|
|
|
|
trackers << Tracker.new(:core_fields => %w(assigned_to_id done_ratio))
|
|
|
|
|
trackers << Tracker.new(:core_fields => [])
|
|
|
|
|
|
|
|
|
|
assert_equal %w(assigned_to_id due_date done_ratio), Tracker.core_fields(trackers)
|
|
|
|
|
assert_equal Tracker::CORE_FIELDS - %w(assigned_to_id due_date done_ratio), Tracker.disabled_core_fields(trackers)
|
|
|
|
|
end
|
|
|
|
|
|
2012-07-21 15:43:44 +00:00
|
|
|
def test_core_fields_should_return_all_fields_for_an_empty_argument
|
|
|
|
|
assert_equal Tracker::CORE_FIELDS, Tracker.core_fields([])
|
|
|
|
|
assert_equal [], Tracker.disabled_core_fields([])
|
|
|
|
|
end
|
|
|
|
|
|
2012-05-05 16:21:22 +00:00
|
|
|
def test_sort_should_sort_by_position
|
|
|
|
|
a = Tracker.new(:name => 'Tracker A', :position => 2)
|
|
|
|
|
b = Tracker.new(:name => 'Tracker B', :position => 1)
|
|
|
|
|
|
|
|
|
|
assert_equal [b, a], [a, b].sort
|
|
|
|
|
end
|
2012-05-25 20:18:55 +00:00
|
|
|
|
|
|
|
|
def test_destroying_a_tracker_without_issues_should_not_raise_an_error
|
|
|
|
|
tracker = Tracker.find(1)
|
2016-07-16 10:20:21 +00:00
|
|
|
Issue.where(:tracker_id => tracker.id).delete_all
|
2012-05-25 20:18:55 +00:00
|
|
|
|
|
|
|
|
assert_difference 'Tracker.count', -1 do
|
|
|
|
|
assert_nothing_raised do
|
|
|
|
|
tracker.destroy
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_destroying_a_tracker_with_issues_should_raise_an_error
|
|
|
|
|
tracker = Tracker.find(1)
|
|
|
|
|
|
|
|
|
|
assert_no_difference 'Tracker.count' do
|
2019-05-25 06:50:25 +00:00
|
|
|
assert_raise StandardError do
|
2012-05-25 20:18:55 +00:00
|
|
|
tracker.destroy
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
2019-03-15 10:38:56 +00:00
|
|
|
|
|
|
|
|
def test_tracker_should_have_description
|
|
|
|
|
tracker = Tracker.find(1)
|
|
|
|
|
assert tracker.respond_to?(:description)
|
|
|
|
|
assert_equal tracker.description, "Description for Bug tracker"
|
|
|
|
|
end
|
2008-03-15 08:27:38 +00:00
|
|
|
end
|