diff --git a/app/models/user.rb b/app/models/user.rb index 16e698b2d..f0c0f5f9d 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -6,13 +6,13 @@ class User key :friend_ids, Array key :pending_request_ids, Array - key :post_ids, Array + key :visible_post_ids, Array one :person, :class_name => 'Person', :foreign_key => :owner_id many :friends, :in => :friend_ids, :class_name => 'Person' many :pending_requests, :in => :pending_request_ids, :class_name => 'Request' - many :posts, :in => :post_ids, :class_name => 'Post' + many :raw_visible_posts, :in => :visible_post_ids, :class_name => 'Post' many :groups, :class_name => 'Group' @@ -49,16 +49,16 @@ class User post.socket_to_uid(id) if post.respond_to?(:socket_to_uid) - self.posts << post + self.raw_visible_posts << post self.save post end - def posts_for( opts = {} ) - if opts[:group] - group = self.groups.find_by_id( opts[:group].id ) - self.posts.find_all_by_person_id( (group.person_ids + [self.person.id] ), :order => "created_at desc") + def visible_posts( opts = {} ) + if opts[:by_members_of] + group = self.groups.find_by_id( opts[:by_members_of].id ) + self.raw_visible_posts.find_all_by_person_id( (group.person_ids + [self.person.id] ), :order => "created_at desc") end end @@ -182,8 +182,8 @@ class User groups.each{|g| g.person_ids.delete( bad_friend.id )} self.save - self.posts.find_all_by_person_id( bad_friend.id ).each{|post| - self.post_ids.delete( post.id ) + self.raw_visible_posts.find_all_by_person_id( bad_friend.id ).each{|post| + self.visible_post_ids.delete( post.id ) post.user_refs -= 1 (post.user_refs > 0 || post.person.owner.nil? == false) ? post.save : post.destroy } @@ -252,7 +252,7 @@ class User object.user_refs += 1 object.save - self.posts << object + self.raw_visible_posts << object self.save diff --git a/config/routes.rb b/config/routes.rb index f284fa55c..e1991d033 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,6 @@ Diaspora::Application.routes.draw do |map| resources :people - resources :users, :only => [:edit, :show] + resources :users, :only => [:edit, :show, :update] resources :status_messages resources :comments resources :requests diff --git a/spec/models/blogs_spec.rb b/spec/models/blogs_spec.rb deleted file mode 100644 index 9be9db74b..000000000 --- a/spec/models/blogs_spec.rb +++ /dev/null @@ -1,32 +0,0 @@ -require File.dirname(__FILE__) + '/../spec_helper' - -describe Blog do - before do - @user = Factory.create(:user, :email => "bob@aol.com") - end - - it "should have a title and body" do - n = Blog.new - n.valid?.should be false - n.title = "jimmy" - n.valid?.should be false - n.body = "wales" - n.valid?.should be true - end - - - - describe "XML" do - it 'should serialize to XML' do - body = Factory.create(:blog, :title => "yessir", :body => "penguins", :person => @user.person) - body.to_xml.to_s.should include "yessir" - body.to_xml.to_s.should include "penguins" - end - - it 'should marshal serialized XML to object' do - xml = "\n yessir\n I hate WALRUSES!\n" - parsed = Blog.from_xml(xml) - parsed.body.should == "I hate WALRUSES!" - end - end -end diff --git a/spec/models/bookmark_spec.rb b/spec/models/bookmark_spec.rb deleted file mode 100644 index ae4567bc1..000000000 --- a/spec/models/bookmark_spec.rb +++ /dev/null @@ -1,80 +0,0 @@ -require File.dirname(__FILE__) + '/../spec_helper' - -describe Bookmark do - it "should have a link" do - bookmark = Factory.build(:bookmark, :link => nil) - bookmark.valid?.should be false - bookmark.link = "http://angjoo.com/" - bookmark.valid?.should be true - end - - it 'should validate its link' do - bookmark = Factory.build(:bookmark) - #invalid links - bookmark.link = "zsdvzxdg" - bookmark.valid?.should == false - bookmark.link = "sdfasfa.c" - bookmark.valid?.should == false - bookmark.link = "http://.com/" - bookmark.valid?.should == false - bookmark.link = "http://www..com/" - bookmark.valid?.should == false - bookmark.link = "http:/www.asodij.com/" - bookmark.valid?.should == false - bookmark.link = "https:/www.asodij.com/" - bookmark.valid?.should == false - bookmark.link = "http:///www.asodij.com/" - bookmark.valid?.should == false - end - - it 'should clean links' do - bad_links = [ - "google.com", - "www.google.com", - "google.com/", - "www.google.com/", - "http://google.com", - "http://www.google.com" - ] - - bad_links.each{ |link| - Bookmark.clean_link(link).should satisfy{ |link| - /^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(([0-9]{1,5})?\/.*)?$/ix.match(link) - } - } - - end - - describe "XML" do - it 'should serialize to XML' do - u = Factory.create(:user) - message = Factory.create(:bookmark, :title => "Reddit", :link => "http://reddit.com/", :person => u.person) - message.to_xml.to_s.should include "Reddit" - message.to_xml.to_s.should include "http://reddit.com/" - end - - it 'should marshal serialized XML to object' do - xml = "Reddit</message><link>http://reddit.com/</link></bookmark>" - parsed = Bookmark.from_xml(xml) - parsed.title.should == "Reddit" - parsed.link.should == "http://reddit.com/" - parsed.valid?.should be_true - end - end - - describe 'with encryption' do - before do - unstub_mocha_stubs - @user = Factory.create(:user) - end - - after do - stub_signature_verification - end - - it 'should save a signed bookmark' do - bookmark = @user.post(:bookmark, :title => "I love cryptography", :link => "http://pgp.mit.edu/") - bookmark.created_at.should_not be nil - end - end -end diff --git a/spec/models/user/receive_spec.rb b/spec/models/user/receive_spec.rb new file mode 100644 index 000000000..4514a39f4 --- /dev/null +++ b/spec/models/user/receive_spec.rb @@ -0,0 +1,125 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +describe User do + + before do + @user = Factory.create :user + @group = @user.group(:name => 'heroes') + + @user2 = Factory.create(:user) + @group2 = @user2.group(:name => 'losers') + #Factory.create :friend, @user + friend_users(@user, @group, @user2, @group2) + end + + it 'should be able to parse and store a status message from xml' do + status_message = @user2.post :status_message, :message => 'store this!' + person = @user2.person + + xml = status_message.to_diaspora_xml + @user2.destroy + status_message.destroy + StatusMessage.all.size.should == 0 + @user.receive( xml ) + + person.posts.first.message.should == 'store this!' + StatusMessage.all.size.should == 1 + end + + 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') + end + + it "should add the post to that user's posts when a user posts it" do + status_message = @user.post :status_message, :message => "hi" + @user.reload + @user.raw_visible_posts.include?(status_message).should be true + end + + it 'should be removed on unfriending' do + status_message = @user2.post :status_message, :message => "hi" + @user.receive status_message.to_diaspora_xml + @user.reload + + @user.raw_visible_posts.count.should == 1 + + @user.unfriend(@user2.person) + + @user.reload + @user.raw_visible_posts.count.should == 0 + + 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.raw_visible_posts.count.should == 1 + + person = @user2.person + @user2.destroy + @user.unfriend(person) + + @user.reload + @user.raw_visible_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.raw_visible_posts.count.should == 1 + + status_message.reload + status_message.user_refs.should == 1 + + @user.unfriend(@user2.person) + status_message.reload + + @user.reload + @user.raw_visible_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.activate_friend(@user2.person, @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.raw_visible_posts.count.should == 1 + + status_message.reload + status_message.user_refs.should == 2 + + @user.unfriend(@user2.person) + status_message.reload + + @user.reload + @user.raw_visible_posts.count.should == 0 + + status_message.reload + status_message.user_refs.should == 1 + + Post.count.should be 1 + end + end +end diff --git a/spec/models/user/user_friending_spec.rb b/spec/models/user/user_friending_spec.rb new file mode 100644 index 000000000..2eff093bf --- /dev/null +++ b/spec/models/user/user_friending_spec.rb @@ -0,0 +1,223 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +describe User do + before do + @user = Factory.create(:user) + @group = @user.group(:name => 'heroes') + end + + describe 'friend requesting' do + it "should assign a request to a group" do + friend = Factory.create(:person) + group = @user.group(:name => "Dudes") + group.requests.size.should == 0 + + @user.send_friend_request_to(friend.receive_url, group.id) + + group.reload + group.requests.size.should == 1 + end + + + it "should be able to accept a pending friend request" do + friend = Factory.create(:person) + r = Request.instantiate(:to => @user.receive_url, :from => friend) + r.save + Person.all.count.should == 2 + Request.for_user(@user).all.count.should == 1 + @user.accept_friend_request(r.id, @group.id) + Request.for_user(@user).all.count.should == 0 + end + + it 'should be able to ignore a pending friend request' do + friend = Factory.create(:person) + r = Request.instantiate(:to => @user.receive_url, :from => friend) + r.save + + Person.count.should == 2 + + @user.ignore_friend_request(r.id) + + Person.count.should == 1 + Request.count.should == 0 + end + + it 'should not be able to friend request an existing friend' do friend = Factory.create(:person) + + @user.friends << friend + @user.save + + + @user.send_friend_request_to( friend.receive_url, @group.id ).should be nil + end + + + + describe 'multiple users accepting/rejecting the same person' do + before do + @person_one = Factory.create :person + @person_one.save + + @user2 = Factory.create :user + @group2 = @user2.group(:name => "group two") + + @user.pending_requests.empty?.should be true + @user.friends.empty?.should be true + @user2.pending_requests.empty?.should be true + @user2.friends.empty?.should be true + + @request = Request.instantiate(:to => @user.receive_url, :from => @person_one) + @request_two = Request.instantiate(:to => @user2.receive_url, :from => @person_one) + @request_three = Request.instantiate(:to => @user2.receive_url, :from => @user.person) + + @req_xml = @request.to_diaspora_xml + @req_two_xml = @request_two.to_diaspora_xml + @req_three_xml = @request_three.to_diaspora_xml + + @request.destroy + @request_two.destroy + @request_three.destroy + end + + it 'should befriend the user other user on the same pod' do + + @user2.receive @req_three_xml + @user2.pending_requests.size.should be 1 + @user2.accept_friend_request @request_three.id, @group2.id + @user2.friends.include?(@user.person).should be true + Person.all.count.should be 3 + end + + it 'should not delete the ignored user on the same pod' do + + @user2.receive @req_three_xml + @user2.pending_requests.size.should be 1 + @user2.ignore_friend_request @request_three.id + @user2.friends.include?(@user.person).should be false + Person.all.count.should be 3 + end + + it 'should both users should befriend the same person' do + + @user.receive @req_xml + @user.pending_requests.size.should be 1 + @user.accept_friend_request @request.id, @group.id + @user.friends.include?(@person_one).should be true + + @user2.receive @req_two_xml + @user2.pending_requests.size.should be 1 + @user2.accept_friend_request @request_two.id, @group2.id + @user2.friends.include?(@person_one).should be true + Person.all.count.should be 3 + end + + it 'should keep the person around if one of the users rejects him' do + + @user.receive @req_xml + @user.pending_requests.size.should be 1 + @user.accept_friend_request @request.id, @group.id + @user.friends.include?(@person_one).should be true + + @user2.receive @req_two_xml + @user2.pending_requests.size.should be 1 + @user2.ignore_friend_request @request_two.id + @user2.friends.include?(@person_one).should be false + Person.all.count.should be 3 + end + + it 'should not keep the person around if the users ignores them' do + @user.receive @req_xml + @user.pending_requests.size.should be 1 + @user.ignore_friend_request @user.pending_requests.first.id + @user.friends.include?(@person_one).should be false + + @user2.receive @req_two_xml + @user2.pending_requests.size.should be 1 + @user2.ignore_friend_request @user2.pending_requests.first.id#@request_two.id + @user2.friends.include?(@person_one).should be false + Person.all.count.should be 2 + end + + + end + + describe 'a user accepting rejecting multiple people' do + before do + @person_one = Factory.create :person + @person_two = Factory.create :person + + @user.pending_requests.empty?.should be true + @user.friends.empty?.should be true + + @request = Request.instantiate(:to => @user.receive_url, :from => @person_one) + @request_two = Request.instantiate(:to => @user.receive_url, :from => @person_two) + end + + after do + @user.receive_friend_request @request + + @person_two.destroy + @user.pending_requests.size.should be 1 + @user.friends.size.should be 0 + + @user.receive_friend_request @request_two + @user.pending_requests.size.should be 2 + @user.friends.size.should be 0 + + @user.accept_friend_request @request.id, @group.id + @user.pending_requests.size.should be 1 + @user.friends.size.should be 1 + @user.friends.include?(@person_one).should be true + + @user.ignore_friend_request @request_two.id + @user.pending_requests.size.should be 0 + @user.friends.size.should be 1 + @user.friends.include?(@person_two).should be false + + end + + end + + describe 'unfriending' do + before do + @user2 = Factory.create :user + @group2 = @user2.group(:name => "Gross people") + + request = @user.send_friend_request_to( @user2.receive_url, @group.id) + request.reverse_for @user2 + @user2.activate_friend(@user.person, @group2) + @user.receive request.to_diaspora_xml + end + + it 'should unfriend the other user on the same seed' do + @user.reload + @user2.reload + + @user.friends.count.should == 1 + @user2.friends.count.should == 1 + + @user.person.user_refs.should == 1 + + @user2.person.user_refs.should == 1 + + @user2.unfriend @user.person + @user2.friends.count.should be 0 + + @user.person.reload + @user.person.user_refs.should == 0 + + @user.unfriended_by @user2.person + + @user2.person.reload + @user2.person.user_refs.should == 0 + + @group.reload + @group2.reload + @group.people.count.should == 0 + @group2.people.count.should == 0 + end + end + + + end +end diff --git a/spec/models/user/visible_posts_spec.rb b/spec/models/user/visible_posts_spec.rb new file mode 100644 index 000000000..2860b0a88 --- /dev/null +++ b/spec/models/user/visible_posts_spec.rb @@ -0,0 +1,43 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +describe User do + before do + @user = Factory.create(:user) + @group = @user.group(:name => 'heroes') + @group2 = @user.group(:name => 'stuff') + + @user2 = Factory.create :user + @user2_group = @user2.group(:name => 'dudes') + + friend_users(@user, @group, @user2, @user2_group) + + @user3 = Factory.create :user + @user3_group = @user3.group(:name => 'dudes') + friend_users(@user, @group2, @user3, @user3_group) + + @user4 = Factory.create :user + @user4_group = @user4.group(:name => 'dudes') + friend_users(@user, @group2, @user4, @user4_group) + end + + + it 'should generate a valid stream for a group of people' do + status_message1 = @user2.post :status_message, :message => "hi" + status_message2 = @user3.post :status_message, :message => "heyyyy" + status_message3 = @user4.post :status_message, :message => "yooo" + + @user.receive status_message1.to_diaspora_xml + @user.receive status_message2.to_diaspora_xml + @user.receive status_message3.to_diaspora_xml + @user.reload + + @user.visible_posts(:by_members_of => @group).include?(status_message1).should be true + @user.visible_posts(:by_members_of => @group).include?(status_message2).should be false + @user.visible_posts(:by_members_of => @group).include?(status_message3).should be false + + @user.visible_posts(:by_members_of => @group2).include?(status_message1).should be false + @user.visible_posts(:by_members_of => @group2).include?(status_message2).should be true + @user.visible_posts(:by_members_of => @group2).include?(status_message3).should be true + end +end + diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 169bdda43..6ecbb3c3c 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -20,179 +20,6 @@ describe User do user.person.profile.should_not be nil end - describe 'friend requesting' do - it "should assign a request to a group" do - friend = Factory.create(:person) - group = @user.group(:name => "Dudes") - group.requests.size.should == 0 - - @user.send_friend_request_to(friend.receive_url, group.id) - - group.reload - group.requests.size.should == 1 - end - - - it "should be able to accept a pending friend request" do - friend = Factory.create(:person) - r = Request.instantiate(:to => @user.receive_url, :from => friend) - r.save - Person.all.count.should == 2 - Request.for_user(@user).all.count.should == 1 - @user.accept_friend_request(r.id, @group.id) - Request.for_user(@user).all.count.should == 0 - end - - it 'should be able to ignore a pending friend request' do - friend = Factory.create(:person) - r = Request.instantiate(:to => @user.receive_url, :from => friend) - r.save - - Person.count.should == 2 - - @user.ignore_friend_request(r.id) - - Person.count.should == 1 - Request.count.should == 0 - end - - it 'should not be able to friend request an existing friend' do friend = Factory.create(:person) - - @user.friends << friend - @user.save - - - @user.send_friend_request_to( friend.receive_url, @group.id ).should be nil - end - - - - describe 'multiple users accepting/rejecting the same person' do - before do - @person_one = Factory.create :person - @person_one.save - - @user2 = Factory.create :user - @group2 = @user2.group(:name => "group two") - - @user.pending_requests.empty?.should be true - @user.friends.empty?.should be true - @user2.pending_requests.empty?.should be true - @user2.friends.empty?.should be true - - @request = Request.instantiate(:to => @user.receive_url, :from => @person_one) - @request_two = Request.instantiate(:to => @user2.receive_url, :from => @person_one) - @request_three = Request.instantiate(:to => @user2.receive_url, :from => @user.person) - - @req_xml = @request.to_diaspora_xml - @req_two_xml = @request_two.to_diaspora_xml - @req_three_xml = @request_three.to_diaspora_xml - - @request.destroy - @request_two.destroy - @request_three.destroy - end - - it 'should befriend the user other user on the same pod' do - - @user2.receive @req_three_xml - @user2.pending_requests.size.should be 1 - @user2.accept_friend_request @request_three.id, @group2.id - @user2.friends.include?(@user.person).should be true - Person.all.count.should be 3 - end - - it 'should not delete the ignored user on the same pod' do - - @user2.receive @req_three_xml - @user2.pending_requests.size.should be 1 - @user2.ignore_friend_request @request_three.id - @user2.friends.include?(@user.person).should be false - Person.all.count.should be 3 - end - - it 'should both users should befriend the same person' do - - @user.receive @req_xml - @user.pending_requests.size.should be 1 - @user.accept_friend_request @request.id, @group.id - @user.friends.include?(@person_one).should be true - - @user2.receive @req_two_xml - @user2.pending_requests.size.should be 1 - @user2.accept_friend_request @request_two.id, @group2.id - @user2.friends.include?(@person_one).should be true - Person.all.count.should be 3 - end - - it 'should keep the person around if one of the users rejects him' do - - @user.receive @req_xml - @user.pending_requests.size.should be 1 - @user.accept_friend_request @request.id, @group.id - @user.friends.include?(@person_one).should be true - - @user2.receive @req_two_xml - @user2.pending_requests.size.should be 1 - @user2.ignore_friend_request @request_two.id - @user2.friends.include?(@person_one).should be false - Person.all.count.should be 3 - end - - it 'should not keep the person around if the users ignores them' do - @user.receive @req_xml - @user.pending_requests.size.should be 1 - @user.ignore_friend_request @user.pending_requests.first.id - @user.friends.include?(@person_one).should be false - - @user2.receive @req_two_xml - @user2.pending_requests.size.should be 1 - @user2.ignore_friend_request @user2.pending_requests.first.id#@request_two.id - @user2.friends.include?(@person_one).should be false - Person.all.count.should be 2 - end - - - end - - describe 'a user accepting rejecting multiple people' do - before do - @person_one = Factory.create :person - @person_two = Factory.create :person - - @user.pending_requests.empty?.should be true - @user.friends.empty?.should be true - - @request = Request.instantiate(:to => @user.receive_url, :from => @person_one) - @request_two = Request.instantiate(:to => @user.receive_url, :from => @person_two) - end - - after do - @user.receive_friend_request @request - - @person_two.destroy - @user.pending_requests.size.should be 1 - @user.friends.size.should be 0 - - @user.receive_friend_request @request_two - @user.pending_requests.size.should be 2 - @user.friends.size.should be 0 - - @user.accept_friend_request @request.id, @group.id - @user.pending_requests.size.should be 1 - @user.friends.size.should be 1 - @user.friends.include?(@person_one).should be true - - @user.ignore_friend_request @request_two.id - @user.pending_requests.size.should be 0 - @user.friends.size.should be 1 - @user.friends.include?(@person_two).should be false - - end - - end - end - describe 'profiles' do it 'should be able to update their profile and send it to their friends' do Factory.create(:person) @@ -206,204 +33,5 @@ describe User do end end - describe 'receiving' do - before do - @user2 = Factory.create(:user) - @user.friends << @user2.person - @user2.friends << @user.person - @user.person.user_refs += 1 - @user2.person.user_refs += 1 - @user.save - @user2.save - end - it 'should be able to parse and store a status message from xml' do - status_message = @user2.post :status_message, :message => 'store this!' - person = @user2.person - - xml = status_message.to_diaspora_xml - @user2.destroy - status_message.destroy - StatusMessage.all.size.should == 0 - @user.receive( xml ) - - person.posts.first.message.should == 'store this!' - StatusMessage.all.size.should == 1 - end - end - - describe 'unfriending' do - before do - @user2 = Factory.create :user - @group2 = @user2.group(:name => "Gross people") - - request = @user.send_friend_request_to( @user2.receive_url, @group.id) - request.reverse_for @user2 - @user2.activate_friend(@user.person, @group2) - @user.receive request.to_diaspora_xml - end - - it 'should unfriend the other user on the same seed' do - @user.reload - @user2.reload - - @user.friends.count.should == 1 - @user2.friends.count.should == 1 - - @user.person.user_refs.should == 1 - - @user2.person.user_refs.should == 1 - - @user2.unfriend @user.person - @user2.friends.count.should be 0 - - @user.person.reload - @user.person.user_refs.should == 0 - - @user.unfriended_by @user2.person - - @user2.person.reload - @user2.person.user_refs.should == 0 - - @group.reload - @group2.reload - @group.people.count.should == 0 - @group2.people.count.should == 0 - end - end - - 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 add the post to that user's posts when a user posts it" do - status_message = @user.post :status_message, :message => "hi" - @user.reload - @user.posts.include?(status_message).should be true - end - - it 'should be removed on unfriending' do - status_message = @user2.post :status_message, :message => "hi" - @user.receive status_message.to_diaspora_xml - @user.reload - - @user.posts.count.should == 1 - - @user.unfriend(@user2.person) - - @user.reload - @user.posts.count.should == 0 - - 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.person, @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 - - describe 'group streams' do - before do - @group = @user.group(:name => 'heroes') - @group2 = @user.group(:name => 'stuff') - - @user2 = Factory.create :user - @user.activate_friend(@user2.person, @group) - - @user3 = Factory.create :user - @user.activate_friend(@user3.person, @group2) - - @user4 = Factory.create :user - @user.activate_friend(@user4.person, @group2) - end - - it 'should generate a valid stream for a group of people' do - status_message1 = @user2.post :status_message, :message => "hi" - status_message2 = @user3.post :status_message, :message => "heyyyy" - status_message3 = @user4.post :status_message, :message => "yooo" - - @user.receive status_message1.to_diaspora_xml - @user.receive status_message2.to_diaspora_xml - @user.receive status_message3.to_diaspora_xml - @user.reload - - @user.posts_for(:group => @group).include?(status_message1).should be true - @user.posts_for(:group => @group).include?(status_message2).should be false - @user.posts_for(:group => @group).include?(status_message3).should be false - - @user.posts_for(:group => @group2).include?(status_message1).should be false - @user.posts_for(:group => @group2).include?(status_message2).should be true - @user.posts_for(:group => @group2).include?(status_message3).should be true - end - end - end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index d0b2759cb..e5482c521 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -76,3 +76,9 @@ end def message_queue Post.send(:class_variable_get, :@@queue) end + + def friend_users(user1, group1, user2, group2) + request = user1.send_friend_request_to(user2.receive_url, group1.id) + reversed_request = user2.accept_friend_request( request.id, group2.id) + user1.receive reversed_request.to_diaspora_xml + end