# encoding: utf-8
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')

describe 'Locale loading' do
  let(:app) do
    DoorkeeperI18n::Spec::FakeApp
  end

  let(:translate_stuff) do
    lambda do
      <<-EOS.gsub(/^  */, '')
        In French: #{I18n.t('doorkeeper.layouts.admin.nav.oauth2_provider', locale: :fr)}
        In Italian: #{I18n.t('doorkeeper.layouts.admin.nav.oauth2_provider', locale: :it)}
        In Japanese: #{I18n.t('doorkeeper.layouts.admin.nav.oauth2_provider', locale: :ja)}
      EOS
    end
  end

  context 'when i18n.available_locales are specified in config' do
    let(:translations) do
      app.run(translate_stuff) do |config|
        config.i18n.available_locales = [:fr, :it]
      end
    end

    it 'loads only specified locales' do
      expected_translations = <<-EOS.gsub(/^  */, '')
        In French: Fournisseur OAuth2
        In Italian: OAuth2 Provider
        In Japanese: Translation missing: ja.doorkeeper.layouts.admin.nav.oauth2_provider
      EOS

      expect(translations).to eq(expected_translations)
    end
  end

  context 'when single locale is assigned to i18n.available_locales' do
    let(:translations) do
      app.run(translate_stuff) do |config|
        config.i18n.available_locales = 'fr'
      end
    end

    it 'loads only this locale' do
      expected_translations = <<-EOS.gsub(/^  */, '')
        In French: Fournisseur OAuth2
        In Italian: Translation missing: it.doorkeeper.layouts.admin.nav.oauth2_provider
        In Japanese: Translation missing: ja.doorkeeper.layouts.admin.nav.oauth2_provider
      EOS

      expect(translations).to eq(expected_translations)
    end
  end

  context 'when i18n.available_locales is not set' do
    let(:translations) { app.run(translate_stuff) }

    it 'loads all locales' do
      expected_translations = <<-EOS.gsub(/^  */, '')
        In French: Fournisseur OAuth2
        In Italian: OAuth2 Provider
        In Japanese: OAuth2 プロバイダー
      EOS

      expect(translations).to eq(expected_translations)
    end
  end
end
