Add language when new user visit context is detected (#20263)
* Add language when new user visit context is detected * Finalize tests
This commit is contained in:
parent
2314043432
commit
1da43d9027
2 changed files with 62 additions and 3 deletions
|
|
@ -1,4 +1,27 @@
|
|||
class UserVisitContext < ApplicationRecord
|
||||
belongs_to :user
|
||||
has_many :ahoy_visits, class_name: "Ahoy::Visit", dependent: :nullify
|
||||
|
||||
after_create :set_user_language
|
||||
|
||||
def set_user_language
|
||||
# When we detect a new user context, we automatically
|
||||
# add languages with a weight of greater than 0.7
|
||||
languages = accept_language.split(",")
|
||||
|
||||
languages.map! do |lang|
|
||||
lang, q = lang.split(";q=")
|
||||
[lang[0..1], (q || "1").to_f]
|
||||
end
|
||||
|
||||
filtered_languages = languages
|
||||
.select { |_, q| q >= 0.7 }
|
||||
.uniq { |lang, _| lang }
|
||||
|
||||
filtered_languages.map(&:first).each do |lang|
|
||||
UserLanguage.where(user_id: user_id, language: lang).first_or_create
|
||||
end
|
||||
rescue StandardError => e
|
||||
Rails.logger.error(e)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,5 +1,41 @@
|
|||
require 'rails_helper'
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe UserVisitContext, type: :model do
|
||||
pending "add some examples to (or delete) #{__FILE__}"
|
||||
RSpec.describe UserVisitContext do
|
||||
describe "associations" do
|
||||
it { is_expected.to belong_to(:user) }
|
||||
it { is_expected.to have_many(:ahoy_visits).class_name("Ahoy::Visit").dependent(:nullify) }
|
||||
end
|
||||
|
||||
describe "callbacks" do
|
||||
let(:user) { create(:user) }
|
||||
let(:user_visit_context) { build(:user_visit_context, user: user) }
|
||||
|
||||
it "calls set_user_language after create" do
|
||||
allow(user_visit_context).to receive(:set_user_language)
|
||||
user_visit_context.save!
|
||||
expect(user_visit_context).to have_received(:set_user_language)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#set_user_language" do
|
||||
let(:user) { create(:user) }
|
||||
let(:user_visit_context) { build(:user_visit_context, user: user, accept_language: "en-US;q=0.9,fr-FR;q=0.8") }
|
||||
|
||||
it "creates UserLanguage records" do
|
||||
expect { user_visit_context.set_user_language }
|
||||
.to change(UserLanguage, :count).by(2)
|
||||
end
|
||||
|
||||
it "logs an error if something goes wrong" do
|
||||
allow(UserLanguage).to receive(:where).and_raise(StandardError)
|
||||
allow(Rails.logger).to receive(:error).with(instance_of(StandardError))
|
||||
user_visit_context.set_user_language
|
||||
expect(Rails.logger).to have_received(:error).with(instance_of(StandardError))
|
||||
end
|
||||
|
||||
it "matches specific languages" do
|
||||
user_visit_context.set_user_language
|
||||
expect(UserLanguage.pluck(:language)).to match_array(%w[en fr])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue