IZ MS moved contact_for to querying and added tests

This commit is contained in:
zhitomirskiyi 2010-11-03 10:59:56 -07:00
parent 5c6c43ca4e
commit c6e9b94f4f
3 changed files with 57 additions and 32 deletions

View file

@ -32,6 +32,15 @@ module Diaspora
end
end
def contact_for(person)
id = person.id
contact_for_person_id(id)
end
def contact_for_person_id(person_id)
friends.first(:person_id => person_id)
end
def friends_not_in_aspect( aspect )
person_ids = Contact.all(:user_id => self.id, :aspect_ids.ne => aspect._id).collect{|x| x.person_id }
Person.all(:id.in => person_ids)

View file

@ -6,13 +6,18 @@ require 'spec_helper'
describe User do
let(:user) {make_user}
let!(:user2) { Factory(:user_with_aspect) }
let(:person_one) { Factory.create :person }
let(:person_two) { Factory.create :person }
let(:person_three) { Factory.create :person }
context 'with two posts' do
let!(:status_message1) { user2.post :status_message, :message => "hi", :to => user2.aspects.first.id }
let!(:status_message2) { user2.post :status_message, :message => "hey", :public => true , :to => user2.aspects.first.id }
describe "#visible_posts" do
it "queries by person id" do
@ -38,7 +43,6 @@ describe User do
end
context 'with two users' do
let!(:user) {make_user}
let!(:first_aspect) {user.aspects.create(:name => 'bruisers')}
let!(:second_aspect) {user.aspects.create(:name => 'losers')}
@ -100,7 +104,49 @@ describe User do
end
end
context 'contact querying' do
let(:person_one) { Factory.create :person }
let(:person_two) { Factory.create :person }
let(:person_three) { Factory.create :person }
let(:aspect) { user.aspects.create(:name => 'heroes') }
describe '#contact_for_person_id' do
it 'returns a contact' do
contact = Contact.create(:user => user, :person => person_one, :aspects => [aspect])
user.friends << contact
user.contact_for_person_id(person_one.id).should be_true
end
it 'returns the correct contact' do
contact = Contact.create(:user => user, :person => person_one, :aspects => [aspect])
user.friends << contact
contact2 = Contact.create(:user => user, :person => person_two, :aspects => [aspect])
user.friends << contact2
contact3 = Contact.create(:user => user, :person => person_three, :aspects => [aspect])
user.friends << contact3
user.contact_for_person_id(person_two.id).person.should == person_two
end
it 'returns nil for a non-contact' do
user.contact_for_person_id(person_one.id).should be_nil
end
it 'returns nil when someone else has contact with the target' do
contact = Contact.create(:user => user, :person => person_one, :aspects => [aspect])
user.friends << contact
user2.contact_for_person_id(person_one.id).should be_nil
end
end
describe '#contact_for' do
it 'takes a person_id and returns a contact' do
user.should_receive(:contact_for_person_id).with(person_one.id)
user.contact_for(person_one)
end
end
end
describe '#albums_by_aspect' do
let!(:first_aspect) {user2.aspects.create(:name => 'bruisers')}

View file

@ -25,37 +25,7 @@ describe Diaspora::UserModules::Friending do
Notifier.stub!(:request_accepted).and_return(deliverable)
end
describe '#contact_for' do
it 'returns a contact' do
contact = Contact.create(:user => user, :person => person_one, :aspects => [aspect])
user.friends << contact
user.contact_for(person_one).should be_true
end
it 'returns the correct contact' do
contact = Contact.create(:user => user, :person => person_one, :aspects => [aspect])
user.friends << contact
contact2 = Contact.create(:user => user, :person => person_two, :aspects => [aspect])
user.friends << contact2
contact3 = Contact.create(:user => user, :person => person_three, :aspects => [aspect])
user.friends << contact3
user.contact_for(person_two).person.should == person_two
end
it 'returns nil for a non-contact' do
user.contact_for(person_one).should be_nil
end
it 'returns nil when someone else has contact with the target' do
contact = Contact.create(:user => user, :person => person_one, :aspects => [aspect])
user.friends << contact
user2.contact_for(person_one).should be_nil
end
end
context 'friend requesting' do