Commit dc7ddee65ec19736b054bf0f76d3433581cbc1f0
1 parent
aceb3bee
Exists in
master
and in
29 other branches
ActionItem758: removing friendships when person is destroyed
Showing
2 changed files
with
17 additions
and
1 deletions
Show diff stats
app/models/person.rb
@@ -3,11 +3,15 @@ class Person < Profile | @@ -3,11 +3,15 @@ class Person < Profile | ||
3 | 3 | ||
4 | acts_as_accessor | 4 | acts_as_accessor |
5 | 5 | ||
6 | - has_many :friendships | 6 | + has_many :friendships, :dependent => :destroy |
7 | has_many :friends, :class_name => 'Person', :through => :friendships | 7 | has_many :friends, :class_name => 'Person', :through => :friendships |
8 | 8 | ||
9 | has_many :requested_tasks, :class_name => 'Task', :foreign_key => :requestor_id, :dependent => :destroy | 9 | has_many :requested_tasks, :class_name => 'Task', :foreign_key => :requestor_id, :dependent => :destroy |
10 | 10 | ||
11 | + after_destroy do |person| | ||
12 | + Friendship.find(:all, :conditions => { :friend_id => person.id}).each { |friendship| friendship.destroy } | ||
13 | + end | ||
14 | + | ||
11 | def suggested_friend_groups | 15 | def suggested_friend_groups |
12 | (friend_groups + [ _('friends'), _('work'), _('school'), _('family') ]).map {|i| i if !i.empty?}.compact.uniq | 16 | (friend_groups + [ _('friends'), _('work'), _('school'), _('family') ]).map {|i| i if !i.empty?}.compact.uniq |
13 | end | 17 | end |
test/unit/person_test.rb
@@ -217,6 +217,18 @@ class PersonTest < Test::Unit::TestCase | @@ -217,6 +217,18 @@ class PersonTest < Test::Unit::TestCase | ||
217 | assert_not_includes p1.friends(true), p2 | 217 | assert_not_includes p1.friends(true), p2 |
218 | end | 218 | end |
219 | 219 | ||
220 | + should 'destroy friendships when person is destroyed' do | ||
221 | + p1 = create_user('testuser1').person | ||
222 | + p2 = create_user('testuser2').person | ||
223 | + p1.add_friend(p2, 'friends') | ||
224 | + p2.add_friend(p1, 'friends') | ||
225 | + | ||
226 | + assert_difference Friendship, :count, -2 do | ||
227 | + p1.destroy | ||
228 | + end | ||
229 | + assert_not_includes p2.friends(true), p1 | ||
230 | + end | ||
231 | + | ||
220 | should 'return info name instead of name when info is setted' do | 232 | should 'return info name instead of name when info is setted' do |
221 | p = create_user('ze_maria').person | 233 | p = create_user('ze_maria').person |
222 | assert_equal 'ze_maria', p.name | 234 | assert_equal 'ze_maria', p.name |