require "rails_helper"

describe Layout::CommonHtmlAttributesComponent do
  let(:component) { Layout::CommonHtmlAttributesComponent.new }

  context "with multitenancy disabled" do
    before { allow(Rails.application.config).to receive(:multitenancy).and_return(false) }

    it "includes the default language by default" do
      render_inline component

      expect(page.text).to eq 'lang="en"'
    end

    it "includes the current language" do
      I18n.with_locale(:es) { render_inline component }

      expect(page.text).to eq 'lang="es"'
    end
  end

  context "with multitenancy enabled" do
    it "includes a class with the 'public' suffix for the default tenant" do
      render_inline component

      expect(page.text).to eq 'lang="en" class="tenant-public"'
    end

    it "includes a class with the schema name as suffix for other tenants" do
      allow(Tenant).to receive(:current_schema).and_return "private"

      render_inline component

      expect(page.text).to eq 'lang="en" class="tenant-private"'
    end
  end

  context "RTL languages" do
    let!(:default_enforce) { I18n.enforce_available_locales }

    before do
      I18n.enforce_available_locales = false
      allow(I18n).to receive(:available_locales).and_return(%i[ar en es])
    end

    after { I18n.enforce_available_locales = default_enforce }

    context "with multitenancy disabled" do
      before { allow(Rails.application.config).to receive(:multitenancy).and_return(false) }

      it "includes the dir attribute" do
        I18n.with_locale(:ar) { render_inline component }

        expect(page.text).to eq 'dir="rtl" lang="ar"'
      end
    end

    context "with multitenancy enabled" do
      it "includes the dir and the class attributes" do
        I18n.with_locale(:ar) { render_inline component }

        expect(page.text).to eq 'dir="rtl" lang="ar" class="tenant-public"'
      end
    end
  end
end
