##// END OF EJS Templates
Fixed workflow rules when user has duplicated role by inheritance (#19569)....
Jean-Philippe Lang -
r13797:a9f052532e3e
parent child
Show More
@@ -19,7 +19,7 class Member < ActiveRecord::Base
19 belongs_to :user
19 belongs_to :user
20 belongs_to :principal, :foreign_key => 'user_id'
20 belongs_to :principal, :foreign_key => 'user_id'
21 has_many :member_roles, :dependent => :destroy
21 has_many :member_roles, :dependent => :destroy
22 has_many :roles, :through => :member_roles
22 has_many :roles, lambda {uniq}, :through => :member_roles
23 belongs_to :project
23 belongs_to :project
24
24
25 validates_presence_of :principal, :project
25 validates_presence_of :principal, :project
@@ -981,6 +981,27 class IssueTest < ActiveSupport::TestCase
981 assert_equal %w(done_ratio start_date), issue.read_only_attribute_names(user).sort
981 assert_equal %w(done_ratio start_date), issue.read_only_attribute_names(user).sort
982 end
982 end
983
983
984 def test_workflow_rules_should_work_for_member_with_duplicate_role
985 WorkflowPermission.delete_all
986 WorkflowPermission.create!(:old_status_id => 1, :tracker_id => 1,
987 :role_id => 1, :field_name => 'due_date',
988 :rule => 'required')
989 WorkflowPermission.create!(:old_status_id => 1, :tracker_id => 1,
990 :role_id => 1, :field_name => 'start_date',
991 :rule => 'readonly')
992
993 user = User.generate!
994 m = Member.new(:user_id => user.id, :project_id => 1)
995 m.member_roles.build(:role_id => 1)
996 m.member_roles.build(:role_id => 1)
997 m.save!
998
999 issue = Issue.new(:project_id => 1, :tracker_id => 1, :status_id => 1)
1000
1001 assert_equal %w(due_date), issue.required_attribute_names(user)
1002 assert_equal %w(start_date), issue.read_only_attribute_names(user)
1003 end
1004
984 def test_copy
1005 def test_copy
985 issue = Issue.new.copy_from(1)
1006 issue = Issue.new.copy_from(1)
986 assert issue.copy?
1007 assert issue.copy?
@@ -133,6 +133,16 class MemberTest < ActiveSupport::TestCase
133 Member._destroy_callbacks.delete(:destroy_test_callback)
133 Member._destroy_callbacks.delete(:destroy_test_callback)
134 end
134 end
135
135
136 def test_roles_should_be_unique
137 m = Member.new(:user_id => 1, :project_id => 1)
138 m.member_roles.build(:role_id => 1)
139 m.member_roles.build(:role_id => 1)
140 m.save!
141 m.reload
142 assert_equal 1, m.roles.count
143 assert_equal [1], m.roles.ids
144 end
145
136 def test_sort_without_roles
146 def test_sort_without_roles
137 a = Member.new(:roles => [Role.first])
147 a = Member.new(:roles => [Role.first])
138 b = Member.new
148 b = Member.new
@@ -907,6 +907,18 class UserTest < ActiveSupport::TestCase
907 assert_equal [], roles.map(&:name).sort
907 assert_equal [], roles.map(&:name).sort
908 end
908 end
909
909
910 def test_roles_for_project_should_be_unique
911 m = Member.new(:user_id => 1, :project_id => 1)
912 m.member_roles.build(:role_id => 1)
913 m.member_roles.build(:role_id => 1)
914 m.save!
915
916 user = User.find(1)
917 project = Project.find(1)
918 assert_equal 1, user.roles_for_project(project).size
919 assert_equal [1], user.roles_for_project(project).map(&:id)
920 end
921
910 def test_projects_by_role_for_user_with_role
922 def test_projects_by_role_for_user_with_role
911 user = User.find(2)
923 user = User.find(2)
912 assert_kind_of Hash, user.projects_by_role
924 assert_kind_of Hash, user.projects_by_role
General Comments 0
You need to be logged in to leave comments. Login now