diff --git a/app/components/layout/common_html_attributes_component.rb b/app/components/layout/common_html_attributes_component.rb
index 41cb8323b..bface8c6c 100644
--- a/app/components/layout/common_html_attributes_component.rb
+++ b/app/components/layout/common_html_attributes_component.rb
@@ -4,7 +4,7 @@ class Layout::CommonHTMLAttributesComponent < ApplicationComponent
private
def attributes
- sanitize([dir, lang].compact.join(" "))
+ sanitize([dir, lang, html_class].compact.join(" "))
end
def dir
@@ -14,4 +14,8 @@ class Layout::CommonHTMLAttributesComponent < ApplicationComponent
def lang
"lang=\"#{I18n.locale}\""
end
+
+ def html_class
+ "class=\"tenant-#{Tenant.current_schema}\"" if Rails.application.config.multitenancy
+ end
end
diff --git a/spec/components/layout/common_html_attributes_component_spec.rb b/spec/components/layout/common_html_attributes_component_spec.rb
index 2d6fc3238..ded22103c 100644
--- a/spec/components/layout/common_html_attributes_component_spec.rb
+++ b/spec/components/layout/common_html_attributes_component_spec.rb
@@ -3,16 +3,36 @@ require "rails_helper"
describe Layout::CommonHTMLAttributesComponent do
let(:component) { Layout::CommonHTMLAttributesComponent.new }
- it "includes the default language by default" do
- render_inline component
+ context "with multitenancy disabled" do
+ before { allow(Rails.application.config).to receive(:multitenancy).and_return(false) }
- expect(page.text).to eq 'lang="en"'
+ 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
- it "includes the current language" do
- I18n.with_locale(:es) { render_inline component }
+ 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="es"'
+ 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
@@ -25,10 +45,22 @@ describe Layout::CommonHTMLAttributesComponent do
after { I18n.enforce_available_locales = default_enforce }
- it "includes the dir attribute" do
- I18n.with_locale(:ar) { render_inline component }
+ context "with multitenancy disabled" do
+ before { allow(Rails.application.config).to receive(:multitenancy).and_return(false) }
- expect(page.text).to eq 'dir="rtl" lang="ar"'
+ 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
diff --git a/spec/system/multitenancy_spec.rb b/spec/system/multitenancy_spec.rb
index ef1a90564..ef161fb9c 100644
--- a/spec/system/multitenancy_spec.rb
+++ b/spec/system/multitenancy_spec.rb
@@ -28,12 +28,16 @@ describe "Multitenancy" do
visit polls_path
expect(page).to have_content "Human rights for Martians?"
+ expect(page).to have_css "html.tenant-mars"
+ expect(page).not_to have_css "html.tenant-venus"
end
with_subdomain("venus") do
visit polls_path
expect(page).to have_content "There are no open votings"
+ expect(page).to have_css "html.tenant-venus"
+ expect(page).not_to have_css "html.tenant-mars"
end
end