Sha256: cea717c2f87e45519626da93fd64f521aa69406d4ea3d88b01fbba578c4da52b

Contents?: true

Size: 1.66 KB

Versions: 2

Compression:

Stored size: 1.66 KB

Contents

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
  end
  class ErrApp
    class << self
      attr_accessor :error
      attr_accessor :format

      def call(_env)
        throw :error, error
      end
    end
  end

  def app
    opts = options
    Rack::Builder.app do
      use Spec::Support::EndpointFaker
      use Grape::Middleware::Error, opts
      run ErrApp
    end
  end

  let(:options) {  { default_message: 'Aww, hamburgers.' } }

  it 'sets the status code appropriately' do
    ErrApp.error = { status: 410 }
    get '/'
    expect(last_response.status).to eq(410)
  end

  it 'sets the error message appropriately' do
    ErrApp.error = { message: 'Awesome stuff.' }
    get '/'
    expect(last_response.body).to eq('Awesome stuff.')
  end

  it 'defaults to a 500 status' do
    ErrApp.error = {}
    get '/'
    expect(last_response.status).to eq(500)
  end

  it 'has a default message' do
    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
      ErrApp.error = { message: { code: 200 } }
      get '/'

      expect(last_response.body).to eq({ code: 200 }.to_json)
    end

    it 'presents an error message' do
      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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
grape-0.13.0 spec/grape/middleware/error_spec.rb
grape-0.12.0 spec/grape/middleware/error_spec.rb