@@ -73,6 +73,18 class Member < ActiveRecord::Base | |||
|
73 | 73 | member_roles.detect {|mr| mr.inherited_from}.nil? |
|
74 | 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 | 88 | def include?(user) |
|
77 | 89 | if principal.is_a?(Group) |
|
78 | 90 | !user.nil? && user.groups.include?(principal) |
@@ -107,6 +107,23 class MemberTest < ActiveSupport::TestCase | |||
|
107 | 107 | assert_nil category1.assigned_to_id |
|
108 | 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 | 127 | def test_sort_without_roles |
|
111 | 128 | a = Member.new(:roles => [Role.first]) |
|
112 | 129 | b = Member.new |
General Comments 0
You need to be logged in to leave comments.
Login now