From 9d9f5d38d70e960cd43bff110547f826220d6790 Mon Sep 17 00:00:00 2001 From: luisramos0 Date: Tue, 23 Oct 2018 13:35:31 +0100 Subject: [PATCH 1/2] Fix multi lingual issue in cart and checkout: the user language selection was not being used --- .../spree/store_controller_decorator.rb | 3 + spec/features/consumer/multilingual_spec.rb | 71 +++++++++++++------ 2 files changed, 54 insertions(+), 20 deletions(-) diff --git a/app/controllers/spree/store_controller_decorator.rb b/app/controllers/spree/store_controller_decorator.rb index 09c2efc7b4..d1d8fb8277 100644 --- a/app/controllers/spree/store_controller_decorator.rb +++ b/app/controllers/spree/store_controller_decorator.rb @@ -1,6 +1,9 @@ class Spree::StoreController layout 'darkswarm' + include I18nHelper + before_filter :set_locale + def unauthorized render 'shared/unauthorized', :status => 401 end diff --git a/spec/features/consumer/multilingual_spec.rb b/spec/features/consumer/multilingual_spec.rb index b690f5c802..98d2c385ca 100644 --- a/spec/features/consumer/multilingual_spec.rb +++ b/spec/features/consumer/multilingual_spec.rb @@ -3,6 +3,7 @@ require 'spec_helper' feature 'Multilingual', js: true do include AuthenticationWorkflow include WebHelper + include ShopWorkflow it 'has two locales available' do expect(Rails.application.config.i18n[:default_locale]).to eq 'en' @@ -16,28 +17,58 @@ feature 'Multilingual', js: true do expect(get_i18n_translation('label_shops')).to eq 'Shops' end - it 'can switch language by params' do - visit root_path - expect(get_i18n_locale).to eq 'en' - expect(get_i18n_translation('label_shops')).to eq 'Shops' - expect(page.driver.browser.cookies['locale']).to be_nil - expect(page).to have_content 'Interested in getting on the Open Food Network?' - expect(page).to have_content 'SHOPS' + 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(page.driver.browser.cookies['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(page.driver.browser.cookies['locale'].value).to eq 'es' - expect(page).to have_content '¿Estás interesada en entrar en Open Food Network?' - expect(page).to have_content 'TIENDAS' + visit root_path(locale: 'es') + expect(get_i18n_locale).to eq 'es' + expect(get_i18n_translation('label_shops')).to eq 'Tiendas' + expect(page.driver.browser.cookies['locale'].value).to eq 'es' + expect(page).to have_content '¿Estás interesada en entrar en Open Food Network?' + expect(page).to have_content 'TIENDAS' - # 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(page.driver.browser.cookies['locale'].value).to eq 'es' - expect(page).to have_content '¿Estás interesada en entrar en Open Food Network?' - expect(page).to have_content 'TIENDAS' + # 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(page.driver.browser.cookies['locale'].value).to eq 'es' + expect(page).to have_content '¿Estás interesada en entrar en Open Food Network?' + expect(page).to have_content 'TIENDAS' + 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 spree.cart_path(locale: 'es') + + expect(page).to have_content 'TIENDAS' + expect(page.driver.browser.cookies['locale'].value).to eq 'es' + expect(page).to have_content 'Precio' + end + + scenario "in the checkout page" do + visit checkout_path(locale: 'es') + + expect(page).to have_content 'TIENDAS' + expect(page.driver.browser.cookies['locale'].value).to eq 'es' + expect(page).to have_content 'Total del carrito' + end + end end context 'with user' do From 034d9ef72a871bf9d9b168e8e928f347cf5ebacd Mon Sep 17 00:00:00 2001 From: luisramos0 Date: Tue, 23 Oct 2018 13:59:33 +0100 Subject: [PATCH 2/2] Refactor multilingual spec: extract method with repeated assertion --- spec/features/consumer/multilingual_spec.rb | 27 ++++++++++----------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/spec/features/consumer/multilingual_spec.rb b/spec/features/consumer/multilingual_spec.rb index 98d2c385ca..e0c0793154 100644 --- a/spec/features/consumer/multilingual_spec.rb +++ b/spec/features/consumer/multilingual_spec.rb @@ -29,17 +29,15 @@ feature 'Multilingual', js: true do visit root_path(locale: 'es') expect(get_i18n_locale).to eq 'es' expect(get_i18n_translation('label_shops')).to eq 'Tiendas' - expect(page.driver.browser.cookies['locale'].value).to eq 'es' + expect_menu_and_cookie_in_es expect(page).to have_content '¿Estás interesada en entrar en Open Food Network?' - expect(page).to have_content 'TIENDAS' # 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(page.driver.browser.cookies['locale'].value).to eq 'es' + expect_menu_and_cookie_in_es expect(page).to have_content '¿Estás interesada en entrar en Open Food Network?' - expect(page).to have_content 'TIENDAS' end context 'with a product in the cart' do @@ -56,16 +54,14 @@ feature 'Multilingual', js: true do scenario "in the cart page" do visit spree.cart_path(locale: 'es') - expect(page).to have_content 'TIENDAS' - expect(page.driver.browser.cookies['locale'].value).to eq '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(page).to have_content 'TIENDAS' - expect(page.driver.browser.cookies['locale'].value).to eq 'es' + expect_menu_and_cookie_in_es expect(page).to have_content 'Total del carrito' end end @@ -77,12 +73,12 @@ feature 'Multilingual', js: true do it 'updates user locale from cookie if it is empty' do visit root_path(locale: 'es') - expect(page.driver.browser.cookies['locale'].value).to eq 'es' + expect_menu_and_cookie_in_es expect(user.locale).to be_nil quick_login_as user visit root_path - expect(page.driver.browser.cookies['locale'].value).to eq 'es' + expect_menu_and_cookie_in_es end it 'updates user locale and stays in cookie after logout' do @@ -94,9 +90,8 @@ feature 'Multilingual', js: true do logout - expect(page.driver.browser.cookies['locale'].value).to eq 'es' + expect_menu_and_cookie_in_es expect(page).to have_content '¿Estás interesada en entrar en Open Food Network?' - expect(page).to have_content 'TIENDAS' end end @@ -134,9 +129,13 @@ feature 'Multilingual', js: true do find('li a[href="?locale=es"]').click end - expect(page.driver.browser.cookies['locale'].value).to eq 'es' - expect(page).to have_content 'TIENDAS' + expect_menu_and_cookie_in_es end end end end + +def expect_menu_and_cookie_in_es + expect(page.driver.browser.cookies['locale'].value).to eq 'es' + expect(page).to have_content 'TIENDAS' +end