diaspora/spec/models/request_spec.rb
2011-09-14 11:23:12 -07:00

122 lines
3.6 KiB
Ruby

# Copyright (c) 2010-2011, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
require 'spec_helper'
describe Request do
before do
@aspect = alice.aspects.first
end
describe 'validations' do
before do
@request = Request.diaspora_initialize(:from => alice.person, :to => eve.person, :into => @aspect)
end
it 'is valid' do
@request.sender.should == alice.person
@request.recipient.should == eve.person
@request.aspect.should == @aspect
@request.should be_valid
end
it 'is from a person' do
@request.sender = nil
@request.should_not be_valid
end
it 'is to a person' do
@request.recipient = nil
@request.should_not be_valid
end
it 'is not necessarily into an aspect' do
@request.aspect = nil
@request.should be_valid
end
it 'is not from an existing friend' do
Contact.create(:user => eve, :person => alice.person, :aspects => [eve.aspects.first])
@request.should_not be_valid
end
it 'is not to yourself' do
@request = Request.diaspora_initialize(:from => alice.person, :to => alice.person, :into => @aspect)
@request.should_not be_valid
end
end
describe '#notification_type' do
it 'returns request_accepted' do
person = Factory :person
request = Request.diaspora_initialize(:from => alice.person, :to => eve.person, :into => @aspect)
alice.contacts.create(:person_id => person.id)
request.notification_type(alice, person).should == Notifications::StartedSharing
end
end
describe '#subscribers' do
it 'returns an array with to field on a request' do
request = Request.diaspora_initialize(:from => alice.person, :to => eve.person, :into => @aspect)
request.subscribers(alice).should =~ [eve.person]
end
end
describe '#receive' do
it 'creates a contact' do
request = Request.diaspora_initialize(:from => alice.person, :to => eve.person, :into => @aspect)
lambda{
request.receive(eve, alice.person)
}.should change{
eve.contacts(true).size
}.by(1)
end
it 'sets mutual if a contact already exists' do
alice.share_with(eve.person, alice.aspects.first)
lambda {
Request.diaspora_initialize(:from => eve.person, :to => alice.person,
:into => eve.aspects.first).receive(alice, eve.person)
}.should change {
alice.contacts.find_by_person_id(eve.person.id).mutual?
}.from(false).to(true)
end
it 'sets sharing' do
Request.diaspora_initialize(:from => eve.person, :to => alice.person,
:into => eve.aspects.first).receive(alice, eve.person)
alice.contact_for(eve.person).should be_sharing
end
end
context 'xml' do
before do
@request = Request.diaspora_initialize(:from => alice.person, :to => eve.person, :into => @aspect)
@xml = @request.to_xml.to_s
end
describe 'serialization' do
it 'produces valid xml' do
@xml.should include alice.person.diaspora_handle
@xml.should include eve.person.diaspora_handle
@xml.should_not include alice.person.exported_key
@xml.should_not include alice.person.profile.first_name
end
end
context 'marshalling' do
it 'produces a request object' do
marshalled = Request.from_xml @xml
marshalled.sender.should == alice.person
marshalled.recipient.should == eve.person
marshalled.aspect.should be_nil
end
end
end
end