Project

General

Profile

Defect #37635 » 0001-Consider-only-roles-with-either-add_issues-or-edit_i.patch

Updated patch from #37635#note-5 - Holger Just, 2022-09-15 15:44

View differences:

app/models/issue.rb
677 677
  def workflow_rule_by_attribute(user=nil)
678 678
    return @workflow_rule_by_attribute if @workflow_rule_by_attribute && user.nil?
679 679

  
680
    user_real = user || User.current
681
    roles = user_real.admin ? Role.all.to_a : user_real.roles_for_project(project)
682
    roles = roles.select(&:consider_workflow?)
680
    roles = roles_for_workflow(user || User.current)
683 681
    return {} if roles.empty?
684 682

  
685 683
    result = {}
......
1066 1064
    statuses = []
1067 1065
    statuses += IssueStatus.new_statuses_allowed(
1068 1066
      initial_status,
1069
      user.admin ? Role.all.to_a : user.roles_for_project(project),
1067
      roles_for_workflow(user),
1070 1068
      tracker,
1071 1069
      author == user,
1072 1070
      assignee_transitions_allowed
......
2053 2051
      Project
2054 2052
    end
2055 2053
  end
2054

  
2055
  def roles_for_workflow(user)
2056
    roles = user.admin ? Role.all.to_a : user.roles_for_project(project)
2057
    roles.select(&:consider_workflow?)
2058
  end
2056 2059
end
test/unit/issue_test.rb
859 859
    assert_equal expected_statuses, issue.new_statuses_allowed_to(admin)
860 860
  end
861 861

  
862
  def test_new_statuses_allowed_to_should_only_return_transitions_of_considered_workflows
863
    issue = Issue.find(9)
864

  
865
    WorkflowTransition.delete_all
866
    WorkflowTransition.create!(:role_id => 1, :tracker_id => 1, :old_status_id => 1, :new_status_id => 2)
867

  
868
    developer = Role.find(2)
869
    developer.remove_permission! :edit_issues
870
    developer.remove_permission! :add_issues
871
    assert !developer.consider_workflow?
872
    WorkflowTransition.create!(:role_id => 2, :tracker_id => 1, :old_status_id => 1, :new_status_id => 3)
873

  
874
    # status 3 is not displayed
875
    expected_statuses = IssueStatus.where(:id => [1, 2])
876

  
877
    admin = User.find(1)
878
    assert_equal expected_statuses, issue.new_statuses_allowed_to(admin)
879

  
880
    author = User.find(8)
881
    assert_equal expected_statuses, issue.new_statuses_allowed_to(author)
882
  end
883

  
862 884
  def test_new_statuses_allowed_to_should_return_allowed_statuses_when_copying
863 885
    Tracker.find(1).generate_transitions! :role_id => 1, :clear => true, 0 => [1, 3]
864 886

  
(2-2/2)