# frozen_string_literal: true require "rails_helper" describe QuestionWorker do describe "#perform" do let(:user) { FactoryBot.create(:user) } let(:user_id) { user.id } let(:question) { FactoryBot.create(:question, user:) } let(:question_id) { question.id } before do 5.times do other_user = FactoryBot.create(:user) other_user.follow(user) end end subject { described_class.new.perform(user_id, question_id) } it "places the question in the inbox of the user's followers" do expect { subject } .to( change { Inbox.where(user_id: user.followers.ids, question_id:, new: true).count } .from(0) .to(5) ) end it "respects mute rules" do question.content = "Some spicy question text" question.save MuteRule.create(user_id: user.followers.first.id, muted_phrase: "spicy") expect { subject } .to( change { Inbox.where(user_id: user.followers.ids, question_id:, new: true).count } .from(0) .to(4) ) end it "respects inbox locks" do user.followers.first.update(privacy_lock_inbox: true) expect { subject } .to( change { Inbox.where(user_id: user.followers.ids, question_id:, new: true).count } .from(0) .to(4) ) end it "does not send questions to banned users" do user.followers.first.ban expect { subject } .to( change { Inbox.where(user_id: user.followers.ids, question_id:, new: true).count } .from(0) .to(4) ) end end end