DG MS; end of day.

This commit is contained in:
danielvincent 2010-10-11 19:04:27 -07:00
parent b2f3074eb0
commit 948c5d9b02
3 changed files with 151 additions and 20 deletions

View file

@ -14,36 +14,45 @@ module Diaspora
module XML
def execute(user)
builder = Nokogiri::XML::Builder.new do |xml|
xml.user {
xml.username user.username
xml.parent << user.person.to_xml
xml.serialized_private_key user.serialized_private_key
xml.export {
xml.user {
xml.username user.username
xml.serialized_private_key user.serialized_private_key
xml.parent << user.person.to_xml
}
xml.aspects {
user.aspects.each do |aspect|
puts aspect.people.inspect
xml.aspect {
xml.id_ aspect.id
xml._id aspect.id
xml.name aspect.name
xml.people {
xml.person_ids {
aspect.people.each do |person|
xml.person person.to_xml
xml.person_id person.id
end
}
xml.posts {
aspect.posts.find_all_by_person_id(user.person.id).each do |post|
post_doc = post.to_xml
post.comments.each do |comment|
post_doc << comment.to_xml
end
xml.post post_doc
xml.post_ids {
aspect.posts.each do |post|
xml.post_id post.id
end
}
}
end
}
xml.posts {
user.raw_visible_posts.find_all_by_person_id(user.person.id).each do |post|
#post_doc = post.to_xml
#post.comments.each do |comment|
# post_doc << comment.to_xml
#end
xml.post post.to_xml
end
}
}
end

View file

@ -12,9 +12,54 @@ module Diaspora
module Importers
module XML
def execute(user)
def execute(xml)
doc = Nokogiri::XML.parse(xml)
user, person = parse_user(doc)
user
end
def parse_user(doc)
user = User.new
user_doc = doc.xpath('/export/user')
user.username = user_doc.xpath('//user/username').text
user.serialized_private_key= user_doc.xpath('//user/serialized_private_key').text
person = Person.from_xml(user_doc.xpath('//user/person').to_s)
[user, person]
end
def parse_aspects(doc)
aspects = []
aspect_doc = doc.xpath('/export/aspects/aspect')
aspect_doc.each do |x|
puts x.to_s
puts; puts
aspect = Aspect.new
aspect.id = x.xpath('//aspect/_id').text
aspect.name = x.xpath('//aspect/name').text
aspect.post_ids = x.xpath('//aspect/post_ids/post_id').collect(&:text)
aspects << aspect
end
aspects
end
def parse_people(doc)
end
def parse_posts(doc)
end
end
end

View file

@ -28,6 +28,7 @@ describe Diaspora::Importer do
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 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) }
@ -36,21 +37,28 @@ describe Diaspora::Importer do
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) }
before(:all) do
# Friend users
# 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 )
# Generate status messages and receive
# Friend users 4 and 5
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
# Generate status message and recieve between user4 and user5
user4.receive status_message7.to_diaspora_xml
end
it 'should gut check this test' do
@ -67,6 +75,75 @@ describe Diaspora::Importer do
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
# Generate exported XML for user1
exporter = Diaspora::Exporter.new(Diaspora::Exporters::XML)
@xml = exporter.execute(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
@importer = Diaspora::Importer.new(Diaspora::Importers::XML)
@doc = Nokogiri::XML::parse(@xml)
end
it 'should import a user' do
user = @importer.execute(@xml)
user.class.should == User
end
describe '#parse_user' do
before do
@user, @person = @importer.parse_user(@doc)
end
it 'should set username' do
@user.username.should == @old_user.username
end
it 'should set private key' do
@user.serialized_private_key.should == @old_user.serialized_private_key
end
it 'should ensure a match between persons public and private keys' do
pending
end
end
describe '#parse_aspects' do
before do
@aspects = @importer.parse_aspects(@doc)
end
it 'should return an array' do
@aspects.count.should == 6
end
it 'should should have post ids' do
puts @aspects.inspect
@aspects.any?{|x| x.post_ids.count > 0}.should be true
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
end
end
end
end