Sha256: a7f9af09c08436169b08b1893630c383f3aa8b749de3d1862a025f6dbf1224aa

Contents?: true

Size: 1.84 KB

Versions: 2

Compression:

Stored size: 1.84 KB

Contents

require 'spec_helper'

describe MetaPresenter::Builder do
  let(:controller_class) { ApplicationController }
  let(:controller) { controller_class.new }
  let(:action_name) { 'logs' }
  let(:object) { described_class.new(controller, action_name) }

  def controller_ancestors
    controller.class.ancestors
  end

  describe '#new' do
    subject { object }

    it { expect(subject.controller).to eql(controller) }
    it { expect(subject.action_name).to eql(action_name) }
  end

  describe '#presenter_class' do
    subject { object.presenter_class }

    before do
      expect(controller_ancestors.first).to eql(controller_class)
    end

    context "application controller" do
      let(:controller_class) { ApplicationController }

      it { is_expected.to be ApplicationPresenter }
    end

    context "subclass of ApplicationController" do
      let(:controller_class) { PagesController }

      context "action with a presenter class defined" do
        let(:action_name) { "logs" }
        before { expect(Object).to_not be_const_defined('LogsPresenter') }

        it { is_expected.to be Pages::LogsPresenter }
      end

      context "action without a presenter class defined" do
        let(:action_name) { "fairy" }
        before { expect(Object).to_not be_const_defined('FairyPresenter') }

        it "defers to the parent presenter" do
          expect(subject).to be PagesPresenter
        end

        context "but the file exists" do
          let(:action_name) { "only_file_exists" }

          it do
            expect { subject }.to raise_error(MetaPresenter::Builder::FileExistsButPresenterNotDefinedError)
          end
        end
      end
    end

    context "namespaced" do
      let(:controller_class) { Admin::DashboardController }
      let(:action_name) { "inbox" }

      it { is_expected.to be Admin::Dashboard::InboxPresenter }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
meta_presenter-0.1.4 spec/meta_presenter/builder_spec.rb
meta_presenter-0.1.3 spec/meta_presenter/builder_spec.rb