Broke up user spec, put user update back in routes
This commit is contained in:
parent
82f53663ab
commit
55d84b3288
9 changed files with 408 additions and 495 deletions
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 "<title>yessir</title>"
|
||||
body.to_xml.to_s.should include "<body>penguins</body>"
|
||||
end
|
||||
|
||||
it 'should marshal serialized XML to object' do
|
||||
xml = "<blog>\n <title>yessir</title>\n <body>I hate WALRUSES!</body>\n</blog>"
|
||||
parsed = Blog.from_xml(xml)
|
||||
parsed.body.should == "I hate WALRUSES!"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -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 "<title>Reddit</title>"
|
||||
message.to_xml.to_s.should include "<link>http://reddit.com/</link>"
|
||||
end
|
||||
|
||||
it 'should marshal serialized XML to object' do
|
||||
xml = "<bookmark><title>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
|
||||
125
spec/models/user/receive_spec.rb
Normal file
125
spec/models/user/receive_spec.rb
Normal file
|
|
@ -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
|
||||
223
spec/models/user/user_friending_spec.rb
Normal file
223
spec/models/user/user_friending_spec.rb
Normal file
|
|
@ -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
|
||||
43
spec/models/user/visible_posts_spec.rb
Normal file
43
spec/models/user/visible_posts_spec.rb
Normal file
|
|
@ -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
|
||||
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue