create Users::EstimateDefaultLanguageWorker for Sidekiq (#5697) [deploy]

This commit is contained in:
Maykon Menezes 2020-02-07 15:49:02 -03:00 committed by GitHub
parent 7115d7e3ed
commit 58b96f104e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 56 additions and 9 deletions

View file

@ -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

View 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

View file

@ -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

View 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