190 lines
6 KiB
Ruby
190 lines
6 KiB
Ruby
# Copyright 2010 Diaspora Inc.
|
|
#
|
|
# This file is part of Diaspora.
|
|
#
|
|
# Diaspora is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# Diaspora is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with Diaspora. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
|
|
|
|
require File.dirname(__FILE__) + '/../spec_helper'
|
|
|
|
describe Person do
|
|
before do
|
|
@user = Factory.create(:user)
|
|
@user2 = Factory.create(:user)
|
|
@person = Factory.create(:person)
|
|
@aspect = @user.aspect(:name => "Dudes")
|
|
@aspect2 = @user2.aspect(:name => "Abscence of Babes")
|
|
end
|
|
|
|
it 'should not allow two people with the same email' do
|
|
person_two = Factory.build(:person, :url => @person.email)
|
|
person_two.valid?.should == false
|
|
end
|
|
|
|
describe 'xml' do
|
|
before do
|
|
@xml = @person.to_xml.to_s
|
|
end
|
|
|
|
it 'should serialize to xml' do
|
|
@xml.include?("person").should == true
|
|
end
|
|
|
|
it 'should have a profile in its xml' do
|
|
@xml.include?("first_name").should == true
|
|
end
|
|
end
|
|
|
|
it 'should know when a post belongs to it' do
|
|
person_message = Factory.create(:status_message, :person => @person)
|
|
person_two = Factory.create(:person)
|
|
|
|
@person.owns?(person_message).should be true
|
|
person_two.owns?(person_message).should be false
|
|
end
|
|
|
|
it 'should delete all of user except comments upon user deletion' do
|
|
person = Factory.create(:person)
|
|
|
|
Factory.create(:status_message, :person => person)
|
|
Factory.create(:status_message, :person => person)
|
|
Factory.create(:status_message, :person => person)
|
|
Factory.create(:status_message, :person => person)
|
|
|
|
status_message = Factory.create(:status_message, :person => @person)
|
|
|
|
Factory.create(:comment, :person_id => person.id, :text => "yes i do", :post => status_message)
|
|
Factory.create(:comment, :person_id => person.id, :text => "i love you", :post => status_message)
|
|
Factory.create(:comment, :person_id => person.id, :text => "hello", :post => status_message)
|
|
Factory.create(:comment, :person_id => @person.id, :text => "you are creepy", :post => status_message)
|
|
|
|
person.destroy
|
|
|
|
Post.count.should == 1
|
|
Comment.all.count.should == 4
|
|
status_message.comments.count.should == 4
|
|
end
|
|
|
|
describe "unfriending" do
|
|
it 'should not delete an orphaned friend' do
|
|
request = @user.send_friend_request_to @person, @aspect
|
|
|
|
@user.activate_friend(@person, @aspect)
|
|
@user.reload
|
|
|
|
Person.all.count.should == 3
|
|
@user.friends.count.should == 1
|
|
@user.unfriend(@person)
|
|
@user.reload
|
|
@user.friends.count.should == 0
|
|
Person.all.count.should == 3
|
|
end
|
|
|
|
it 'should not delete an un-orphaned friend' do
|
|
request = @user.send_friend_request_to @person, @aspect
|
|
request2 = @user2.send_friend_request_to @person, @aspect2
|
|
|
|
@user.activate_friend(@person, @aspect)
|
|
@user2.activate_friend(@person, @aspect2)
|
|
|
|
@user.reload
|
|
@user2.reload
|
|
|
|
Person.all.count.should == 3
|
|
@user.friends.count.should == 1
|
|
@user2.friends.count.should == 1
|
|
|
|
@user.unfriend(@person)
|
|
@user.reload
|
|
@user2.reload
|
|
@user.friends.count.should == 0
|
|
@user2.friends.count.should == 1
|
|
|
|
Person.all.count.should == 3
|
|
end
|
|
end
|
|
|
|
describe 'searching' do
|
|
before do
|
|
@friend_one = Factory.create(:person)
|
|
@friend_two = Factory.create(:person)
|
|
@friend_three = Factory.create(:person)
|
|
@friend_four = Factory.create(:person)
|
|
|
|
@friend_one.profile.first_name = "Robert"
|
|
@friend_one.profile.last_name = "Grimm"
|
|
@friend_one.profile.save
|
|
|
|
@friend_two.profile.first_name = "Eugene"
|
|
@friend_two.profile.last_name = "Weinstein"
|
|
@friend_two.save
|
|
|
|
@friend_three.profile.first_name = "Yevgeniy"
|
|
@friend_three.profile.last_name = "Dodis"
|
|
@friend_three.save
|
|
|
|
@friend_four.profile.first_name = "Casey"
|
|
@friend_four.profile.last_name = "Grippi"
|
|
@friend_four.save
|
|
end
|
|
|
|
it 'should yield search results on partial names' do
|
|
people = Person.search("Eu")
|
|
people.include?(@friend_two).should == true
|
|
people.include?(@friend_one).should == false
|
|
people.include?(@friend_three).should == false
|
|
people.include?(@friend_four).should == false
|
|
|
|
people = Person.search("Wei")
|
|
people.include?(@friend_two).should == true
|
|
people.include?(@friend_one).should == false
|
|
people.include?(@friend_three).should == false
|
|
people.include?(@friend_four).should == false
|
|
|
|
people = Person.search("Gri")
|
|
people.include?(@friend_one).should == true
|
|
people.include?(@friend_four).should == true
|
|
people.include?(@friend_two).should == false
|
|
people.include?(@friend_three).should == false
|
|
end
|
|
|
|
it 'should search by email exactly' do
|
|
|
|
stub_success("tom@tom.joindiaspora.com")
|
|
Person.by_webfinger(@friend_one.email).should == @friend_one
|
|
end
|
|
|
|
it 'should create a stub for a remote user' do
|
|
|
|
stub_success("tom@tom.joindiaspora.com")
|
|
tom = Person.by_webfinger('tom@tom.joindiaspora.com')
|
|
tom.real_name.include?("Hamiltom").should be true
|
|
end
|
|
|
|
describe 'wall posting' do
|
|
it 'should be able to post on another persons wall' do
|
|
pending
|
|
#user2 is in user's aspect, user is in aspect2 on user
|
|
friend_users(@user, @aspect, @user2, @aspect2)
|
|
|
|
@user.person.post_to_wall(:person => @user2.person, :message => "youve got a great smile")
|
|
@user.person.wall_posts.count.should == 1
|
|
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|