diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 397d48999..efb413b32 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -12,7 +12,7 @@ module ApplicationHelper #i need to check some sort of metadata field - doc.xpath("//post").each do |post| #this is the post wrapper + doc.xpath("/XML/posts/post").each do |post| #this is the post wrapper post.children.each do|type| #now the text of post itself is the type #type object to xml is the the thing we want to from_xml check_and_save_post(type) diff --git a/lib/common.rb b/lib/common.rb index 14714245c..8e34b4591 100644 --- a/lib/common.rb +++ b/lib/common.rb @@ -19,14 +19,28 @@ module Diaspora end def friends_with_permissions - Friend.only(:url).map{|x| x = x.url + "/receive/"} + Friend.only(:url).map{|x| x = x.url + "receive/"} end def self.build_xml_for(posts) - xml = "" + xml = "" + xml += Post.generate_header + xml += "" posts.each {|x| xml << x.prep_webhook} - xml = xml + "" + xml += "" + xml += "" end + + + def self.generate_header + " + + #{User.first.email} + #{User.first.email} + + " + end + end end end diff --git a/spec/helpers/parser_spec.rb b/spec/helpers/parser_spec.rb index 978a5c83e..542a1aa0a 100644 --- a/spec/helpers/parser_spec.rb +++ b/spec/helpers/parser_spec.rb @@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/../spec_helper' include ApplicationHelper -describe DashboardHelper do +describe ApplicationHelper do before do Factory.create(:user) end @@ -18,23 +18,24 @@ describe DashboardHelper do end it 'should discard posts where it does not know the type' do - xml = " + xml = " \n Here is another message\n a@a.com\n a@a.com\n a@a.com\n \n HEY DUDE\n a@a.com\n a@a.com\n a@a.com\n - " + " store_posts_from_xml(xml) Post.count.should == 2 end it 'should discard types which are not of type post' do - xml = " + xml = " \n Here is another message\n a@a.com\n a@a.com\n a@a.com\n \n HEY DUDE\n a@a.com\n a@a.com\n a@a.com\n - " + " store_posts_from_xml(xml) Post.count.should == 2 end end + diff --git a/spec/lib/common_spec.rb b/spec/lib/common_spec.rb index 369143186..ec9433119 100644 --- a/spec/lib/common_spec.rb +++ b/spec/lib/common_spec.rb @@ -7,56 +7,89 @@ describe Diaspora do describe Webhooks do before do - @user = Factory.create(:user) - @post = Factory.create(:post) + Factory.create(:user, :email => "bob@aol.com") end - it "should add the following methods to Post on inclusion" do - @post.respond_to?(:notify_friends).should be true - @post.respond_to?(:prep_webhook).should be true - @post.respond_to?(:friends_with_permissions).should be true + describe "header" do + before do + Factory.create(:status_message) + Factory.create(:bookmark) + stream = Post.stream + @xml = Post.build_xml_for(stream) + end + + it "should generate" do + @xml.should include "" + @xml.should include "" + end + + it "should provide a sender" do + @xml.should include "" + @xml.should include "" + end + + it "should provide the owner's email" do + @xml.should include "bob@aol.com" + end + + it "should provide the owner's url" do + pending "user does not have url field" + end end - it "should convert an object to a proper webhook" do - @post.prep_webhook.should == "#{@post.to_xml.to_s}" + describe "body" do + before do + @post = Factory.create(:post) + end + + it "should add the following methods to Post on inclusion" do + @post.respond_to?(:notify_friends).should be true + @post.respond_to?(:prep_webhook).should be true + @post.respond_to?(:friends_with_permissions).should be true + end + + it "should convert an object to a proper webhook" do + @post.prep_webhook.should == "#{@post.to_xml.to_s}" + end + + it "should retrieve all valid friend endpoints" do + Factory.create(:friend, :url => "http://www.bob.com/") + Factory.create(:friend, :url => "http://www.alice.com/") + Factory.create(:friend, :url => "http://www.jane.com/") + + @post.friends_with_permissions.should include("http://www.bob.com/receive/") + @post.friends_with_permissions.should include("http://www.alice.com/receive/") + @post.friends_with_permissions.should include("http://www.jane.com/receive/") + end + + it "should send an owners post to their friends" do + Post.stub(:build_xml_for).and_return(true) + Post.should_receive(:build_xml_for).and_return true + @post.save + end + + it "should check that it does not send a friends post to an owners friends" do + Post.stub(:build_xml_for).and_return(true) + Post.should_not_receive(:build_xml_for) + Factory.create(:post, :owner => "nottheowner@post.com") + end + + it "should ensure one url is created for every friend" do + 5.times {Factory.create(:friend)} + @post.friends_with_permissions.size.should == 5 + end + + it "should build an xml object containing multiple Post types" do + Factory.create(:status_message) + Factory.create(:bookmark) + + stream = Post.stream + xml = Post.build_xml_for(stream) + xml.should include "" + xml.should include "" + end end - it "should retrieve all valid friend endpoints" do - Factory.create(:friend, :url => "http://www.bob.com") - Factory.create(:friend, :url => "http://www.alice.com") - Factory.create(:friend, :url => "http://www.jane.com") - - @post.friends_with_permissions.should include("http://www.bob.com/receive/") - @post.friends_with_permissions.should include("http://www.alice.com/receive/") - @post.friends_with_permissions.should include("http://www.jane.com/receive/") - end - - it "should send an owners post to their friends" do - Post.stub(:build_xml_for).and_return(true) - Post.should_receive(:build_xml_for).and_return true - @post.save - end - - it "should check that it does not send a friends post to an owners friends" do - Post.stub(:build_xml_for).and_return(true) - Post.should_not_receive(:build_xml_for) - Factory.create(:post, :owner => "nottheowner@post.com") - end - - it "should ensure one url is created for every friend" do - 5.times {Factory.create(:friend)} - @post.friends_with_permissions.size.should == 5 - end - - it "should build an xml object containing multiple Post types" do - Factory.create(:status_message) - Factory.create(:bookmark) - - stream = Post.stream - xml = Post.build_xml_for(stream) - xml.should include "" - xml.should include "" - end end end