diff --git a/app/controllers/invitations_controller.rb b/app/controllers/invitations_controller.rb
index 03567166e..89c774ffd 100644
--- a/app/controllers/invitations_controller.rb
+++ b/app/controllers/invitations_controller.rb
@@ -4,7 +4,7 @@
class InvitationsController < Devise::InvitationsController
- before_filter :check_token, :only => [:edit]
+ before_filter :check_token, :only => [:edit]
def create
@@ -27,7 +27,7 @@ class InvitationsController < Devise::InvitationsController
flash[:notice] = I18n.t('invitations.create.sent') + good_emails.join(', ')
end
- redirect_to :back
+ redirect_to :back
end
def update
diff --git a/app/models/user.rb b/app/models/user.rb
index 781bf8304..7979cbed2 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -10,7 +10,7 @@ class User
include Diaspora::UserModules
include Encryptor::Private
include ActionView::Helpers::TextHelper
-
+
plugin MongoMapper::Devise
devise :invitable, :database_authenticatable, :registerable,
@@ -141,17 +141,6 @@ class User
end
######## Posting ########
- def post(class_name, opts = {})
- post = build_post(class_name, opts)
-
- if post.save
- raise 'MongoMapper failed to catch a failed save' unless post.id
- add_to_streams(post, opts[:to])
- dispatch_post(post, :to => opts[:to])
- end
- post
- end
-
def build_post(class_name, opts = {})
opts[:person] = self.person
opts[:diaspora_handle] = opts[:person].diaspora_handle
@@ -168,7 +157,7 @@ class User
push_to_aspects(post, aspects_from_ids(aspect_ids))
if post.public && post.respond_to?(:message)
-
+
if opts[:url] && post.photos.count > 0
message = truncate(post.message, :length => (140 - (opts[:url].length + 1)))
@@ -201,14 +190,14 @@ class User
if twitter_consumer_secret.blank? || twitter_consumer_secret.blank?
Rails.logger.info "you have a blank twitter key or secret.... you should look into that"
end
-
+
Twitter.configure do |config|
config.consumer_key = twitter_key
config.consumer_secret = twitter_consumer_secret
config.oauth_token = service.access_token
config.oauth_token_secret = service.access_secret
end
-
+
Twitter.update(message)
end
@@ -273,7 +262,7 @@ class User
# calling nil? performs a necessary evaluation.
if person.owner_id
Rails.logger.info("event=push_to_person route=local sender=#{self.diaspora_handle} recipient=#{person.diaspora_handle} payload_type=#{post.class}")
- Jobs::Receive.perform(person.owner_id, post.to_diaspora_xml, self.person.id)
+ Resque.enqueue(Jobs::Receive, person.owner_id, post.to_diaspora_xml, self.person.id)
else
xml = salmon.xml_for person
Rails.logger.info("event=push_to_person route=remote sender=#{self.diaspora_handle} recipient=#{person.diaspora_handle} payload_type=#{post.class}")
@@ -281,24 +270,12 @@ class User
end
end
-
-
def salmon(post)
created_salmon = Salmon::SalmonSlap.create(self, post.to_diaspora_xml)
created_salmon
end
######## Commenting ########
- def comment(text, options = {})
- comment = build_comment(text, options)
-
- if comment.save
- raise 'MongoMapper failed to catch a failed save' unless comment.id
- dispatch_comment comment
- end
- comment
- end
-
def build_comment(text, options = {})
comment = Comment.new(:person_id => self.person.id,
:diaspora_handle => self.person.diaspora_handle,
@@ -321,7 +298,7 @@ class User
#push DOWNSTREAM (to original audience)
Rails.logger.info "event=dispatch_comment direction=downstream user=#{self.diaspora_handle} comment=#{comment.id}"
aspects = aspects_with_post(comment.post_id)
-
+
#just socket to local users, as the comment has already
#been associated and saved by post owner
# (we'll push to all of their aspects for now, the comment won't
diff --git a/spec/controllers/publics_controller_spec.rb b/spec/controllers/publics_controller_spec.rb
index 52284f429..58a6e1b06 100644
--- a/spec/controllers/publics_controller_spec.rb
+++ b/spec/controllers/publics_controller_spec.rb
@@ -14,7 +14,6 @@ describe PublicsController do
let(:xml) { "" }
context 'success cases' do
it 'should 200 on successful receipt of a request' do
- Resque.should_receive(:enqueue)
post :receive, :id =>user.person.id, :xml => xml
response.code.should == '200'
end
diff --git a/spec/helper_methods.rb b/spec/helper_methods.rb
index c4718aa1d..722a199e6 100644
--- a/spec/helper_methods.rb
+++ b/spec/helper_methods.rb
@@ -22,27 +22,37 @@ module HelperMethods
user.stub!(:push_to_person)
end
+ def fantasy_resque
+ former_value = $process_queue
+ $process_queue = true
+ result = yield
+ $process_queue = former_value
+ result
+ end
+
def connect_users(user1, aspect1, user2, aspect2)
- user1.send_contact_request_to(user2.person, aspect1)
+ fantasy_resque do
+ user1.send_contact_request_to(user2.person, aspect1)
- user1.reload
- aspect1.reload
- user2.reload
- aspect2.reload
+ user1.reload
+ aspect1.reload
+ user2.reload
+ aspect2.reload
- new_request = user2.pending_requests.find_by_from_id!(user1.person.id)
+ new_request = user2.pending_requests.find_by_from_id!(user1.person.id)
- user1.reload
- aspect1.reload
- user2.reload
- aspect2.reload
+ user1.reload
+ aspect1.reload
+ user2.reload
+ aspect2.reload
- user2.accept_and_respond( new_request.id, aspect2.id)
+ user2.accept_and_respond( new_request.id, aspect2.id)
- user1.reload
- aspect1.reload
- user2.reload
- aspect2.reload
+ user1.reload
+ aspect1.reload
+ user2.reload
+ aspect2.reload
+ end
end
def stub_success(address = 'abc@example.com', opts = {})
diff --git a/spec/lib/diaspora/exporter_spec.rb b/spec/lib/diaspora/exporter_spec.rb
index 538d58c07..00791fd3b 100644
--- a/spec/lib/diaspora/exporter_spec.rb
+++ b/spec/lib/diaspora/exporter_spec.rb
@@ -7,57 +7,63 @@ require File.join(Rails.root, 'lib/diaspora/exporter')
describe Diaspora::Exporter do
- let!(:user1) { make_user }
- let!(:user2) { make_user }
- let!(:user3) { make_user }
+ before do
+ @user1 = make_user
+ @user2 = make_user
+ @user3 = make_user
- let!(:aspect) { user1.aspects.create(:name => "Old Work") }
- let(:aspect1) { user1.aspects.create(:name => "Work") }
- let(:aspect2) { user2.aspects.create(:name => "Family") }
- let(:aspect3) { user3.aspects.create(:name => "Pivots") }
+ @aspect = @user1.aspects.create(:name => "Old Work")
+ @aspect1 = @user1.aspects.create(:name => "Work")
+ @aspect2 = @user2.aspects.create(:name => "Family")
+ @aspect3 = @user3.aspects.create(: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) }
+ @status_message1 = @user1.post(:status_message, :message => "One", :public => true, :to => @aspect1.id)
+ @status_message2 = @user1.post(:status_message, :message => "Two", :public => true, :to => @aspect1.id)
+ @status_message3 = @user2.post(:status_message, :message => "Three", :public => false, :to => @aspect2.id)
- let(:exported) { Nokogiri::XML(Diaspora::Exporter.new(Diaspora::Exporters::XML).execute(user1)) }
+ @user1.reload
+ @user2.reload
+ end
+
+ def exported
+ Nokogiri::XML(Diaspora::Exporter.new(Diaspora::Exporters::XML).execute(@user1))
+ end
context '' do
- let(:user_xml) {exported.xpath('//user').to_s}
+ before do
+ @user_xml = exported.xpath('//user').to_s
+ end
it 'should include a users private key' do
- user_xml.to_s.should include user1.serialized_private_key
+ @user_xml.to_s.should include @user1.serialized_private_key
end
end
context '' do
- let(:aspects_xml) {exported.xpath('//aspects').to_s}
- it 'should include the aspect name' do
-
- end
it 'should include the post_ids' do
- aspects_xml.should include status_message1.id.to_s
- aspects_xml.should include status_message2.id.to_s
+ aspects_xml = exported.xpath('//aspects').to_s
+ aspects_xml.should include @status_message1.id.to_s
+ aspects_xml.should include @status_message2.id.to_s
end
end
context '' do
before do
- connect_users(user1, aspect1, user3, aspect3)
- user1.add_person_to_aspect(user3.person.id, aspect.id)
- user1.reload
+ connect_users(@user1, @aspect1, @user3, @aspect3)
+ @user1.add_person_to_aspect(@user3.person.id, @aspect.id)
+ @user1.reload
end
let(:contacts_xml) {exported.xpath('//contacts').to_s}
it 'should include a person id' do
- contacts_xml.should include user3.person.id.to_s
+ contacts_xml.should include @user3.person.id.to_s
end
it 'should include an aspects names of all aspects they are in' do
#contact specific xml needs to be tested
- user1.contacts.find_by_person_id(user3.person.id).aspects.count.should > 0
- user1.contacts.find_by_person_id(user3.person.id).aspects.each { |aspect|
+ @user1.contacts.find_by_person_id(@user3.person.id).aspects.count.should > 0
+ @user1.contacts.find_by_person_id(@user3.person.id).aspects.each { |aspect|
contacts_xml.should include aspect.name
}
end
@@ -66,38 +72,38 @@ describe Diaspora::Exporter do
context '' do
let(:people_xml) {exported.xpath('//people').to_s}
before do
- connect_users(user1, aspect1, user3, aspect3)
- user1.reload
+ connect_users(@user1, @aspect1, @user3, @aspect3)
+ @user1.reload
end
it 'should include persons id' do
- people_xml.should include user3.person.id.to_s
+ people_xml.should include @user3.person.id.to_s
end
it 'should include their profile' do
- people_xml.should include user3.person.profile.first_name
- people_xml.should include user3.person.profile.last_name
+ people_xml.should include @user3.person.profile.first_name
+ people_xml.should include @user3.person.profile.last_name
end
-
+
it 'should include their public key' do
- people_xml.should include user3.person.exported_key
+ people_xml.should include @user3.person.exported_key
end
it 'should include their diaspora handle' do
- people_xml.should include user3.person.diaspora_handle
+ people_xml.should include @user3.person.diaspora_handle
end
end
context '' do
let(:posts_xml) {exported.xpath('//posts').to_s}
it 'should include many posts xml' do
- posts_xml.should include status_message1.message
- posts_xml.should include status_message2.message
- posts_xml.should_not include status_message3.message
+ posts_xml.should include @status_message1.message
+ posts_xml.should include @status_message2.message
+ posts_xml.should_not include @status_message3.message
end
-
+
it 'should include post created at time' do
doc = Nokogiri::XML::parse(posts_xml)
- Time.parse(doc.xpath('//posts/status_message/created_at').first.text).should == status_message1.created_at
+ Time.parse(doc.xpath('//posts/status_message/created_at').first.text).should == @status_message1.created_at
end
end
end
diff --git a/spec/lib/diaspora/parser_spec.rb b/spec/lib/diaspora/parser_spec.rb
index 1f74d6c25..f8baa96cd 100644
--- a/spec/lib/diaspora/parser_spec.rb
+++ b/spec/lib/diaspora/parser_spec.rb
@@ -49,7 +49,7 @@ describe Diaspora::Parser do
Person.should_receive(:by_account_identifier).twice.and_return(new_person)
- lambda {
+ lambda {
user.receive_salmon xml
}.should change(Person, :count).by(1)
end
@@ -60,8 +60,9 @@ describe Diaspora::Parser do
it "should activate the Person if I initiated a request to that url" do
user.send_contact_request_to(user2.person, aspect)
request = user2.reload.pending_requests.find_by_to_id!(user2.person.id)
- user2.accept_and_respond(request.id, aspect2.id)
-
+ fantasy_resque do
+ user2.accept_and_respond(request.id, aspect2.id)
+ end
user.reload
aspect.reload
new_contact = user.contact_for(user2.person)
diff --git a/spec/misc_spec.rb b/spec/misc_spec.rb
index 414d8e3c1..1db1d671f 100644
--- a/spec/misc_spec.rb
+++ b/spec/misc_spec.rb
@@ -29,7 +29,7 @@ describe 'making sure the spec runner works' do
User.count.should == 2
new_user.id.should_not == second_user.id
end
-
+
end
describe 'factories' do
@@ -37,7 +37,7 @@ describe 'making sure the spec runner works' do
it 'does not save a built user' do
Factory.build(:user).persisted?.should be_false
end
-
+
it 'does not save a built person' do
Factory.build(:person).persisted?.should be_false
end
diff --git a/spec/models/user/posting_spec.rb b/spec/models/user/posting_spec.rb
index be42ddbd5..48b8ba604 100644
--- a/spec/models/user/posting_spec.rb
+++ b/spec/models/user/posting_spec.rb
@@ -203,8 +203,22 @@ describe User do
user.push_to_people(post, [user2.person, user3.person, remote_person])
end
-
end
+ describe '#push_to_person' do
+ before do
+ @salmon = user.salmon(post)
+ @xml = post.to_diaspora_xml
+ end
+ it 'enqueues receive for local contacts' do
+ Resque.should_receive(:enqueue).with(Jobs::Receive, user2.id, @xml, user.person.id)
+ user.push_to_person(@salmon, post, user2.person)
+ end
+ it 'calls the MessageHandler for remote contacts' do
+ person = Factory.create(:person)
+ MessageHandler.should_receive(:add_post_request).once
+ user.push_to_person(@salmon, post, person)
+ end
+ end
end
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index e67237c33..3e2cc2397 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -15,7 +15,7 @@ require 'webmock/rspec'
include Devise::TestHelpers
include WebMock::API
include HelperMethods
-
+#
# Requires supporting files with custom matchers and macros, etc,
# in ./support/ and its subdirectories.
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
@@ -41,25 +41,57 @@ end
module Resque
def enqueue(klass, *args)
- true
- end
-end
-
-class User
-def send_contact_request_to(desired_contact, aspect)
- request = Request.instantiate(:to => desired_contact,
- :from => self.person,
- :into => aspect)
- if request.save!
- dispatch_request request
+ if $process_queue
+ klass.send(:perform, *args)
+ else
+ true
end
- request
end
end
ImageUploader.enable_processing = false
+class User
+ def send_contact_request_to(desired_contact, aspect)
+ fantasy_resque do
+ request = Request.instantiate(:to => desired_contact,
+ :from => self.person,
+ :into => aspect)
+ if request.save!
+ dispatch_request request
+ end
+ request
+ end
+ end
+
+ def post(class_name, opts = {})
+ fantasy_resque do
+ p = build_post(class_name, opts)
+ if p.save!
+ raise 'MongoMapper failed to catch a failed save' unless p.id
+
+ self.aspects.reload
+
+ add_to_streams(p, opts[:to])
+ dispatch_post(p, :to => opts[:to])
+ end
+ p
+ end
+ end
+
+ def comment(text, options = {})
+ fantasy_resque do
+ c = build_comment(text, options)
+ if c.save!
+ raise 'MongoMapper failed to catch a failed save' unless c.id
+ dispatch_comment(c)
+ end
+ c
+ end
+ end
+end
+
+
-
class FakeHttpRequest
def initialize(callback_wanted)
@callback = callback_wanted
@@ -82,12 +114,12 @@ class FakeHttpRequest
self
end
- def post(opts = nil);
- self
+ def post(opts = nil);
+ self
end
def get(opts = nil)
- self
+ self
end
def publish(opts = nil)