##// END OF EJS Templates
Merged r13140 and r13142 (#16795)....
Jean-Philippe Lang -
r12887:221c8392c6a4
parent child
Show More
@@ -73,6 +73,18 class Member < ActiveRecord::Base
73 member_roles.detect {|mr| mr.inherited_from}.nil?
73 member_roles.detect {|mr| mr.inherited_from}.nil?
74 end
74 end
75
75
76 def destroy
77 if member_roles.reload.present?
78 # destroying the last role will destroy another instance
79 # of the same Member record, #super would then trigger callbacks twice
80 member_roles.destroy_all
81 @destroyed = true
82 freeze
83 else
84 super
85 end
86 end
87
76 def include?(user)
88 def include?(user)
77 if principal.is_a?(Group)
89 if principal.is_a?(Group)
78 !user.nil? && user.groups.include?(principal)
90 !user.nil? && user.groups.include?(principal)
@@ -107,6 +107,23 class MemberTest < ActiveSupport::TestCase
107 assert_nil category1.assigned_to_id
107 assert_nil category1.assigned_to_id
108 end
108 end
109
109
110 def test_destroy_should_trigger_callbacks_only_once
111 Member.class_eval { def destroy_test_callback; end}
112 Member.after_destroy :destroy_test_callback
113
114 m = Member.create!(:user_id => 1, :project_id => 1, :role_ids => [1,3])
115
116 Member.any_instance.expects(:destroy_test_callback).once
117 assert_difference 'Member.count', -1 do
118 assert_difference 'MemberRole.count', -2 do
119 m.destroy
120 end
121 end
122 assert m.destroyed?
123 ensure
124 Member._destroy_callbacks.reject! {|c| c.filter==:destroy_test_callback}
125 end
126
110 def test_sort_without_roles
127 def test_sort_without_roles
111 a = Member.new(:roles => [Role.first])
128 a = Member.new(:roles => [Role.first])
112 b = Member.new
129 b = Member.new
General Comments 0
You need to be logged in to leave comments. Login now