mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
Fixes several errors such as:
104) UserRegistrationsController via ajax sets user.locale from cookie on create
Failure/Error: I18n.locale = spree_current_user.andand.locale || cookies[:locale] || I18n.default_locale
I18n::InvalidLocale:
"pt" is not a valid locale
# ./app/helpers/i18n_helper.rb:14:in `set_locale'
# ./spec/controllers/user_registrations_controller_spec.rb:56:in `block (3 levels) in <top (required)>'
145 lines
4.6 KiB
Ruby
145 lines
4.6 KiB
Ruby
require 'spec_helper'
|
|
|
|
feature 'Multilingual', js: true do
|
|
include AuthenticationWorkflow
|
|
include WebHelper
|
|
include ShopWorkflow
|
|
include UIComponentHelper
|
|
include CookieHelper
|
|
|
|
it 'has three locales available' do
|
|
expect(Rails.application.config.i18n[:default_locale]).to eq 'en'
|
|
expect(Rails.application.config.i18n[:locale]).to eq 'en'
|
|
expect(Rails.application.config.i18n[:available_locales]).to eq ['en', 'es', 'pt']
|
|
end
|
|
|
|
it '18n-js fallsback to default language' do # in backend it doesn't until we change enforce_available_locales to `true`
|
|
visit root_path
|
|
set_i18n_locale('it')
|
|
expect(get_i18n_translation('label_shops')).to eq 'Shops'
|
|
end
|
|
|
|
context 'can switch language by params' do
|
|
scenario 'in root path' do
|
|
visit root_path
|
|
expect(get_i18n_locale).to eq 'en'
|
|
expect(get_i18n_translation('label_shops')).to eq 'Shops'
|
|
expect(cookie_named('locale')).to be_nil
|
|
expect(page).to have_content 'Interested in getting on the Open Food Network?'
|
|
expect(page).to have_content 'SHOPS'
|
|
|
|
visit root_path(locale: 'es')
|
|
expect(get_i18n_locale).to eq 'es'
|
|
expect(get_i18n_translation('label_shops')).to eq 'Tiendas'
|
|
expect_menu_and_cookie_in_es
|
|
expect(page).to have_content '¿Estás interesada en entrar en Open Food Network?'
|
|
|
|
# it is not in the list of available of available_locales
|
|
visit root_path(locale: 'it')
|
|
expect(get_i18n_locale).to eq 'es'
|
|
expect(get_i18n_translation('label_shops')).to eq 'Tiendas'
|
|
expect_menu_and_cookie_in_es
|
|
expect(page).to have_content '¿Estás interesada en entrar en Open Food Network?'
|
|
end
|
|
|
|
context 'with a product in the cart' do
|
|
let(:distributor) { create(:distributor_enterprise, with_payment_and_shipping: true) }
|
|
let!(:order_cycle) { create(:simple_order_cycle, distributors: [distributor], variants: [product.variants.first]) }
|
|
let(:product) { create(:simple_product) }
|
|
let(:order) { create(:order, order_cycle: order_cycle, distributor: distributor) }
|
|
|
|
before do
|
|
set_order order
|
|
add_product_to_cart order, product, quantity: 1
|
|
end
|
|
|
|
scenario "in the cart page" do
|
|
visit main_app.cart_path(locale: 'es')
|
|
|
|
expect_menu_and_cookie_in_es
|
|
expect(page).to have_content 'Precio'
|
|
end
|
|
|
|
scenario "in the checkout page" do
|
|
visit checkout_path(locale: 'es')
|
|
|
|
expect_menu_and_cookie_in_es
|
|
expect(page).to have_content 'Total del carrito'
|
|
end
|
|
end
|
|
end
|
|
|
|
context 'with user' do
|
|
let(:user) { create(:user) }
|
|
|
|
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
|
|
quick_login_as user
|
|
visit root_path
|
|
|
|
expect_menu_and_cookie_in_es
|
|
end
|
|
|
|
it 'updates user locale and stays in cookie after logout' do
|
|
quick_login_as user
|
|
visit root_path(locale: 'es')
|
|
user.reload
|
|
|
|
expect(user.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
|
|
end
|
|
|
|
describe "using the language switcher UI" do
|
|
before { browse_as_large }
|
|
context "when there is only one language available" do
|
|
before do
|
|
allow(ENV).to receive(:[]).and_call_original
|
|
allow(ENV).to receive(:[]).with("LOCALE").and_return("en")
|
|
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return("en")
|
|
end
|
|
|
|
it "hides the dropdown language menu" do
|
|
visit root_path
|
|
expect(page).to have_no_css 'ul.right li.language-switcher.has-dropdown'
|
|
end
|
|
end
|
|
|
|
context "when there are multiple languages available" do
|
|
before do
|
|
allow(ENV).to receive(:[]).and_call_original
|
|
allow(ENV).to receive(:[]).with("LOCALE").and_return("en")
|
|
allow(ENV).to receive(:[]).with("AVAILABLE_LOCALES").and_return("en,es")
|
|
end
|
|
|
|
it "allows switching language via the main navigation" do
|
|
visit root_path
|
|
|
|
expect(page).to have_content 'SHOPS'
|
|
|
|
find('ul.right li.language-switcher').click
|
|
within 'ul.right li.language-switcher ul.dropdown' do
|
|
expect(page).to have_link I18n.t('language_name', locale: :en), href: '?locale=en'
|
|
expect(page).to have_link I18n.t('language_name', locale: :es, default: 'Language Name'), href: '?locale=es'
|
|
|
|
find('li a[href="?locale=es"]').click
|
|
end
|
|
|
|
expect_menu_and_cookie_in_es
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def expect_menu_and_cookie_in_es
|
|
expect(cookie_named('locale')[:value]).to eq 'es'
|
|
expect(page).to have_content 'TIENDAS'
|
|
end
|