In this PR (https://github.com/consul/consul/pull/4683) a new syntax was introduced in the component specs to check that the component was not rendering. It seems interesting to add this syntax to the rest of the cases and thus unify the way we check that a component is not rendering.
78 lines
2.1 KiB
Ruby
78 lines
2.1 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.native.inner_html).to be_empty
|
|
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
|
|
end
|