diff --git a/Gemfile b/Gemfile
index 00dd77f64..274a0b8f5 100644
--- a/Gemfile
+++ b/Gemfile
@@ -11,7 +11,6 @@ gem "haml"
gem "devise", :git => "git://github.com/plataformatec/devise.git"
gem 'roxml', :git => "git://github.com/Empact/roxml.git"
-
gem 'dm-core'
group :test do
@@ -22,6 +21,7 @@ group :test do
gem 'redgreen'
gem 'autotest'
gem 'factory_girl_rails'
+ gem 'database_cleaner'
end
group :development do
diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb
index 5b53d898e..0d9e1b9d8 100644
--- a/app/controllers/status_messages_controller.rb
+++ b/app/controllers/status_messages_controller.rb
@@ -1,6 +1,5 @@
class StatusMessagesController < ApplicationController
before_filter :authenticate_user!
- include StatusMessagesHelper
def index
@status_messages = StatusMessage.criteria.all.order_by( [:created_at, :desc] )
@@ -8,7 +7,7 @@ class StatusMessagesController < ApplicationController
respond_to do |format|
format.html
- format.xml {render :xml => StatusMessages.new(@status_messages).to_xml }
+ format.xml {render :xml => Post.build_xml_for(@status_messages)}
format.json { render :json => @status_messages }
end
diff --git a/app/helpers/status_messages_helper.rb b/app/helpers/status_messages_helper.rb
index 5d1bcdc93..a2b81e2e3 100644
--- a/app/helpers/status_messages_helper.rb
+++ b/app/helpers/status_messages_helper.rb
@@ -9,14 +9,4 @@ module StatusMessagesHelper
end
end
- class StatusMessages
- include ROXML
-
- def initialize(messages=[])
- @statusmessages = messages
- end
-
- xml_accessor :statusmessages, :as => [StatusMessage]
- attr_accessor :statusmessages
- end
end
diff --git a/config/environments/test.rb b/config/environments/test.rb
index 40d222032..1a9134407 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -29,4 +29,18 @@ Diaspora::Application.configure do
# This is necessary if your schema can't be completely dumped by the schema dumper,
# like if you have constraints or database-specific column types
# config.active_record.schema_format = :sql
+ #
+ #
+ #
+
+
+
+begin
+ require 'database_cleaner'
+ DatabaseCleaner.strategy = :truncation
+ DatabaseCleaner.orm = "mongoid"
+rescue LoadError => ignore_if_database_cleaner_not_present
+ puts "Error on cleaner"
+end
+
end
diff --git a/lib/common.rb b/lib/common.rb
index 2c20d85cc..14714245c 100644
--- a/lib/common.rb
+++ b/lib/common.rb
@@ -4,23 +4,18 @@ module Diaspora
def self.included(klass)
klass.class_eval do
after_save :notify_friends
-
@@queue = MessageHandler.new
def notify_friends
- if self.owner == User.first.email
- xml = Post.build_xml_for(self)
- @@queue.add_post_request( friends_with_permissions, xml )
- @@queue.process
+ if self.owner == User.first.email
+ xml = Post.build_xml_for(self)
+ @@queue.add_post_request( friends_with_permissions, xml )
+ @@queue.process
end
end
-
- def prep_webhook
- self.to_xml.to_s
- end
- def prep_many
- "#{self.prep_webhook}"
+ def prep_webhook
+ "#{self.to_xml.to_s}"
end
def friends_with_permissions
@@ -29,7 +24,7 @@ module Diaspora
def self.build_xml_for(posts)
xml = ""
- posts.each {|x| xml << x.prep_many}
+ posts.each {|x| xml << x.prep_webhook}
xml = xml + ""
end
end
diff --git a/spec/lib/common_spec.rb b/spec/lib/common_spec.rb
index 90cf185b2..369143186 100644
--- a/spec/lib/common_spec.rb
+++ b/spec/lib/common_spec.rb
@@ -8,7 +8,7 @@ describe Diaspora do
describe Webhooks do
before do
@user = Factory.create(:user)
- @post = Factory.build(:post)
+ @post = Factory.create(:post)
end
it "should add the following methods to Post on inclusion" do
@@ -18,7 +18,7 @@ describe Diaspora do
end
it "should convert an object to a proper webhook" do
- @post.prep_webhook.should == @post.to_xml.to_s
+ @post.prep_webhook.should == "#{@post.to_xml.to_s}"
end
it "should retrieve all valid friend endpoints" do
@@ -31,25 +31,21 @@ describe Diaspora do
@post.friends_with_permissions.should include("http://www.jane.com/receive/")
end
- it "should send all prepped webhooks to be processed" do
- MessageHandler.any_instance.stubs(:add_post_request).returns true
- MessageHandler.any_instance.stubs(:process).returns true
- @post.notify_friends.should be true
+ 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 only sends a user's posts to their friends" do
- Factory.create(:friend, :url => "http://www.bob.com")
- Factory.create(:friend, :url => "http://www.alice.com")
- Factory.create(:status_message)
- Factory.create(:bookmark)
-
- # this is a messagequeue thing; out of scope for webhooks action
+ 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 no duplicate url posts" do
- pending
- # this is a messagequeue thing; out of scope for webhooks action
-
+ 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
diff --git a/spec/models/bookmark_spec.rb b/spec/models/bookmark_spec.rb
index 99cbbd2a5..4cb8b5fc6 100644
--- a/spec/models/bookmark_spec.rb
+++ b/spec/models/bookmark_spec.rb
@@ -13,4 +13,22 @@ describe Bookmark do
n = Factory.create(:bookmark)
n.owner.should == "bob@aol.com"
end
+
+ describe "XML" do
+ it 'should serialize to XML' do
+ Factory.create(:user)
+ message = Factory.create(:bookmark, :title => "Reddit", :link => "http://reddit.com")
+ message.to_xml.to_s.should include "
Reddit"
+ message.to_xml.to_s.should include "http://reddit.com"
+ end
+
+ it 'should marshal serialized XML to object' do
+ xml = "Reddithttp://reddit.combob@aol.com"
+ parsed = Bookmark.from_xml(xml)
+ parsed.title.should == "Reddit"
+ parsed.link.should == "http://reddit.com"
+ parsed.owner.should == "bob@aol.com"
+ parsed.valid?.should be_true
+ end
+ end
end
diff --git a/spec/models/status_message_spec.rb b/spec/models/status_message_spec.rb
index 67e9f4dbb..7bfa0af00 100644
--- a/spec/models/status_message_spec.rb
+++ b/spec/models/status_message_spec.rb
@@ -1,5 +1,4 @@
require File.dirname(__FILE__) + '/../spec_helper'
-include StatusMessagesHelper
describe StatusMessage do
before do
@@ -40,53 +39,12 @@ describe StatusMessage do
end
it 'should marshal serialized XML to object' do
- xml = "\n I hate WALRUSES!Bob@rob.ert"
+ xml = "I hate WALRUSES!Bob@rob.ert"
parsed = StatusMessage.from_xml(xml)
parsed.message.should == "I hate WALRUSES!"
parsed.owner.should == "Bob@rob.ert"
parsed.valid?.should be_true
end
end
-
- describe "retrieving" do
- before do
- @remote = Factory.create(:friend, :url => "fakeurl")#http://localhost:1254/")
- Curl.stub!(:get).and_return(@@remote_xml)
- end
- it "should marshal xml and serialize it without error" do
- StatusMessages.from_xml(@@remote_xml).to_xml.to_s.should == @@remote_xml
- end
- it "marshal retrieved xml" do
- remote_msgs = StatusMessage.retrieve_from_friend(@remote)
- local_msgs = StatusMessages.from_xml(@@remote_xml)
-
-
- remote_msgs.statusmessages.each{ |m| local_msgs.statusmessages.include?(m).should be_true}
- local_msgs.statusmessages.each{ |m| remote_msgs.statusmessages.include?(m).should be_true}
- end
- end
end
-@@remote_xml =
-"
-
- jimmy's 22 whales
- tester@yahoo.com
-
-
- jimmy's 23 whales
- tester@yahoo.com
-
-
- jimmy's 24 whales
- tester@yahoo.com
-
-
- jimmy's 25 whales
- tester@yahoo.com
-
-
- jimmy's 26 whales
- tester@yahoo.com
-
-"
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index bc3f0762a..060511f9a 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -3,6 +3,7 @@
ENV["RAILS_ENV"] ||= 'test'
require File.dirname(__FILE__) + "/../config/environment" unless defined?(Rails)
require 'rspec/rails'
+require 'database_cleaner'
#require File.dirname(__FILE__) + "/factories"
include Devise::TestHelpers
@@ -20,12 +21,21 @@ Rspec.configure do |config|
# config.mock_with :rr
config.mock_with :rspec
- config.fixture_path = "#{::Rails.root}/spec/fixtures"
- config.before(:each) do
- Mongoid.master.collections.select { |c| c.name != 'system.indexes' }.each(&:drop)
+ DatabaseCleaner.strategy = :truncation
+ DatabaseCleaner.orm = "mongoid"
+ config.before(:suite) do
+ DatabaseCleaner.strategy = :transaction
+ DatabaseCleaner.clean_with(:truncation)
+ end
- end
+ config.before(:each) do
+ DatabaseCleaner.start
+ end
+
+ config.after(:each) do
+ DatabaseCleaner.clean
+ end
# If you're not using ActiveRecord, or you'd prefer not to run each of your