DG MS; made test slower. posts now export correctly.

This commit is contained in:
danielvincent 2010-10-12 15:33:08 -07:00
parent 1d1ff7e330
commit 8720dfa950
3 changed files with 87 additions and 88 deletions

View file

@ -14,12 +14,12 @@ module Diaspora
module XML
def execute(xml)
doc = Nokogiri::XML.parse(xml)
user, person = parse_user(doc)
user, person = parse_user_and_person(doc)
user
end
def parse_user(doc)
def parse_user_and_person(doc)
user = User.new
user_doc = doc.xpath('/export/user')
user.username = user_doc.xpath('//user/username').text
@ -54,9 +54,12 @@ module Diaspora
def parse_posts(doc)
post_doc = doc.xpath('/export/posts/status_message')
post_doc.inject([]) do |posts,curr|
posts << StatusMessage.from_xml(curr.to_s)
end
end
end
end
end

View file

@ -9,15 +9,17 @@ describe Diaspora::Exporter do
let!(:user1) { Factory(:user) }
let!(:user2) { Factory(:user) }
let!(:user3) { Factory(:user) }
let(:aspect1) { user1.aspect(:name => "Work") }
let(:aspect2) { user2.aspect(:name => "Family") }
let(:aspect3) { user3.aspect(:name => "Pivots") }
let!(:status_message1) { user1.post(:status_message, :message => "One", :public => true, :to => aspect1.id) }
let!(:status_message2) { user1.post(:status_message, :message => "Two", :public => true, :to => aspect1.id) }
let!(:status_message3) { user2.post(:status_message, :message => "Three", :public => false, :to => aspect2.id) }
let!(:exported) { Diaspora::Exporter.new(Diaspora::Exporters::XML).execute(user1) }
let(:exported) { Diaspora::Exporter.new(Diaspora::Exporters::XML).execute(user1) }
it 'should include a users posts' do
exported.should include status_message1.message
@ -40,4 +42,10 @@ describe Diaspora::Exporter do
posts = doc.xpath('//posts').to_s
posts.should include(status_message1.message)
end
it 'should serialize a users friends' do
friend_users(user1, aspect1, user3, aspect3)
doc = Nokogiri::XML::parse(exported)
doc.xpath('/export/people').to_s.should include user3.person.id.to_s
end
end

View file

