Migrate Users/FollowJob to Sidekiq (#5403)

This commit is contained in:
Cadu Ribeiro 2020-01-08 17:03:18 -03:00 committed by Molly Struve
parent 7c939dc2c5
commit 00a97b2051
6 changed files with 61 additions and 4 deletions

View file

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

View file

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

View 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

View file

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

View file

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

View 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