logo

mastofe

My custom branche(s) on git.pleroma.social/pleroma/mastofe
commit: 1dcfb902024a7d4049306d9bc48c499856e2e429
parent: 22cf18e16f2ff07e5cd6e90b53d1b038e1956c99
Author: Matt Jankowski <mjankowski@thoughtbot.com>
Date:   Tue, 30 May 2017 16:28:58 -0400

Clean up api/salmon controller (#3449)


Diffstat:

Mapp/controllers/api/salmon_controller.rb18++++++++++++------
Mspec/controllers/api/salmon_controller_spec.rb53+++++++++++++++++++++++++++++++++--------------------
2 files changed, 45 insertions(+), 26 deletions(-)

diff --git a/app/controllers/api/salmon_controller.rb b/app/controllers/api/salmon_controller.rb @@ -5,10 +5,8 @@ class Api::SalmonController < ApiController respond_to :txt def update - payload = request.body.read - - if !payload.nil? && verify?(payload) - SalmonWorker.perform_async(@account.id, payload.force_encoding('UTF-8')) + if verify_payload? + process_salmon head 201 else head 202 @@ -21,7 +19,15 @@ class Api::SalmonController < ApiController @account = Account.find(params[:id]) end - def verify?(payload) - VerifySalmonService.new.call(payload) + def payload + @_payload ||= request.body.read + end + + def verify_payload? + payload.present? && VerifySalmonService.new.call(payload) + end + + def process_salmon + SalmonWorker.perform_async(@account.id, payload.force_encoding('UTF-8')) end end diff --git a/spec/controllers/api/salmon_controller_spec.rb b/spec/controllers/api/salmon_controller_spec.rb @@ -13,29 +13,42 @@ RSpec.describe Api::SalmonController, type: :controller do end describe 'POST #update' do - before do - request.env['RAW_POST_DATA'] = File.read(File.join(Rails.root, 'spec', 'fixtures', 'salmon', 'mention.xml')) - post :update, params: { id: account.id } + context 'with valid post data' do + before do + request.env['RAW_POST_DATA'] = File.read(File.join(Rails.root, 'spec', 'fixtures', 'salmon', 'mention.xml')) + post :update, params: { id: account.id } + end + + it 'contains XML in the request body' do + expect(request.body.read).to be_a String + end + + it 'returns http success' do + expect(response).to have_http_status(:success) + end + + it 'creates remote account' do + expect(Account.find_by(username: 'gargron', domain: 'quitter.no')).to_not be_nil + end + + it 'creates status' do + expect(Status.find_by(uri: 'tag:quitter.no,2016-03-20:noticeId=1276923:objectType=note')).to_not be_nil + end + + it 'creates mention for target account' do + expect(account.mentions.count).to eq 1 + end end - it 'contains XML in the request body' do - expect(request.body.read).to be_a String - end - - it 'returns http success' do - expect(response).to have_http_status(:success) - end - - it 'creates remote account' do - expect(Account.find_by(username: 'gargron', domain: 'quitter.no')).to_not be_nil - end - - it 'creates status' do - expect(Status.find_by(uri: 'tag:quitter.no,2016-03-20:noticeId=1276923:objectType=note')).to_not be_nil - end + context 'with invalid post data' do + before do + request.env['RAW_POST_DATA'] = '' + post :update, params: { id: account.id } + end - it 'creates mention for target account' do - expect(account.mentions.count).to eq 1 + it 'returns http success' do + expect(response).to have_http_status(202) + end end end end