diaspora/spec/lib/diaspora/ostatus_builder_spec.rb
The Lambda Calculus e7828dcae8 Squashed commit of the following:
commit 740296e86fdd080e6e787c5c024a6b609782d82f
Author: The Lambda Calculus <code@thelambdacalculus.net>
Date:   Mon Oct 10 16:49:35 2011 -0400

    Wrote rspec for atom feed validation. [Finishes issue #1408]

commit e2999cbe588bcb32f35f05120743627cf3b31f56
Author: The Lambda Calculus <code@thelambdacalculus.net>
Date:   Thu Sep 29 18:28:14 2011 -0400

    Adjusted placement of invalid 'link' elements outside of 'author' element. Feed now validates, though warnings/suggestions still exist. [Issue #1408]
2011-10-11 01:43:11 -04:00

61 lines
2.3 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'
require File.join(Rails.root, 'lib/diaspora/ostatus_builder')
require 'nokogiri/xml'
describe Diaspora::OstatusBuilder do
before do
@aspect = alice.aspects.first
@public_status_messages = 3.times.inject([]) do |arr,n|
s = alice.post(:status_message, :text => "hey#{n}", :public => true, :to => @aspect.id)
arr << s
end
@private_status_messages = 3.times.inject([]) do |arr,n|
s = alice.post(:status_message, :text => "secret_ney#{n}", :public => false, :to => @aspect.id)
arr << s
end
director = Diaspora::Director.new;
@atom = director.build(Diaspora::OstatusBuilder.new(alice, @public_status_messages))
end
it 'should include a users posts' do
@public_status_messages.each{ |status| @atom.should include status.text}
end
it 'should iterate through all objects, and not stop if it runs into a post without a to_activity' do
messages = @public_status_messages.collect{|x| x.text}
@public_status_messages.insert(1, [])
director = Diaspora::Director.new;
atom2 = director.build(Diaspora::OstatusBuilder.new(alice, @public_status_messages))
messages.each{ |message| atom2.should include message }
end
include Oink::InstanceTypeCounter
it 'does not query the db for the author of every post' do
alice.person #Preload user.person
ActiveRecord::Base.reset_instance_type_count
director = Diaspora::Director.new
messages = StatusMessage.where(:author_id => alice.person.id, :public => true)
builder = Diaspora::OstatusBuilder.new(alice, messages)
director.build( builder )
report_hash["Person"].should be_nil #No people should have been instantiated
end
it 'produces a valid atom feed' do
alice.person #Preload user.person
ActiveRecord::Base.reset_instance_type_count
director = Diaspora::Director.new
messages = StatusMessage.where(:author_id => alice.person.id, :public => true)
builder = Diaspora::OstatusBuilder.new(alice, messages)
feed = Nokogiri::XML(director.build( builder ))
feed_schema = Nokogiri::XML::RelaxNG(File.open(File.join(Rails.root,'spec/lib/diaspora/atom.rng')))
feed_schema.validate(feed).should be_empty
end
end