From e274442d77a3541de50127cbfb5af4443d73744c Mon Sep 17 00:00:00 2001 From: luisramos0 Date: Thu, 6 Dec 2018 15:13:32 +0000 Subject: [PATCH] Cover i18nhelper.valid_locale and user mailer with tests related to localized emails --- .rubocop_todo.yml | 1 - app/helpers/i18n_helper.rb | 10 +++--- spec/helpers/i18n_helper_spec.rb | 58 +++++++++++++++++++++++++------- spec/mailers/user_mailer_spec.rb | 29 ++++++++++++++-- 4 files changed, 76 insertions(+), 22 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 99c836deb1..e8b203c9d6 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -845,7 +845,6 @@ Layout/SpaceInsideHashLiteralBraces: - 'spec/features/admin/reports_spec.rb' - 'spec/features/consumer/shopping/checkout_spec.rb' - 'spec/helpers/checkout_helper_spec.rb' - - 'spec/helpers/i18n_helper_spec.rb' - 'spec/helpers/order_cycles_helper_spec.rb' - 'spec/lib/open_food_network/enterprise_fee_calculator_spec.rb' - 'spec/lib/open_food_network/feature_toggle_spec.rb' diff --git a/app/helpers/i18n_helper.rb b/app/helpers/i18n_helper.rb index 215028e5aa..3293d42d98 100644 --- a/app/helpers/i18n_helper.rb +++ b/app/helpers/i18n_helper.rb @@ -14,11 +14,11 @@ module I18nHelper I18n.locale = spree_current_user.andand.locale || cookies[:locale] || I18n.default_locale end - def valid_locale(object_with_locale) - if object_with_locale.present? && - object_with_locale.locale.present? && - available_locale?(object_with_locale.locale) - object_with_locale.locale + def valid_locale(user) + if user.present? && + user.locale.present? && + available_locale?(user.locale) + user.locale else I18n.default_locale end diff --git a/spec/helpers/i18n_helper_spec.rb b/spec/helpers/i18n_helper_spec.rb index 62c58e2345..fba8ab882b 100644 --- a/spec/helpers/i18n_helper_spec.rb +++ b/spec/helpers/i18n_helper_spec.rb @@ -24,13 +24,13 @@ describe I18nHelper, type: :helper do end it "sets the chosen locale" do - allow(helper).to receive(:params) { {locale: "es"} } + allow(helper).to receive(:params) { { locale: "es" } } helper.set_locale expect(I18n.locale).to eq :es end it "remembers the chosen locale" do - allow(helper).to receive(:params) { {locale: "es"} } + allow(helper).to receive(:params) { { locale: "es" } } helper.set_locale allow(helper).to receive(:params) { {} } @@ -39,16 +39,16 @@ describe I18nHelper, type: :helper do end it "ignores unavailable locales" do - allow(helper).to receive(:params) { {locale: "xx"} } + allow(helper).to receive(:params) { { locale: "xx" } } helper.set_locale expect(I18n.locale).to eq :en end it "remembers the last chosen locale" do - allow(helper).to receive(:params) { {locale: "en"} } + allow(helper).to receive(:params) { { locale: "en" } } helper.set_locale - allow(helper).to receive(:params) { {locale: "es"} } + allow(helper).to receive(:params) { { locale: "es" } } helper.set_locale allow(helper).to receive(:params) { {} } @@ -57,7 +57,7 @@ describe I18nHelper, type: :helper do end it "remembers the chosen locale after logging in" do - allow(helper).to receive(:params) { {locale: "es"} } + allow(helper).to receive(:params) { { locale: "es" } } helper.set_locale # log in @@ -68,7 +68,7 @@ describe I18nHelper, type: :helper do end it "forgets the chosen locale without cookies" do - allow(helper).to receive(:params) { {locale: "es"} } + allow(helper).to receive(:params) { { locale: "es" } } helper.set_locale # clean up cookies @@ -91,14 +91,14 @@ describe I18nHelper, type: :helper do end it "sets the chosen locale" do - allow(helper).to receive(:params) { {locale: "es"} } + allow(helper).to receive(:params) { { locale: "es" } } helper.set_locale expect(I18n.locale).to eq :es expect(user.locale).to eq "es" end it "remembers the chosen locale" do - allow(helper).to receive(:params) { {locale: "es"} } + allow(helper).to receive(:params) { { locale: "es" } } helper.set_locale allow(helper).to receive(:params) { {} } @@ -107,10 +107,10 @@ describe I18nHelper, type: :helper do end it "remembers the last chosen locale" do - allow(helper).to receive(:params) { {locale: "en"} } + allow(helper).to receive(:params) { { locale: "en" } } helper.set_locale - allow(helper).to receive(:params) { {locale: "es"} } + allow(helper).to receive(:params) { { locale: "es" } } helper.set_locale allow(helper).to receive(:params) { {} } @@ -119,7 +119,7 @@ describe I18nHelper, type: :helper do end it "remembers the chosen locale after logging out" do - allow(helper).to receive(:params) { {locale: "es"} } + allow(helper).to receive(:params) { { locale: "es" } } helper.set_locale # log out @@ -130,7 +130,7 @@ describe I18nHelper, type: :helper do end it "remembers the chosen locale on another computer" do - allow(helper).to receive(:params) { {locale: "es"} } + allow(helper).to receive(:params) { { locale: "es" } } helper.set_locale expect(cookies[:locale]).to eq "es" @@ -142,4 +142,36 @@ describe I18nHelper, type: :helper do expect(I18n.locale).to eq :es end end + + context "#valid_locale" do + around do |example| + original_default_locale = I18n.default_locale + original_available_locales = Rails.application.config.i18n.available_locales + I18n.default_locale = "es" + Rails.application.config.i18n.available_locales = ["es", "pt"] + example.run + I18n.default_locale = original_default_locale + Rails.application.config.i18n.available_locales = original_available_locales + end + + let(:user) { build(:user) } + + it "returns default locale if given user is nil" do + expect(helper.valid_locale(nil)).to eq I18n.default_locale + end + + it "returns default locale if locale of given user is nil" do + expect(helper.valid_locale(user)).to eq I18n.default_locale + end + + it "returns default locale if locale of given user is not available" do + user.locale = "cn" + expect(helper.valid_locale(user)).to eq I18n.default_locale + end + + it "returns the locale of the given user if available" do + user.locale = "pt" + expect(helper.valid_locale(user)).to eq "pt" + end + end end diff --git a/spec/mailers/user_mailer_spec.rb b/spec/mailers/user_mailer_spec.rb index 8082d0f6a6..9b4790e5ad 100644 --- a/spec/mailers/user_mailer_spec.rb +++ b/spec/mailers/user_mailer_spec.rb @@ -17,9 +17,32 @@ describe Spree::UserMailer do setup_email end - it "sends an email when given a user" do - Spree::UserMailer.signup_confirmation(user).deliver - ActionMailer::Base.deliveries.count.should == 1 + describe '#signup_confirmation' do + it "sends email when given a user" do + Spree::UserMailer.signup_confirmation(user).deliver + expect(ActionMailer::Base.deliveries.count).to eq(1) + end + + describe "user locale" do + around do |example| + original_default_locale = I18n.default_locale + I18n.default_locale = 'pt' + example.run + I18n.default_locale = original_default_locale + end + + it "sends email in user locale when user locale is defined" do + user.locale = 'es' + Spree::UserMailer.signup_confirmation(user).deliver + expect(ActionMailer::Base.deliveries.first.body).to include "Gracias por unirte" + end + + it "sends email in default locale when user locale is not available" do + user.locale = 'cn' + Spree::UserMailer.signup_confirmation(user).deliver + expect(ActionMailer::Base.deliveries.first.body).to include "Obrigada por juntar-se" + end + end end # adapted from https://github.com/spree/spree_auth_devise/blob/70737af/spec/mailers/user_mailer_spec.rb