Sha256: 71e5c62ad8844570ee41c5fa643507ec71b43613ae596497d2a300eb14fd910c

Contents?: true

Size: 1.91 KB

Versions: 24

Compression:

Stored size: 1.91 KB

Contents

require 'spec_helper'

describe Praxis::Extensions::Rendering do

  let(:test_class) do
    Struct.new(:media_type, :expanded_fields, :response, :request) do |klass|
      include Praxis::Extensions::Rendering
    end
  end

  let(:media_type) { Person }
  let(:expanded_fields) { {id: true, name: true} }
  let(:response) { double('response', headers: {}) }
  let(:request) { double('request') }

  let(:object) { {id: '1', name: 'bob', href: '/people/bob'} }
  subject(:instance) { test_class.new(media_type, expanded_fields, response, request) }

  context '#render' do
    subject(:output) { instance.render(object) }
    it 'loads and renders the object' do
      expect(output).to eq(id: 1, name: 'bob')
    end
  end

  context '#display' do
    context 'without exception' do
      before do
        expect(response).to receive(:body=).with({id: 1, name: 'bob'})
      end

      subject!(:output) { instance.display(object) }

      it 'returns the response' do
        expect(output).to be(response)
      end

      it 'sets the Content-Type header' do
        expect(response.headers['Content-Type']).to eq 'application/vnd.acme.person'
      end
    end

    context 'with a rendering exception' do
      let(:handler_params) do
        {
          summary: "Circular Rendering Error when rendering response. " +
                 "Please especify a view to narrow the dependent fields, or narrow your field set.",
          exception: circular_exception,
          request: request,
          stage: :action,
          errors: nil
        }
      end
      let(:circular_exception){ Praxis::Renderer::CircularRenderingError.new(object, "ctx") }
      it 'catches a circular rendering exception' do
        expect(instance).to receive(:render).and_raise(circular_exception)
        expect(Praxis::Application.instance.validation_handler).to receive(:handle!).with(handler_params)
        instance.display(object)
      end
    end
  end

end

Version data entries

24 entries across 24 versions & 1 rubygems

Version Path
praxis-2.0.pre.18 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.17 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.16 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.15 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.14 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.13 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.12 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.11 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.10 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.9 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.8 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.7 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.6 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.5 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.4 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.3 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.2 spec/praxis/extensions/rendering_spec.rb
praxis-2.0.pre.1 spec/praxis/extensions/rendering_spec.rb
praxis-0.22.pre.2 spec/praxis/extensions/rendering_spec.rb
praxis-0.22.pre.1 spec/praxis/extensions/rendering_spec.rb