respond_to :json
def create
- @media = MediaAttachment.create!(account: current_user.account, file: media_params[:file])
+ @media = current_account.media_attachments.create!(file: media_params[:file])
rescue Paperclip::Errors::NotIdentifiedByImageMagickError
- render json: { error: 'File type of uploaded media could not be verified' }, status: 422
+ render json: file_type_error, status: 422
rescue Paperclip::Error
- render json: { error: 'Error processing thumbnail for uploaded media' }, status: 500
+ render json: processing_error, status: 500
end
private
def media_params
params.permit(:file)
end
+
+ def file_type_error
+ { error: 'File type of uploaded media could not be verified' }
+ end
+
+ def processing_error
+ { error: 'Error processing thumbnail for uploaded media' }
+ end
end
end
describe 'POST #create' do
+ describe 'with paperclip errors' do
+ context 'when imagemagick cant identify the file type' do
+ before do
+ expect_any_instance_of(Account).to receive_message_chain(:media_attachments, :create!).and_raise(Paperclip::Errors::NotIdentifiedByImageMagickError)
+ post :create, params: { file: fixture_file_upload('files/attachment.jpg', 'image/jpeg') }
+ end
+
+ it 'returns http 422' do
+ expect(response).to have_http_status(:unprocessable_entity)
+ end
+ end
+
+ context 'when there is a generic error' do
+ before do
+ expect_any_instance_of(Account).to receive_message_chain(:media_attachments, :create!).and_raise(Paperclip::Error)
+ post :create, params: { file: fixture_file_upload('files/attachment.jpg', 'image/jpeg') }
+ end
+
+ it 'returns http 422' do
+ expect(response).to have_http_status(:error)
+ end
+ end
+ end
+
context 'image/jpeg' do
before do
post :create, params: { file: fixture_file_upload('files/attachment.jpg', 'image/jpeg') }