DG IZ; user refs are incremented as well as decremented for Posts

This commit is contained in:
ilya 2010-08-16 20:39:24 -07:00
parent 74c70d9410
commit 1d92d11841
3 changed files with 87 additions and 21 deletions

View file

@ -122,23 +122,15 @@ class User
end
def remove_friend(bad_friend)
puts "YEAHH!!"
raise "Friend not deleted" unless self.friend_ids.delete( bad_friend.id )
groups.each{|g| g.person_ids.delete( bad_friend.id )}
self.save
puts self.posts.find_all_by_person_id( bad_friend.id ).inspect
self.posts.find_all_by_person_id( bad_friend.id ).each{|post|
puts "HEYYYYYYYY"
self.post_ids.delete( post.id )
puts self.posts
post.user_refs =- 1
puts "ASODIJ"
post.user_refs -= 1
(post.user_refs > 0 || post.person.owner.nil? == false) ? post.save : post.destroy
}
puts self.inspect
self.save
bad_friend.user_refs -= 1
@ -200,7 +192,10 @@ class User
elsif object.is_a?(Post) && object.verify_creator_signature == true
Rails.logger.debug("Saving post: #{object}")
object.user_refs += 1
object.save
self.posts << object
self.save
object.socket_to_uid(id) if (object.respond_to?(:socket_to_uid) && !self.owns?(object))

View file

@ -20,7 +20,15 @@ module Diaspora
return unless body = doc.xpath("/XML/post").children.first
begin
body.name.camelize.constantize.from_xml body.to_s
new_object = body.name.camelize.constantize.from_xml body.to_s
if new_object.is_a? Post
existing_object = new_object.class.find_by_id(new_object.id)
existing_object ? (return existing_object) : (return new_object)
end
new_object
rescue NameError => e
if e.message.include? 'wrong constant name'
Rails.logger.info "Not a real type: #{object.to_s}"

View file

@ -275,33 +275,96 @@ describe User do
describe 'post refs' do
before do
@user2 = Factory.create(:user)
@user.activate_friend( @user2.person, @group)
@user3 = Factory.create(:user)
@group3 = @user3.group(:name => 'heroes')
@user.posts.count.should == 0
end
it 'should be removed on unfriending' do
@user.activate_friend( @user2.person, @group)
@user.posts.count.should == 0
status_message = @user2.post :status_message, :message => "hi"
@user.receive status_message.to_diaspora_xml
@user.posts.count.should == 1
@user.reload
@user.posts.count.should == 1
@user.unfriend(@user2.person)
puts @user.inspect
@user.reload
puts @user.inspect
@user.posts.count.should == 0
puts Post.all.inspect
Post.count.should be 1
end
it 'should be remove a post if the noone links to it' do
status_message = @user2.post :status_message, :message => "hi"
@user.receive status_message.to_diaspora_xml
@user.reload
@user.posts.count.should == 1
person = @user2.person
@user2.destroy
@user.unfriend(person)
@user.reload
@user.posts.count.should == 0
Post.count.should be 0
end
it 'should keep track of user references for one person ' do
status_message = @user2.post :status_message, :message => "hi"
@user.receive status_message.to_diaspora_xml
@user.reload
@user.posts.count.should == 1
status_message.reload
status_message.user_refs.should == 1
@user.unfriend(@user2.person)
status_message.reload
@user.reload
@user.posts.count.should == 0
status_message.reload
status_message.user_refs.should == 0
Post.count.should be 1
end
it 'should not override userrefs on receive by another person' do
@user3 = Factory.create :user
@user3.activate_friend(@user2, @group3)
status_message = @user2.post :status_message, :message => "hi"
@user.receive status_message.to_diaspora_xml
@user3.receive status_message.to_diaspora_xml
@user.reload
@user3.reload
@user.posts.count.should == 1
status_message.reload
status_message.user_refs.should == 2
@user.unfriend(@user2.person)
status_message.reload
@user.reload
@user.posts.count.should == 0
status_message.reload
status_message.user_refs.should == 1
Post.count.should be 1
end
end
end