Files
grecia/spec/components/layout/locale_switcher_component_spec.rb
Senén Rodero Rodríguez ede6a3f73f Disable Turbolinks page loading for language links
Only when the current language has a different text direction
than the localization link to generate.
2022-06-08 07:12:29 +02:00

101 lines
2.8 KiB
Ruby

require "rails_helper"
describe Layout::LocaleSwitcherComponent do
let(:component) { Layout::LocaleSwitcherComponent.new }
around do |example|
with_request_url("/") { example.run }
end
context "with only one language" do
before { allow(I18n).to receive(:available_locales).and_return([:en]) }
it "doesn't render anything" do
render_inline component
expect(page).not_to be_rendered
end
end
context "with many languages" do
before { allow(I18n).to receive(:available_locales).and_return(%i[de en es fr nl]) }
it "renders a form to select the language" do
render_inline component
expect(page).to have_css "form"
expect(page).to have_select "Language:", options: %w[Deutsch English Español Français Nederlands]
expect(page).not_to have_css "ul"
end
it "selects the current locale" do
render_inline component
expect(page).to have_select "Language:", selected: "English"
end
context "missing language names" do
let!(:default_enforce) { I18n.enforce_available_locales }
before do
I18n.enforce_available_locales = false
allow(I18n).to receive(:available_locales).and_return(%i[de en es fr nl wl])
end
after { I18n.enforce_available_locales = default_enforce }
it "renders the locale key" do
render_inline component
expect(page).to have_select "Language:", with_options: ["wl"]
end
end
end
context "with a few languages" do
before do
allow(I18n).to receive(:available_locales).and_return(%i[en es fr])
end
it "renders a list of links" do
render_inline component
expect(page).to have_css "ul"
expect(page).to have_link "English", href: "/?locale=en"
expect(page).to have_link "Español", href: "/?locale=es"
expect(page).to have_link "Français", href: "/?locale=fr"
expect(page).not_to have_css "form"
end
it "marks the current locale" do
render_inline component
expect(page).to have_css "[aria-current]", count: 1
expect(page).to have_css "[aria-current]", exact_text: "English"
end
end
context "when the target language has a different text direction than the current language" do
let!(:default_locales) { I18n.available_locales }
before do
I18n.available_locales = %i[ar en]
I18n.reload!
end
after do
I18n.available_locales = default_locales
I18n.reload!
end
it "disables Turbolinks for language links" do
render_inline component
expect(page).to have_link "عربى", href: "/?locale=ar"
expect(page).to have_css "[href='/?locale=ar'][data-turbolinks=false]"
expect(page).to have_link "English", href: "/?locale=en"
expect(page).to have_css "[href='/?locale=en'][data-turbolinks=true]"
end
end
end