diff --git a/app/assets/javascripts/datepicker.js b/app/assets/javascripts/datepicker.js index 8299833cd..1e483ea6a 100644 --- a/app/assets/javascripts/datepicker.js +++ b/app/assets/javascripts/datepicker.js @@ -17,7 +17,7 @@ App.Datepicker = { initialize: function() { var locale; - locale = $("#js-locale").data("current-locale"); + locale = document.documentElement.lang; $(".js-calendar").datepicker({ maxDate: "+0d" }); diff --git a/app/assets/stylesheets/layout.scss b/app/assets/stylesheets/layout.scss index 58380e9e7..b9539fc71 100644 --- a/app/assets/stylesheets/layout.scss +++ b/app/assets/stylesheets/layout.scss @@ -486,24 +486,6 @@ body > header, border-bottom: 1px solid #fff; } - .locale { - float: left; - height: $line-height * 1.5; - margin-left: $line-height / 2; - position: relative; - - &::after { - color: #808080; - content: "\61"; - font-family: "icons" !important; - font-size: $small-font-size; - pointer-events: none; - position: absolute; - right: 2px; - top: 9px; - } - } - .remote-translations-button { &.callout { @@ -654,7 +636,10 @@ body > header, .top-links { background: $dark; font-size: $small-font-size; - padding-right: $line-height / 2; + + > :first-child { + @include grid-column-gutter; + } a { color: inherit; @@ -982,45 +967,6 @@ footer { // 06. Forms // --------- -.locale-form { - display: inline-block; - position: relative; - - label { - color: #fff; - font-size: $tiny-font-size; - font-weight: normal; - } - - select { - - option { - background: $body-background; - color: $text; - border: 0; - outline: none; - } - } - - .locale-switcher { - background: #001d33; - border: 0; - border-radius: rem-calc(4); - color: #fff; - font-size: $small-font-size; - height: $line-height; - margin-bottom: 0; - margin-top: $line-height / 4; - outline: none; - padding: 0 $line-height / 4; - width: auto; - - &:focus { - outline: $outline-focus; - } - } -} - form { label { diff --git a/app/assets/stylesheets/layout/locale_switcher.scss b/app/assets/stylesheets/layout/locale_switcher.scss new file mode 100644 index 000000000..1625043bb --- /dev/null +++ b/app/assets/stylesheets/layout/locale_switcher.scss @@ -0,0 +1,81 @@ +.locale { + float: left; + margin-bottom: $line-height / 4; + margin-top: $line-height / 4; + position: relative; + + .locale-form { + @include has-fa-icon(angle-down, solid, after); + display: inline-block; + position: relative; + + &::after { + color: $light-gray; + font-size: $small-font-size; + margin-right: 0; + pointer-events: none; + position: absolute; + right: 2px; + top: 50%; + transform: translateY(-50%); + } + + label { + color: #fff; + font-size: $tiny-font-size; + font-weight: normal; + } + + select { + background: #001d33; + border: 0; + border-radius: rem-calc(4); + color: #fff; + font-size: $small-font-size; + height: $line-height; + margin-bottom: 0; + outline: none; + padding-left: $line-height / 4; + padding-right: calc(#{$line-height / 4} + 1em); + width: auto; + + &:focus { + outline: $outline-focus; + } + + option { + background: $body-background; + color: $text; + border: 0; + outline: none; + } + } + } + + p { + @include element-invisible; + } + + ul { + $gap: 0.75em; + display: flex; + flex-wrap: wrap; + margin-left: -$gap; + + > * { + margin-left: $gap; + } + + li::after { + content: none; + } + + a { + margin-left: 0; + } + + [aria-current] { + font-weight: bold; + } + } +} diff --git a/app/components/layout/locale_switcher_component.html.erb b/app/components/layout/locale_switcher_component.html.erb new file mode 100644 index 000000000..0ff9aac9a --- /dev/null +++ b/app/components/layout/locale_switcher_component.html.erb @@ -0,0 +1,14 @@ +
+ <% if many_locales? %> +
+ + +
+ <% else %> +

<%= label %>

+ + <%= link_list(*language_links, "aria-labelledby": label_id) %> + <% end %> +
diff --git a/app/components/layout/locale_switcher_component.rb b/app/components/layout/locale_switcher_component.rb new file mode 100644 index 000000000..4e7408adf --- /dev/null +++ b/app/components/layout/locale_switcher_component.rb @@ -0,0 +1,42 @@ +class Layout::LocaleSwitcherComponent < ApplicationComponent + delegate :name_for_locale, :link_list, :current_path_with_query_params, to: :helpers + + def render? + locales.size > 1 + end + + private + + def many_locales? + locales.size > 4 + end + + def locales + I18n.available_locales + end + + def label + t("layouts.header.locale") + end + + def label_id + "locale_switcher_label" + end + + def language_links + locales.map do |locale| + [ + name_for_locale(locale), + current_path_with_query_params(locale: locale), + locale == I18n.locale, + lang: locale + ] + end + end + + def language_options + language_links.map do |text, path, _, options| + [text, path, options] + end + end +end diff --git a/app/components/shared/link_list_component.html.erb b/app/components/shared/link_list_component.html.erb new file mode 100644 index 000000000..86239013b --- /dev/null +++ b/app/components/shared/link_list_component.html.erb @@ -0,0 +1 @@ +<%= tag.ul(options) { safe_join(list_items, "\n") } %> diff --git a/app/components/shared/link_list_component.rb b/app/components/shared/link_list_component.rb new file mode 100644 index 000000000..683bc80db --- /dev/null +++ b/app/components/shared/link_list_component.rb @@ -0,0 +1,30 @@ +class Shared::LinkListComponent < ApplicationComponent + attr_reader :links, :options + + def initialize(*links, **options) + @links = links + @options = options + end + + def render? + present_links.any? + end + + private + + def present_links + links.select(&:present?) + end + + def list_items + present_links.map do |text, url, current = false, **link_options| + tag.li(({ "aria-current": true } if current)) do + if url + link_to text, url, link_options + else + text + end + end + end + end +end diff --git a/app/helpers/link_list_helper.rb b/app/helpers/link_list_helper.rb index 5af374fae..0850138fa 100644 --- a/app/helpers/link_list_helper.rb +++ b/app/helpers/link_list_helper.rb @@ -1,17 +1,5 @@ module LinkListHelper def link_list(*links, **options) - return "" if links.select(&:present?).empty? - - tag.ul(options) do - safe_join(links.select(&:present?).map do |text, url, current = false, **link_options| - tag.li(({ "aria-current": true } if current)) do - if url - link_to text, url, link_options - else - text - end - end - end, "\n") - end + render Shared::LinkListComponent.new(*links, **options) end end diff --git a/app/views/shared/_locale_switcher.html.erb b/app/views/shared/_locale_switcher.html.erb index c62d2a53d..175443cfe 100644 --- a/app/views/shared/_locale_switcher.html.erb +++ b/app/views/shared/_locale_switcher.html.erb @@ -1,19 +1 @@ -<% if I18n.available_locales.size > 1 %> -
-
- - -
-
-<% end %> +<%= render Layout::LocaleSwitcherComponent.new %> diff --git a/config/locales/en/general.yml b/config/locales/en/general.yml index 650e44785..a58e5e6ba 100644 --- a/config/locales/en/general.yml +++ b/config/locales/en/general.yml @@ -226,7 +226,6 @@ en: header: administration_menu: Menu administration: Administration - available_locales: Available languages collaborative_legislation: Collaborative legislation debates: Debates locale: "Language:" diff --git a/config/locales/es/general.yml b/config/locales/es/general.yml index 7c59338f9..81a903d8c 100644 --- a/config/locales/es/general.yml +++ b/config/locales/es/general.yml @@ -226,7 +226,6 @@ es: header: administration_menu: Menú administration: Administración - available_locales: Idiomas disponibles collaborative_legislation: Legislación colaborativa debates: Debates locale: "Idioma:" diff --git a/spec/components/layout/locale_switcher_component_spec.rb b/spec/components/layout/locale_switcher_component_spec.rb new file mode 100644 index 000000000..5d1462e49 --- /dev/null +++ b/spec/components/layout/locale_switcher_component_spec.rb @@ -0,0 +1,80 @@ +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] + 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 diff --git a/spec/components/shared/link_list_component_spec.rb b/spec/components/shared/link_list_component_spec.rb new file mode 100644 index 000000000..7f951fb30 --- /dev/null +++ b/spec/components/shared/link_list_component_spec.rb @@ -0,0 +1,93 @@ +require "rails_helper" + +describe Shared::LinkListComponent, type: :component do + it "renders nothing with an empty list" do + render_inline Shared::LinkListComponent.new + + expect(page).not_to have_css "ul" + end + + it "returns nothing with a list of nil elements" do + render_inline Shared::LinkListComponent.new(nil, nil) + + expect(page).not_to have_css "ul" + end + + it "generates a list of links" do + render_inline Shared::LinkListComponent.new( + ["Home", "/"], ["Info", "/info"], class: "menu" + ) + list = page.find("body").native.inner_html + + expect(list).to eq '\n" + end + + it "accepts anchor tags" do + render_inline Shared::LinkListComponent.new( + 'Home'.html_safe, ["Info", "/info"], class: "menu" + ) + list = page.find("body").native.inner_html + + expect(list).to eq '\n" + end + + it "accepts options for links" do + render_inline Shared::LinkListComponent.new( + ["Home", "/", class: "root"], ["Info", "/info", id: "info"] + ) + + expect(page).to have_css "a", count: 2 + expect(page).to have_css "a.root", count: 1, exact_text: "Home" + expect(page).to have_css "a#info", count: 1, exact_text: "Info" + end + + it "ignores nil entries" do + render_inline Shared::LinkListComponent.new( + ["Home", "/", class: "root"], nil, ["Info", "/info", id: "info"] + ) + + expect(page).to have_css "li", count: 2 + expect(page).to have_css "a.root", count: 1, exact_text: "Home" + expect(page).to have_css "a#info", count: 1, exact_text: "Info" + end + + it "ignores empty entries" do + render_inline Shared::LinkListComponent.new( + ["Home", "/", class: "root"], "", ["Info", "/info", id: "info"] + ) + + expect(page).to have_css "li", count: 2 + expect(page).to have_css "a.root", count: 1, exact_text: "Home" + expect(page).to have_css "a#info", count: 1, exact_text: "Info" + end + + it "accepts an optional condition to check the active element" do + render_inline Shared::LinkListComponent.new( + ["Home", "/", false], + ["Info", "/info", true], + ["Help", "/help"] + ) + + expect(page).to have_css "li", count: 3 + expect(page).to have_css "li[aria-current='true']", count: 1, exact_text: "Info" + end + + it "allows passing both the active condition and link options" do + render_inline Shared::LinkListComponent.new( + ["Home", "/", false, class: "root"], + ["Info", "/info", true, id: "info"], + ["Help", "/help", rel: "help"] + ) + + expect(page).to have_css "li", count: 3 + expect(page).to have_css "li[aria-current='true']", count: 1, exact_text: "Info" + + expect(page).to have_css "a.root", count: 1, exact_text: "Home" + expect(page).to have_css "a#info", count: 1, exact_text: "Info" + expect(page).to have_css "a[rel='help']", count: 1, exact_text: "Help" + end +end diff --git a/spec/helpers/link_list_helper_spec.rb b/spec/helpers/link_list_helper_spec.rb deleted file mode 100644 index 7626d0198..000000000 --- a/spec/helpers/link_list_helper_spec.rb +++ /dev/null @@ -1,91 +0,0 @@ -require "rails_helper" - -describe LinkListHelper do - describe "#link_list" do - it "returns an empty string with an empty list" do - expect(helper.link_list).to eq "" - end - - it "returns nothing with a list of nil elements" do - expect(helper.link_list(nil, nil)).to eq "" - end - - it "generates a list of links" do - list = helper.link_list(["Home", "/"], ["Info", "/info"], class: "menu") - - expect(list).to eq '' - expect(list).to be_html_safe - end - - it "accepts anchor tags" do - list = helper.link_list(link_to("Home", "/"), ["Info", "/info"], class: "menu") - - expect(list).to eq '' - expect(list).to be_html_safe - end - - it "accepts options for links" do - render helper.link_list(["Home", "/", class: "root"], ["Info", "/info", id: "info"]) - - expect(page).to have_css "a", count: 2 - expect(page).to have_css "a.root", count: 1, exact_text: "Home" - expect(page).to have_css "a#info", count: 1, exact_text: "Info" - end - - it "ignores nil entries" do - render helper.link_list(["Home", "/", class: "root"], nil, ["Info", "/info", id: "info"]) - - expect(page).to have_css "li", count: 2 - expect(page).to have_css "a.root", count: 1, exact_text: "Home" - expect(page).to have_css "a#info", count: 1, exact_text: "Info" - end - - it "ignores empty entries" do - render helper.link_list(["Home", "/", class: "root"], "", ["Info", "/info", id: "info"]) - - expect(page).to have_css "li", count: 2 - expect(page).to have_css "a.root", count: 1, exact_text: "Home" - expect(page).to have_css "a#info", count: 1, exact_text: "Info" - end - - it "accepts an optional condition to check the active element" do - render helper.link_list( - ["Home", "/", false], - ["Info", "/info", true], - ["Help", "/help"] - ) - - expect(page).to have_css "li", count: 3 - expect(page).to have_css "li[aria-current='true']", count: 1, exact_text: "Info" - end - - it "allows passing both the active condition and link options" do - render helper.link_list( - ["Home", "/", false, class: "root"], - ["Info", "/info", true, id: "info"], - ["Help", "/help", rel: "help"] - ) - - expect(page).to have_css "li", count: 3 - expect(page).to have_css "li[aria-current='true']", count: 1, exact_text: "Info" - - expect(page).to have_css "a.root", count: 1, exact_text: "Home" - expect(page).to have_css "a#info", count: 1, exact_text: "Info" - expect(page).to have_css "a[rel='help']", count: 1, exact_text: "Help" - end - end - - attr_reader :content - - def render(content) - @content = content - end - - def page - Capybara::Node::Simple.new(content) - end -end diff --git a/spec/shared/system/milestoneable.rb b/spec/shared/system/milestoneable.rb index d6c5df8ec..7fc8f653f 100644 --- a/spec/shared/system/milestoneable.rb +++ b/spec/shared/system/milestoneable.rb @@ -34,7 +34,7 @@ shared_examples "milestoneable" do |factory_name| expect(page).to have_content(first_milestone.status.name) end - select("Español", from: "locale-switcher") + select "Español", from: "Language:" find("#tab-milestones-label").click diff --git a/spec/shared/system/remotely_translatable.rb b/spec/shared/system/remotely_translatable.rb index 904143116..060c3ae51 100644 --- a/spec/shared/system/remotely_translatable.rb +++ b/spec/shared/system/remotely_translatable.rb @@ -25,7 +25,7 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume scenario "should be present when current locale translation does not exists" do visit path - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(page).to have_button("Traducir página") end @@ -35,7 +35,7 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume visit path expect(page).not_to have_button("Translate page") - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(page).not_to have_button("Traducir página") end @@ -45,7 +45,7 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume resource.destroy! visit path - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(page).not_to have_button("Traducir página") end @@ -55,7 +55,7 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume create(:remote_translation, remote_translatable: resource, locale: :es) visit path - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(page).not_to have_button("Traducir página") expect(page).to have_content("En un breve periodo de tiempo refrescando la página podrá ver todo el contenido en su idioma") @@ -75,7 +75,7 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume visit path expect(page).not_to have_button("Translate page") - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(page).not_to have_button("Traducir página") end @@ -94,7 +94,7 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume visit path expect(page).not_to have_button("Translate page") - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(page).to have_button("Traducir página") end @@ -105,7 +105,7 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume visit path expect(page).not_to have_button("Translate page") - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(page).not_to have_button("Traducir página") end @@ -120,7 +120,7 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume visit path expect(page).not_to have_button("Translate page") - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(page).to have_button("Traducir página") end @@ -135,7 +135,7 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume visit path expect(page).not_to have_button("Translate page") - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(page).to have_button("Traducir página") end @@ -146,7 +146,7 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume describe "with delayed jobs", :delay_jobs do scenario "the remote translation button should not be present" do visit path - select("Español", from: "locale-switcher") + select "Español", from: "Language:" click_button "Traducir página" @@ -155,14 +155,14 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume scenario "the remote translation is pending to translate" do visit path - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect { click_button "Traducir página" }.to change { RemoteTranslation.count }.from(0).to(1) end scenario "should be present enqueued notice and informative text" do visit path - select("Español", from: "locale-switcher") + select "Español", from: "Language:" click_button "Traducir página" @@ -172,12 +172,12 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume scenario "should be present only informative text when user visit page with all content enqueued" do visit path - select("Español", from: "locale-switcher") + select "Español", from: "Language:" click_button "Traducir página" expect(page).to have_content("Se han solicitado correctamente las traducciones.") visit path - select("Español", from: "locale-switcher") + select "Español", from: "Idioma:" expect(page).not_to have_button "Traducir página" expect(page).not_to have_content("Se han solicitado correctamente las traducciones.") @@ -190,7 +190,7 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume microsoft_translate_client_response = generate_response(resource) expect_any_instance_of(RemoteTranslations::Microsoft::Client).to receive(:call).and_return(microsoft_translate_client_response) visit path - select("Español", from: "locale-switcher") + select "Español", from: "Language:" click_button "Traducir página" @@ -201,7 +201,7 @@ shared_examples "remotely_translatable" do |factory_name, path_name, path_argume microsoft_translate_client_response = generate_response(resource) expect_any_instance_of(RemoteTranslations::Microsoft::Client).to receive(:call).and_return(microsoft_translate_client_response) visit path - select("Español", from: "locale-switcher") + select "Español", from: "Language:" click_button "Traducir página" diff --git a/spec/system/admin/poll/questions_spec.rb b/spec/system/admin/poll/questions_spec.rb index b94c2701d..7c00560aa 100644 --- a/spec/system/admin/poll/questions_spec.rb +++ b/spec/system/admin/poll/questions_spec.rb @@ -161,7 +161,7 @@ describe "Admin poll questions", :admin do expect(page).to have_select("poll_question_poll_id", options: ["Select Poll", poll.name_en]) - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(page).to have_select("poll_question_poll_id", options: ["Seleccionar votación", poll.name_es]) @@ -180,7 +180,7 @@ describe "Admin poll questions", :admin do expect(page).to have_select("poll_question_poll_id", options: ["Select Poll", poll.name_en]) - select("Français", from: "locale-switcher") + select "Français", from: "Language:" expect(page).to have_select("poll_question_poll_id", options: ["Sélectionner un vote", poll.name_es]) diff --git a/spec/system/admin/translatable_spec.rb b/spec/system/admin/translatable_spec.rb index ea4b18059..aa656ac89 100644 --- a/spec/system/admin/translatable_spec.rb +++ b/spec/system/admin/translatable_spec.rb @@ -112,7 +112,7 @@ describe "Admin edit translatable records", :admin do click_button "Save changes" visit path - select "Português brasileiro", from: "locale-switcher" + select "Português brasileiro", from: "Language:" expect(page).to have_field "Questão", with: "Português" end @@ -205,7 +205,7 @@ describe "Admin edit translatable records", :admin do expect(page).to have_field "Title", with: "Title in English" - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(page).to have_field "Título", with: "Título corregido" expect(page).to have_field "Descripción", with: "Descripción corregida" @@ -234,7 +234,7 @@ describe "Admin edit translatable records", :admin do expect(page).to have_field "Answer", with: "Answer in English" - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(page).to have_field "Respuesta", with: "Respuesta corregida" expect(page).to have_ckeditor "Descripción", with: "Descripción corregida" @@ -466,7 +466,7 @@ describe "Admin edit translatable records", :admin do expect_to_have_language_selected "English" - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect_to_have_language_selected "Español" end diff --git a/spec/system/budget_polls/budgets_spec.rb b/spec/system/budget_polls/budgets_spec.rb index 26af07349..ace94f919 100644 --- a/spec/system/budget_polls/budgets_spec.rb +++ b/spec/system/budget_polls/budgets_spec.rb @@ -22,7 +22,7 @@ describe "Admin Budgets", :admin do name_fr: "Budget pour le changement climatique") visit admin_budgets_path - select("Français", from: "locale-switcher") + select "Français", from: "Language:" click_link "Bulletins de l’admin" diff --git a/spec/system/localization_spec.rb b/spec/system/localization_spec.rb index f3a26aeb4..d8da3f300 100644 --- a/spec/system/localization_spec.rb +++ b/spec/system/localization_spec.rb @@ -16,79 +16,23 @@ describe "Localization" do expect(page).to have_text("Bienvenido a CONSUL") end - scenario "Available locales appear in the locale switcher" do - visit "/" - - within(".locale-form .js-location-changer") do - expect(page).to have_content "Español" - expect(page).to have_content "English" - end - end - - scenario "The current locale is selected" do - visit "/" - expect(page).to have_select("locale-switcher", selected: "English") - end - scenario "Changing the locale" do visit "/" - expect(page).to have_content("Language") + select "Español", from: "Language:" - select("Español", from: "locale-switcher") - expect(page).to have_content("Idioma") - expect(page).not_to have_content("Language") - expect(page).to have_select("locale-switcher", selected: "Español") + expect(page).not_to have_select "Language:" + expect(page).to have_select "Idioma:", selected: "Español" end scenario "Keeps query parameters while using protected redirects" do visit "/debates?order=created_at&host=evil.dev" - select("Español", from: "locale-switcher") + select "Español", from: "Language:" expect(current_host).to eq "http://127.0.0.1" expect(page).to have_current_path "/debates?locale=es&order=created_at" end - context "Only one locale" do - before do - allow(I18n).to receive(:available_locales).and_return([:en]) - I18n.reload! - end - - after { I18n.reload! } - - scenario "Locale switcher not present" do - visit "/" - expect(page).not_to have_content("Language") - expect(page).not_to have_css("div.locale") - end - end - - context "Missing language names" do - let!(:default_enforce) { I18n.enforce_available_locales } - let!(:default_locales) { I18n.available_locales.dup } - - before do - I18n.enforce_available_locales = false - I18n.available_locales = default_locales + [:wl] - I18n.locale = :wl - end - - after do - I18n.enforce_available_locales = default_enforce - I18n.available_locales = default_locales - I18n.locale = I18n.default_locale - end - - scenario "Available locales without language translation display locale key" do - visit "/" - - within(".locale-form .js-location-changer") do - expect(page).to have_content "wl" - end - end - end - scenario "uses default locale when session locale has disappeared" do default_locales = I18n.available_locales diff --git a/spec/system/management/localization_spec.rb b/spec/system/management/localization_spec.rb index a6fba743f..4bac4c0b8 100644 --- a/spec/system/management/localization_spec.rb +++ b/spec/system/management/localization_spec.rb @@ -9,36 +9,12 @@ describe "Localization" do expect(page).to have_text("Gestión") end - scenario "Available locales appear in the locale switcher" do - login_as_manager - - within(".locale-form .js-location-changer") do - expect(page).to have_content "Español" - expect(page).to have_content "English" - end - end - - scenario "The current locale is selected" do - login_as_manager - expect(page).to have_select("locale-switcher", selected: "English") - expect(page).to have_text("Management") - end - scenario "Changing the locale" do login_as_manager - expect(page).to have_content("Language") + select "Español", from: "Language:" - select("Español", from: "locale-switcher") - expect(page).to have_content("Idioma") - expect(page).not_to have_content("Language") - expect(page).to have_select("locale-switcher", selected: "Español") - end - - scenario "Locale switcher not present if only one locale" do - allow(I18n).to receive(:available_locales).and_return([:en]) - - login_as_manager - expect(page).not_to have_content("Language") - expect(page).not_to have_css("div.locale") + expect(page).not_to have_select "Language:" + expect(page).to have_select "Idioma:", selected: "Español" + expect(page).to have_content "Gestión" end end diff --git a/spec/system/translatable_spec.rb b/spec/system/translatable_spec.rb index 4b8697e21..3d900582b 100644 --- a/spec/system/translatable_spec.rb +++ b/spec/system/translatable_spec.rb @@ -115,7 +115,7 @@ describe "Public area translatable records" do scenario "Highlight new locale added" do visit new_proposal_path - select "Español", from: "locale-switcher" + select "Español", from: "Language:" expect_to_have_language_selected "Español" end @@ -206,7 +206,7 @@ describe "Public area translatable records" do expect(page).to have_field "Debate title", with: "Title in English" - select "Español", from: "locale-switcher" + select "Español", from: "Language:" expect(page).to have_field "Título del debate", with: "Título corregido" expect(page).to have_ckeditor "Texto inicial del debate", with: "Texto corregido"