From 8720dfa9506a4a35ba5521dd10439d14d3d52206 Mon Sep 17 00:00:00 2001 From: danielvincent Date: Tue, 12 Oct 2010 15:33:08 -0700 Subject: [PATCH] DG MS; made test slower. posts now export correctly. --- lib/diaspora/importer.rb | 9 ++- spec/lib/exporter_spec.rb | 10 ++- spec/lib/importer_spec.rb | 156 ++++++++++++++++++-------------------- 3 files changed, 87 insertions(+), 88 deletions(-) diff --git a/lib/diaspora/importer.rb b/lib/diaspora/importer.rb index 65d95fdc4..ffc226662 100644 --- a/lib/diaspora/importer.rb +++ b/lib/diaspora/importer.rb @@ -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 diff --git a/spec/lib/exporter_spec.rb b/spec/lib/exporter_spec.rb index 0d882bab7..619208baf 100644 --- a/spec/lib/exporter_spec.rb +++ b/spec/lib/exporter_spec.rb @@ -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 diff --git a/spec/lib/importer_spec.rb b/spec/lib/importer_spec.rb index df8474813..87db2b7bf 100644 --- a/spec/lib/importer_spec.rb +++ b/spec/lib/importer_spec.rb @@ -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