diaspora/spec/models/retraction_spec.rb

57 lines
1.9 KiB
Ruby

# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
require 'spec_helper'
describe Retraction do
let(:user) { make_user }
let(:person) { Factory(:person) }
let(:aspect) { user.aspects.create(:name => "Bruisers") }
let!(:activation) { user.activate_contact(person, aspect) }
let!(:post) { user.post :status_message, :message => "Destroy!", :to => aspect.id }
describe 'serialization' do
it 'should have a post id after serialization' do
retraction = Retraction.for(post)
xml = retraction.to_xml.to_s
xml.include?(post.id.to_s).should == true
end
end
describe '#subscribers' do
it 'returns the subscribers to the post for all objects other than person' do
retraction = Retraction.for(post)
obj = retraction.instance_variable_get(:@object)
wanted_subscribers = obj.subscribers(user)
obj.should_receive(:subscribers).with(user).and_return(wanted_subscribers)
retraction.subscribers(user).should =~ wanted_subscribers
end
context 'hax' do
it 'barfs if the type is a person, and subscribers instance varabile is not set' do
retraction = Retraction.for(user)
obj = retraction.instance_variable_get(:@object)
proc{retraction.subscribers(user)}.should raise_error
end
it 'returns manually set subscribers' do
retraction = Retraction.for(user)
retraction.subscribers = "fooey"
retraction.subscribers(user).should == 'fooey'
end
end
end
describe 'dispatching' do
it 'should dispatch a retraction on delete' do
Factory.create(:person)
m = mock()
m.should_receive(:post)
Postzord::Dispatch.should_receive(:new).with(instance_of(User), instance_of(Retraction)).and_return(m)
post.destroy
end
end
end