Clone
require 'spec_helper'

require_relative '../../../lib/locomotive/steam/middlewares/base'
require_relative '../../../lib/locomotive/steam/middlewares/page'

describe Locomotive::Steam::Middlewares::Page do
  let(:app) { ->(env) { [200, env, 'app'] }}

  let :middleware do
    Locomotive::Steam::Middlewares::Page.new(app)
  end

  context 'rack testing' do
    let(:page) do
      double(title: 'title', fullpath: 'fullpath')
    end

    before do
      expect(middleware).to receive(:fetch_page).with('wk') { page }
      expect(Locomotive::Common::Logger).to receive(:info).with("Found page \"title\" [fullpath]") { nil }
    end

    subject do
      middleware.call env_for('http://www.example.com', { 'steam.locale' => 'wk' })
    end

    specify 'return 200' do
      code, headers, response = subject
      expect(code).to eq(200)
    end

    specify 'set page' do
      code, headers, response = subject
      expect(headers['steam.page']).to eq(page)
    end
  end

  context 'test in isolation' do
    describe '#path_combinations' do
      specify do
        expect(
          middleware.send(:path_combinations, 'projects/project-2')
        ).to eq(['projects/project-2', 'projects/*', '*/project-2'])
      end
    end
  end

  def env_for url, opts={}
    Rack::MockRequest.env_for(url, opts)
  end
end