mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-25 05:45:15 +00:00
The locale config is set in application.rb from environment variables already. We don't need to repeat that logic in test.rb. And because it was outdated, the language switcher was actually broken in the test environment. We did have an English selector for the fallback `en` even though we were already displaying English as en_TST. And after switchting to Spanish, we could switch back because en_TST was not in the available locales. I now fixed the test with the right assumption and the config to solve the problem.
83 lines
2.3 KiB
Ruby
83 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'system_helper'
|
|
|
|
RSpec.describe 'Multilingual' do
|
|
include AuthenticationHelper
|
|
include WebHelper
|
|
include ShopWorkflow
|
|
include UIComponentHelper
|
|
include CookieHelper
|
|
|
|
let(:user) { create(:user) }
|
|
|
|
it 'has three locales available' do
|
|
expect(Rails.application.config.i18n[:default_locale]).to eq 'en_TST'
|
|
expect(Rails.application.config.i18n[:locale]).to eq 'en_TST'
|
|
expect(Rails.application.config.i18n[:available_locales]).to eq ['en_TST', 'es', 'pt', 'en']
|
|
end
|
|
|
|
it 'can switch language by params' do
|
|
visit root_path
|
|
expect(pick_i18n_locale).to eq 'en_TST'
|
|
expect(get_i18n_translation('label_shops')).to eq 'Shops'
|
|
expect(cookies_name).not_to include('locale')
|
|
expect(page).to have_content 'SHOPS'
|
|
|
|
visit root_path(locale: 'es')
|
|
expect(pick_i18n_locale).to eq 'es'
|
|
expect(get_i18n_translation('label_shops')).to eq 'Tiendas'
|
|
expect_menu_and_cookie_in_es
|
|
|
|
# it is not in the list of available of available_locales
|
|
visit root_path(locale: 'it')
|
|
expect(pick_i18n_locale).to eq 'es'
|
|
expect(get_i18n_translation('label_shops')).to eq 'Tiendas'
|
|
expect_menu_and_cookie_in_es
|
|
end
|
|
|
|
it 'updates user locale from cookie if it is empty' do
|
|
visit root_path(locale: 'es')
|
|
|
|
expect_menu_and_cookie_in_es
|
|
expect(user.locale).to be_nil
|
|
login_as user
|
|
visit root_path
|
|
|
|
expect_menu_and_cookie_in_es
|
|
|
|
# The user's locale is not changed if the language was chosen before
|
|
# login. Is it a bug or a feature? Probably not important...
|
|
expect(user.reload.locale).to eq nil
|
|
|
|
visit root_path(locale: 'es')
|
|
expect(user.reload.locale).to eq 'es'
|
|
|
|
logout
|
|
|
|
expect_menu_and_cookie_in_es
|
|
expect(page).to have_content '¿Estás interesada en entrar en Open Food Network?'
|
|
end
|
|
|
|
it "allows switching language via the main navigation" do
|
|
visit root_path
|
|
|
|
expect(page).to have_content 'SHOPS'
|
|
|
|
find('.language-switcher').click
|
|
within '.language-switcher .dropdown' do
|
|
expect(page).not_to have_link 'English'
|
|
expect(page).to have_link 'Español'
|
|
|
|
click_link 'Español'
|
|
end
|
|
|
|
expect_menu_and_cookie_in_es
|
|
end
|
|
end
|
|
|
|
def expect_menu_and_cookie_in_es
|
|
expect(cookies_name['locale']).to have_attributes(value: "es")
|
|
expect(page).to have_content 'TIENDAS'
|
|
end
|