@ -8,89 +8,89 @@ require File.join(Rails.root, 'lib/diaspora/importer')
describe Diaspora::Importer do
# Five users on pod
let!(:user1) { Factory(:user) }
let!(:user2) { Factory(:user) }
let!(:user3) { Factory(:user) }
let!(:user4) { Factory(:user) }
let!(:user5) { Factory(:user) }
before(:each) do
# Five users on pod
@user1 = Factory(:user)
@user2 = Factory(:user)
@user3 = Factory(:user)
@user4 = Factory(:user)
@user5 = Factory(:user)
# Two external people referenced on pod
let!(:person1) { Factory(:person) }
let!(:person2) { Factory(:person) }
# Two external people referenced on pod
@person1 = Factory(:person)
@person2 = Factory(:person)
# User1 has four aspects(1-4), each following user has one aspect
let!(:aspect1) { user1.aspect(:name => "Dudes") }
let!(:aspect2) { user1.aspect(:name => "Girls") }
let!(:aspect3) { user1.aspect(:name => "Bros") }
let!(:aspect4) { user1.aspect(:name => "People") }
let!(:aspect5) { user2.aspect(:name => "Abe Lincolns") }
let!(:aspect6) { user3.aspect(:name => "Cats") }
let!(:aspect7) { user4.aspect(:name => "Dogs") }
let!(:aspect8) { user5.aspect(:name => "Hamsters") }
let!(:aspect9) { user5.aspect(:name => "Gophers") }
# User1 has four aspects(1-4), each following user has one aspect
@aspect1 = @user1.aspect(:name => "Dudes")
@aspect2 = @user1.aspect(:name => "Girls")
@aspect3 = @user1.aspect(:name => "Bros")
@aspect4 = @user1.aspect(:name => "People")
@aspect5 = @user2.aspect(:name => "Abe Lincolns")
@aspect6 = @user3.aspect(:name => "Cats")
@aspect7 = @user4.aspect(:name => "Dogs")
@aspect8 = @user5.aspect(:name => "Hamsters")
@aspect9 = @user5.aspect(:name => "Gophers")
# User1 posts one status messages to aspects (1-4), two other users post message to one aspect
let(:status_message1) { user1.post(:status_message, :message => "One", :public => true, :to => aspect1.id) }
let(:status_message2) { user1.post(:status_message, :message => "Two", :public => true, :to => aspect2.id) }
let(:status_message3) { user1.post(:status_message, :message => "Three", :public => false, :to => aspect3.id) }
let(:status_message4) { user1.post(:status_message, :message => "Four", :public => false, :to => aspect4.id) }
let(:status_message5) { user2.post(:status_message, :message => "Five", :public => false, :to => aspect5.id) }
let(:status_message6) { user3.post(:status_message, :message => "Six", :public => false, :to => aspect6.id) }
let(:status_message7) { user5.post(:status_message, :message => "Seven", :public => false, :to => aspect9.id) }
# User1 posts one status messages to aspects (1-4), two other users post message to one aspect
@status_message1 = @user1.post(:status_message, :message => "One", :public => true, :to => @aspect1.id)
@status_message2 = @user1.post(:status_message, :message => "Two", :public => true, :to => @aspect2.id)
@status_message3 = @user1.post(:status_message, :message => "Three", :public => false, :to => @aspect3.id)
@status_message4 = @user1.post(:status_message, :message => "Four", :public => false, :to => @aspect4.id)
@status_message5 = @user2.post(:status_message, :message => "Five", :public => false, :to => @aspect5.id)
@status_message6 = @user3.post(:status_message, :message => "Six", :public => false, :to => @aspect6.id)
@status_message7 = @user5.post(:status_message, :message => "Seven", :public => false, :to => @aspect9.id)
before(:all) do
# Friend users with user1
friend_users( user1, aspect1, user2, aspect5 )
friend_users( user1, aspect2, user3, aspect6 )
friend_users( user1, aspect3, user4, aspect7 )
friend_users( user1, aspect4, user5, aspect8 )
friend_users( @user1, @aspect1, @user2, @aspect5 )
friend_users( @user1, @aspect2, @user3, @aspect6 )
friend_users( @user1, @aspect3, @user4, @aspect7 )
friend_users( @user1, @aspect4, @user5, @aspect8 )
# Friend users 4 and 5
friend_users( user5, aspect9, user4, aspect7 )
friend_users( @user5, @aspect9, @user4, @aspect7 )
# Generate status messages and receive for user1
user2.receive status_message1.to_diaspora_xml
user3.receive status_message2.to_diaspora_xml
user4.receive status_message3.to_diaspora_xml
user5.receive status_message4.to_diaspora_xml
user1.receive status_message5.to_diaspora_xml
user1.receive status_message6.to_diaspora_xml
@user2.receive @status_message1.to_diaspora_xml
@user3.receive @status_message2.to_diaspora_xml
@user4.receive @status_message3.to_diaspora_xml
@user5.receive @status_message4.to_diaspora_xml
@user1.receive @status_message5.to_diaspora_xml
@user1.receive @status_message6.to_diaspora_xml
# Generate status message and recieve between user4 and user5
user4.receive status_message7.to_diaspora_xml
@user4.receive @status_message7.to_diaspora_xml
end
it 'should gut check this test' do
user1.friends.count.should be 4
user1.friends.should include user2.person
user1.friends.should include user3.person
user1.friends.should include user4.person
user1.friends.should include user5.person
@user1.friends.count.should be 4
@user1.friends.should include @user2.person
@user1.friends.should include @user3.person
@user1.friends.should include @user4.person
@user1.friends.should include @user5.person
# User is generated with two pre-populated aspects
user1.aspects.count.should be 6
user1.aspects.find_by_name("Dudes").people.should include user2.person
user1.aspects.find_by_name("Dudes").posts.should include status_message5
@user1.aspects.count.should be 6
@user1.aspects.find_by_name("Dudes").people.should include @user2.person
@user1.aspects.find_by_name("Dudes").posts.should include @status_message5
user1.raw_visible_posts.count.should be 6
user1.raw_visible_posts.find_all_by_person_id(user1.person.id).count.should be 4
user1.raw_visible_posts.find_all_by_person_id(user1.person.id).should_not include status_message7
@user1.raw_visible_posts.count.should be 6
@user1.raw_visible_posts.find_all_by_person_id(@user1.person.id).count.should be 4
@user1.raw_visible_posts.find_all_by_person_id(@user1.person.id).should_not include @status_message7
end
context 'importing a user' do
before(:all) do
before(:each) do
# Generate exported XML for user1
exporter = Diaspora::Exporter.new(Diaspora::Exporters::XML)
@xml = exporter.execute(user1)
@xml = exporter.execute(@user1)
@old_user = @user1
@old_user = user1
@old_aspects = user1.aspects
# Remove user1 from the server
user1.aspects.each( &:delete )
user1.raw_visible_posts.find_all_by_person_id(user1.person.id).each( &:delete )
user1.delete
@user1.aspects.each( &:delete )
@user1.raw_visible_posts.find_all_by_person_id(@user1.person.id).each( &:delete )
@user1.delete
@importer = Diaspora::Importer.new(Diaspora::Importers::XML)
@doc = Nokogiri::XML::parse(@xml)
@ -101,9 +101,9 @@ describe Diaspora::Importer do
user.class.should == User
end
describe '#parse_user' do
before do
@user, @person = @importer.parse_user(@doc)
describe '#parse_user_and_person' do
before(:each) do
@user, @person = @importer.parse_user_and_person(@doc)
end
it 'should set username' do
@ -121,52 +121,40 @@ describe Diaspora::Importer do
end
describe '#parse_aspects' do
before do
@aspects = @importer.parse_aspects(@doc)
end
let(:aspects) { @importer.parse_aspects(@doc) }
it 'should return valid aspects' do
@aspects.all?(&:valid?).should be true
aspects.all?(&:valid?).should be true
end
it 'should return an array' do
@aspects.count.should == 6
aspects.count.should == 6
end
it 'should should have post ids' do
@aspects.any?{|x| x.post_ids.count > 0}.should be true
aspects.any?{|x| x.post_ids.count > 0}.should be true
end
it 'should have person ids' do
@aspects.any?{|x| x.person_ids.count > 0}.should be true
aspects.any?{|x| x.person_ids.count > 0}.should be true
end
end
describe '#parse_people' do
before do
@people = @importer.parse_people(@doc)
end
it 'should return valid people' do
@people.all?(&:valid?).should be true
end
let(:people) { @importer.parse_people(@doc) }
it 'should return an array' do
@people.count.should == 4
people.count.should == 4
end
end
describe '#parse_posts' do
it 'should have a users personal posts' do
pending
@user.raw_visible_posts.find_all_by_person_id(user1.person.id).count.should be 4
let(:posts) { @importer.parse_posts(@doc) }
it 'should return vaild posts' do
posts.all?(&:valid?).should be true
end
end
end
end