require 'spec_helper'

RSpec.describe PageTitleHelper, type: :helper do
  before do
    allow(helper).to receive(:controller_name).and_return('controller')
    allow(helper).to receive(:action_name).and_return('action')
  end

  it 'stores a string as the page title' do
    expect(helper).to receive(:content_for).with(:page_title, 'bla')
    helper.page_title 'bla'
  end

  it 'interpolates id, plural and singular names into the formatted default given a record' do
    name   = double human: 'Post'
    model  = double model_name: name
    record = double class: model, to_param: '1'
    expect(helper).to receive(:translate).with(
      :'page_title.controller.action.model',
      singular: 'Post',
      plural: 'Posts',
      id: '1',
      default: [
        :'page_title.controller.model',
        :'page_title.default.action.model',
        :'page_title.default.model',
        :'page_title.default.standard',
        'Dummy'
      ]
    ).and_return('bla')
    helper.page_title record
  end

  it 'passes additional options along to helper.translate when setting a record title' do
    name   = double human: 'Post'
    model  = double model_name: name
    record = double class: model, to_param: '1'
    expect(helper).to receive(:translate).with(
      :'page_title.controller.action.model',
      singular: 'Post',
      plural: 'Posts',
      id: '1',
      extra_argument: 'foobar',
      default: [
        :'page_title.controller.model',
        :'page_title.default.action.model',
        :'page_title.default.model',
        :'page_title.default.standard',
        'Dummy'
      ]
    ).and_return('bla')
    helper.page_title record, extra_argument: 'foobar'
  end

  it 'interpolates plural and singular names into the formatted default given a model' do
    name = double human: 'Post'
    model = double model_name: name
    expect(helper).to receive(:translate).with(
      :'page_title.controller.action.model',
      singular: 'Post',
      plural: 'Posts',
      default: [
        :'page_title.controller.model',
        :'page_title.default.action.model',
        :'page_title.default.model',
        :'page_title.default.standard',
        'Dummy'
      ]
    ).and_return('bla')
    helper.page_title model
  end

  context 'when a title has been set' do
    before do
      helper.page_title 'bla'
    end

    it 'inserts it into the default format' do
      expect(helper).to receive(:translate).with(
        :'page_title.controller.action.formatted',
        default: [
          :'page_title.controller.formatted',
          :'page_title.default.formatted',
          :'page_title.default.standard',
          'Dummy'
        ],
        title: 'bla'
      ).and_return('bla | site')
      expect(helper.page_title).to eql('bla | site')
    end
  end

  context 'when no title has been set' do
    it 'returns the default page title' do
      expect(helper).to receive(:translate).with(
        :'page_title.controller.action.standard',
        default: [
          :'page_title.controller.standard',
          :'page_title.default.standard',
          'Dummy'
        ]
      ).and_return('bla')
      expect(helper.page_title).to eql('bla')
    end
  end
end