1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
# frozen_string_literal: true
require 'spec_helper'
require 'grape-entity'
describe Grape::Middleware::Error do
module ErrorSpec
class ErrorEntity < Grape::Entity
expose :code
expose :static
def static
'static text'
end
end
class ErrApp
class << self
attr_accessor :error, :format
def call(_env)
throw :error, error
end
end
end
end
def app
opts = options
Rack::Builder.app do
use Spec::Support::EndpointFaker
use Grape::Middleware::Error, **opts
run ErrorSpec::ErrApp
end
end
let(:options) { { default_message: 'Aww, hamburgers.' } }
it 'sets the status code appropriately' do
ErrorSpec::ErrApp.error = { status: 410 }
get '/'
expect(last_response.status).to eq(410)
end
it 'sets the error message appropriately' do
ErrorSpec::ErrApp.error = { message: 'Awesome stuff.' }
get '/'
expect(last_response.body).to eq('Awesome stuff.')
end
it 'defaults to a 500 status' do
ErrorSpec::ErrApp.error = {}
get '/'
expect(last_response.status).to eq(500)
end
it 'has a default message' do
ErrorSpec::ErrApp.error = {}
get '/'
expect(last_response.body).to eq('Aww, hamburgers.')
end
context 'with http code' do
let(:options) { { default_message: 'Aww, hamburgers.' } }
it 'adds the status code if wanted' do
ErrorSpec::ErrApp.error = { message: { code: 200 } }
get '/'
expect(last_response.body).to eq({ code: 200 }.to_json)
end
it 'presents an error message' do
ErrorSpec::ErrApp.error = { message: { code: 200, with: ErrorSpec::ErrorEntity } }
get '/'
expect(last_response.body).to eq({ code: 200, static: 'static text' }.to_json)
end
end
end
|