@@ -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