Note that in order to simplify the component tests (which for some reason seem to be whitespace-sensitive), we have to omit whitespace characters inside the `<option>` tags. Also note we're simplifying the test with a missing language name; since a component test doesn't involve a whole request, we don't need a complex setup (I'm not sure we even need it in system tests).
57 lines
1.5 KiB
Ruby
57 lines
1.5 KiB
Ruby
require "rails_helper"
|
|
|
|
describe Layout::LocaleSwitcherComponent, type: :component do
|
|
let(:component) { Layout::LocaleSwitcherComponent.new }
|
|
|
|
before do
|
|
allow(request).to receive(:path_parameters).and_return(
|
|
Rails.application.routes.recognize_path("/")
|
|
)
|
|
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.text).to be_empty
|
|
expect(page).not_to have_css ".locale"
|
|
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]
|
|
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
|
|
end
|