diff --git a/app/controllers/publics_controller.rb b/app/controllers/publics_controller.rb
index a4566b44d..d486f2001 100644
--- a/app/controllers/publics_controller.rb
+++ b/app/controllers/publics_controller.rb
@@ -56,12 +56,7 @@ class PublicsController < ApplicationController
end
@user = person.owner
-
- begin
- @user.receive_salmon(params[:xml])
- rescue Exception => e
- Rails.logger.info("bad salmon: #{e.message}")
- end
+ Resque.enqueue(Jobs::ReceiveSalmon, @user.id, params[:xml])
render :nothing => true, :status => 200
end
diff --git a/app/models/jobs/receive_salmon.rb b/app/models/jobs/receive_salmon.rb
new file mode 100644
index 000000000..229e45e3c
--- /dev/null
+++ b/app/models/jobs/receive_salmon.rb
@@ -0,0 +1,10 @@
+module Jobs
+ class ReceiveSalmon
+ @queue = :receive
+ def self.perform(user_id, xml)
+ user = User.find(user_id)
+ user.receive_salmon(xml)
+ end
+ end
+end
+
diff --git a/config/initializers/resque.rb b/config/initializers/resque.rb
index 9b4e452ef..ece0002cc 100644
--- a/config/initializers/resque.rb
+++ b/config/initializers/resque.rb
@@ -1,4 +1,3 @@
-Dir[File.join(Rails.root, 'app', 'jobs', '*.rb')].each { |file| require file }
#config = YAML::load(File.open("#{Rails.root}/config/redis.yml"))
#Resque.redis = Redis.new(:host => config['host'], :port => config['port'])
require 'resque'
diff --git a/spec/controllers/publics_controller_spec.rb b/spec/controllers/publics_controller_spec.rb
index c729c95eb..58a6e1b06 100644
--- a/spec/controllers/publics_controller_spec.rb
+++ b/spec/controllers/publics_controller_spec.rb
@@ -7,42 +7,20 @@ require 'spec_helper'
describe PublicsController do
render_views
- let!(:user) { make_user }
- let!(:user2) { make_user }
- let!(:aspect1) { user.aspects.create(:name => "foo") }
- let!(:aspect2) { user2.aspects.create(:name => "far") }
- let!(:aspect2) { user2.aspects.create(:name => 'disciples') }
- let!(:req) { user2.send_contact_request_to(user.person, aspect2) }
- let!(:xml) { user2.salmon(req).xml_for(user.person) }
+ let(:user) { make_user }
let(:person){Factory(:person)}
- before do
- sign_in :user, user
-
- end
-
describe '#receive' do
- before do
- EventMachine::HttpRequest.stub!(:new).and_return(FakeHttpRequest.new(:success))
- end
-
- context 'success cases' do
- before do
- @person_mock = mock()
- @user_mock = mock()
- @user_mock.stub!(:receive_salmon).and_return(true)
- @person_mock.stub!(:owner_id).and_return(true)
- @person_mock.stub!(:owner).and_return(@user_mock)
- Person.stub!(:first).and_return(@person_mock)
- end
+ let(:xml) { "" }
+ context 'success cases' do
it 'should 200 on successful receipt of a request' do
post :receive, :id =>user.person.id, :xml => xml
response.code.should == '200'
end
- it 'should have the xml processed as salmon on success' do
- @user_mock.should_receive(:receive_salmon).and_return(true)
- post :receive, :id => user.person.id, :xml => xml
+ it 'enqueues a receive job' do
+ Resque.should_receive(:enqueue).with(Jobs::ReceiveSalmon, user.id, xml).once
+ post :receive, :id =>user.person.id, :xml => xml
end
end
@@ -55,8 +33,8 @@ describe PublicsController do
post :receive, :id => person.id, :xml => xml
response.code.should == '404'
end
- end
+ end
describe '#hcard' do
it 'queries by person id' do
@@ -97,33 +75,4 @@ describe PublicsController do
response.should be_not_found
end
end
-
- context 'intergration tests that should not be in this file' do
- describe 'contact requests' do
- before do
- req.delete
- user2.reload
- user2.pending_requests.count.should be 1
- end
-
- it 'should accept a post from another node and save the information' do
- pending
- message = user2.build_post(:status_message, :message => "hi")
-
- connect_users(user, aspect1, user2, aspect2)
-
- user.reload
- user.visible_post_ids.include?(message.id).should be false
-
- xml1 = user2.salmon(message).xml_for(user.person)
-
- EM::run{
- post :receive, :id => user.person.id, :xml => xml1
- EM.stop
- }
- user.reload
- user.visible_post_ids.include?(message.id).should be true
- end
- end
- end
end
diff --git a/spec/models/jobs/receive_salmon_spec.rb b/spec/models/jobs/receive_salmon_spec.rb
new file mode 100644
index 000000000..c4e66fffe
--- /dev/null
+++ b/spec/models/jobs/receive_salmon_spec.rb
@@ -0,0 +1,19 @@
+require 'spec/spec_helper'
+
+describe Jobs::ReceiveSalmon do
+ before do
+ @user = make_user
+ @xml = ''
+ User.stub(:find){ |id|
+ if id == @user.id
+ @user
+ else
+ nil
+ end
+ }
+ end
+ it 'calls receive_salmon' do
+ @user.should_receive(:receive_salmon).with(@xml).once
+ Jobs::ReceiveSalmon.perform(@user.id, @xml)
+ end
+end