Migrate Users/FollowJob to Sidekiq (#5403)
This commit is contained in:
parent
7c939dc2c5
commit
00a97b2051
6 changed files with 61 additions and 4 deletions
|
|
@ -6,7 +6,7 @@ module Api
|
|||
def create
|
||||
user_ids = params[:users].map { |h| h["id"] }
|
||||
user_ids.each do |user_id|
|
||||
Users::FollowJob.perform_later(current_user.id, user_id, "User")
|
||||
Users::FollowWorker.perform_async(current_user.id, user_id, "User")
|
||||
end
|
||||
render json: { outcome: "followed #{user_ids.count} users" }
|
||||
end
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@ class UsersController < ApplicationController
|
|||
return unless user.looking_for_work?
|
||||
|
||||
hiring_tag = Tag.find_by(name: "hiring")
|
||||
Users::FollowJob.perform_later(user.id, hiring_tag.id, "Tag")
|
||||
Users::FollowWorker.perform_async(user.id, hiring_tag.id, "Tag")
|
||||
end
|
||||
|
||||
def handle_settings_tab
|
||||
|
|
|
|||
17
app/workers/users/follow_worker.rb
Normal file
17
app/workers/users/follow_worker.rb
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
module Users
|
||||
class FollowWorker
|
||||
include Sidekiq::Worker
|
||||
sidekiq_options queue: :high_priority, retry: 10
|
||||
|
||||
def perform(user_id, followable_id, followable_type)
|
||||
return unless %w[Tag Organization User].include?(followable_type)
|
||||
|
||||
user = User.find_by(id: user_id)
|
||||
followable = followable_type.constantize.find_by(id: followable_id)
|
||||
|
||||
return unless user && followable
|
||||
|
||||
user.follow(followable)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -24,7 +24,7 @@ RSpec.describe "Api::V0::FollowsController", type: :request do
|
|||
it "creates follows" do
|
||||
sign_in user
|
||||
expect do
|
||||
perform_enqueued_jobs do
|
||||
sidekiq_perform_enqueued_jobs do
|
||||
post "/api/follows", params: { users: users_hash }
|
||||
end
|
||||
end.to change(Follow, :count).by(users_hash.size)
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ RSpec.describe "Looking For Work", type: :system do
|
|||
it "user selects looking for work and autofollows hiring tag" do
|
||||
visit "/settings"
|
||||
page.check "Looking for work"
|
||||
perform_enqueued_jobs do
|
||||
sidekiq_perform_enqueued_jobs do
|
||||
click_button("SUBMIT")
|
||||
end
|
||||
expect(page).to have_text("Your profile was successfully updated")
|
||||
|
|
|
|||
40
spec/workers/users/follow_worker_spec.rb
Normal file
40
spec/workers/users/follow_worker_spec.rb
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe Users::FollowWorker, type: :worker do
|
||||
describe "#perform" do
|
||||
let(:user) { create(:user) }
|
||||
let(:followable) { create(:user) }
|
||||
let(:invalid_id) { -1 }
|
||||
let(:worker) { subject }
|
||||
|
||||
context "when followable doesn't exist" do
|
||||
it "doesn't follow user" do
|
||||
expect do
|
||||
worker.perform(user.id, invalid_id, followable.class.name)
|
||||
end.not_to change(Follow, :count)
|
||||
end
|
||||
end
|
||||
|
||||
context "when user doesn't exist" do
|
||||
it "doesn't follow user" do
|
||||
expect do
|
||||
worker.perform(invalid_id, followable.id, followable.class.name)
|
||||
end.not_to change(Follow, :count)
|
||||
end
|
||||
end
|
||||
|
||||
context "when user + followable exist" do
|
||||
it "doesn't follow user with unexpected type" do
|
||||
expect do
|
||||
worker.perform(user.id, followable.id, "Article")
|
||||
end.not_to change(Follow, :count)
|
||||
end
|
||||
|
||||
it "follows user" do
|
||||
expect do
|
||||
worker.perform(user.id, followable.id, followable.class.name)
|
||||
end.to change(Follow, :count).by(1)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Reference in a new issue