create Users::EstimateDefaultLanguageWorker for Sidekiq (#5697) [deploy]
This commit is contained in:
parent
7115d7e3ed
commit
58b96f104e
4 changed files with 56 additions and 9 deletions
|
|
@ -170,7 +170,7 @@ class User < ApplicationRecord
|
|||
after_save :bust_cache
|
||||
after_save :subscribe_to_mailchimp_newsletter
|
||||
after_save :conditionally_resave_articles
|
||||
after_create :estimate_default_language
|
||||
after_create_commit :estimate_default_language
|
||||
before_create :set_default_language
|
||||
before_validation :set_username
|
||||
# make sure usernames are not empty, to be able to use the database unique index
|
||||
|
|
@ -489,7 +489,7 @@ class User < ApplicationRecord
|
|||
end
|
||||
|
||||
def estimate_default_language
|
||||
Users::EstimateDefaultLanguageJob.perform_later(id)
|
||||
Users::EstimateDefaultLanguageWorker.perform_async(id)
|
||||
end
|
||||
|
||||
def set_default_language
|
||||
|
|
|
|||
14
app/workers/users/estimate_default_language_worker.rb
Normal file
14
app/workers/users/estimate_default_language_worker.rb
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
module Users
|
||||
class EstimateDefaultLanguageWorker
|
||||
include Sidekiq::Worker
|
||||
|
||||
sidekiq_options queue: :high_priority, retry: 10
|
||||
|
||||
def perform(user_id)
|
||||
user = User.find_by(id: user_id)
|
||||
return unless user
|
||||
|
||||
Users::EstimateDefaultLanguage.call(user)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -442,32 +442,41 @@ RSpec.describe User, type: :model do
|
|||
|
||||
describe "#estimated_default_language" do
|
||||
it "estimates default language to be nil" do
|
||||
perform_enqueued_jobs do
|
||||
sidekiq_perform_enqueued_jobs do
|
||||
expect(user.estimated_default_language).to be(nil)
|
||||
end
|
||||
end
|
||||
|
||||
it "estimates default language to be japanese with .jp email" do
|
||||
perform_enqueued_jobs do
|
||||
user = nil
|
||||
|
||||
sidekiq_perform_enqueued_jobs do
|
||||
user = create(:user, email: "ben@hello.jp")
|
||||
expect(user.reload.estimated_default_language).to eq("ja")
|
||||
end
|
||||
|
||||
expect(user.reload.estimated_default_language).to eq("ja")
|
||||
end
|
||||
|
||||
it "estimates default language based on ID dump" do
|
||||
perform_enqueued_jobs do
|
||||
new_user = nil
|
||||
|
||||
sidekiq_perform_enqueued_jobs do
|
||||
new_user = user_from_authorization_service(:twitter, nil, "navbar_basic")
|
||||
expect(new_user.estimated_default_language).to eq(nil)
|
||||
end
|
||||
|
||||
expect(new_user.estimated_default_language).to eq(nil)
|
||||
end
|
||||
end
|
||||
|
||||
describe "#preferred_languages_array" do
|
||||
it "returns proper preferred_languages_array" do
|
||||
perform_enqueued_jobs do
|
||||
user = nil
|
||||
|
||||
sidekiq_perform_enqueued_jobs do
|
||||
user = create(:user, email: "ben@hello.jp")
|
||||
expect(user.reload.preferred_languages_array).to eq(%w[en ja])
|
||||
end
|
||||
|
||||
expect(user.reload.preferred_languages_array).to eq(%w[en ja])
|
||||
end
|
||||
|
||||
it "returns a correct array when language settings are in a new format" do
|
||||
|
|
|
|||
24
spec/workers/users/estimate_default_language_worker_spec.rb
Normal file
24
spec/workers/users/estimate_default_language_worker_spec.rb
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe Users::EstimateDefaultLanguageWorker, type: :worker do
|
||||
# Passing in a random user_id since the worker doesn't actually run
|
||||
include_examples "#enqueues_on_correct_queue", "high_priority", [456]
|
||||
|
||||
describe "#perform" do
|
||||
let(:user) { create(:user) }
|
||||
let(:service) { Users::EstimateDefaultLanguage }
|
||||
let(:worker) { subject }
|
||||
|
||||
before { allow(service).to receive(:call) }
|
||||
|
||||
it "calls a service" do
|
||||
worker.perform(user.id)
|
||||
expect(service).to have_received(:call).with(user).once
|
||||
end
|
||||
|
||||
it "doesn't to anything for a non-existent user" do
|
||||
worker.perform(User.maximum(:id).to_i + 1)
|
||||
expect(service).not_to have_received(:call)
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Reference in a new issue