Files
grecia/spec/components/layout/locale_switcher_component_spec.rb
Javi Martín ff0f2215ea Extract component for locale switcher
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).
2021-07-05 22:27:39 +02:00

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