Sha256: fcca6e6a0aea8c3e00b1ca5789ab9879a8439df410cedb199c99a5e9892e63ab

Contents?: true

Size: 1.91 KB

Versions: 8

Compression:

Stored size: 1.91 KB

Contents

require 'spec_helper'

describe 'Api::Error', type: :controller do
  before do
    routes.draw { get :action, to: "anonymous#action" }

    get :action
  end

  def response_body
    JSON.parse(response.body).deep_symbolize_keys
  end

  context "with Exception error" do
    let(:expected_response) do
      {
        detail: ":-(",
        message: "server_error",
        type: "RuntimeError"
      }
    end

    controller do
      include ::Api::Error

      def action
        raise ':-('
      end
    end

    it { expect(response_body).to eq(expected_response) }
    it { expect(response.status).to eq(500) }
  end

  context "with ActiveRecord::RecordNotFound error" do
    let(:expected_response) do
      {
        detail: ":-(",
        message: "record_not_found"
      }
    end

    controller do
      include ::Api::Error

      def action
        raise ActiveRecord::RecordNotFound.new(":-(")
      end
    end

    it { expect(response_body).to eq(expected_response) }
    it { expect(response.status).to eq(404) }
  end

  context "with ActiveModel::ForbiddenAttributesError error" do
    let(:expected_response) do
      {
        detail: ":-(",
        message: "protected_attributes"
      }
    end

    controller do
      include ::Api::Error

      def action
        raise ActiveModel::ForbiddenAttributesError.new(":-(")
      end
    end

    it { expect(response_body).to eq(expected_response) }
    it { expect(response.status).to eq(400) }
  end

  context "with ActiveRecord::RecordInvalid error" do
    let(:expected_response) do
      {
        message: "invalid_attributes",
        errors: {
          body: ["can't be blank"],
          title: ["can't be blank"]
        }
      }
    end

    controller do
      include ::Api::Error

      def action
        raise Blog.create!
      end
    end

    it { expect(response_body).to eq(expected_response) }
    it { expect(response.status).to eq(400) }
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
power_api-2.1.1 spec/dummy/app/controllers/concerns/api/error_spec.rb
power_api-2.1.0 spec/dummy/app/controllers/concerns/api/error_spec.rb
power_api-2.0.2 spec/dummy/app/controllers/concerns/api/error_spec.rb
power_api-2.0.1 spec/dummy/app/controllers/concerns/api/error_spec.rb
power_api-2.0.0 spec/dummy/app/controllers/concerns/api/error_spec.rb
power_api-1.0.0 spec/dummy/app/controllers/concerns/api/error_spec.rb
power_api-0.2.0 spec/dummy/app/controllers/concerns/api/error_spec.rb
power_api-0.1.0 spec/dummy/app/controllers/concerns/api/error_spec.rb