Finalize Slack messengers refactoring (#7484)
* Remove dead code * Rename SlackBotPingWorker to Slack::Messengers::Worker * Remove useless Slack mock * Fix specs
This commit is contained in:
parent
baac7997c3
commit
f5a6ff32cc
39 changed files with 136 additions and 254 deletions
|
|
@ -1,26 +0,0 @@
|
|||
# TODO: remove this when Sidekiq has exhausted RateLimitCheckerWorker jobs
|
||||
class PingAdmins
|
||||
def initialize(user, action = "unknown")
|
||||
@user = user
|
||||
@action = action
|
||||
end
|
||||
|
||||
def self.call(*args)
|
||||
new(*args).call
|
||||
end
|
||||
|
||||
def call
|
||||
return unless user
|
||||
|
||||
SlackBot.ping(
|
||||
"Rate limit exceeded (#{action}). https://dev.to#{user.path}",
|
||||
channel: "abuse-reports",
|
||||
username: "rate_limit",
|
||||
icon_emoji: ":hand:",
|
||||
)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
attr_reader :user, :action
|
||||
end
|
||||
|
|
@ -107,7 +107,7 @@ module ProMemberships
|
|||
end
|
||||
|
||||
def notify_admins(user, message)
|
||||
SlackBotPingWorker.perform_async(
|
||||
Slack::Messengers::Worker.perform_async(
|
||||
message: "ProMemberships::Biller: #{user.username}: #{message}",
|
||||
channel: "pro-memberships",
|
||||
username: "pro-memberships",
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ module ProMemberships
|
|||
membership.increment(:expiration_notifications_count)
|
||||
membership.save!
|
||||
|
||||
SlackBotPingWorker.perform_async(
|
||||
Slack::Messengers::Worker.perform_async(
|
||||
message: "#{membership.user.name}'s pro membership expires on #{expiration_date}",
|
||||
channel: "pro-memberships",
|
||||
username: "pro-memberships",
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ module Slack
|
|||
url: URL.article(article),
|
||||
)
|
||||
|
||||
SlackBotPingWorker.perform_async(
|
||||
Slack::Messengers::Worker.perform_async(
|
||||
message: message,
|
||||
channel: "activity",
|
||||
username: "article_bot",
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ module Slack
|
|||
url: URL.article(article),
|
||||
)
|
||||
|
||||
SlackBotPingWorker.perform_async(
|
||||
Slack::Messengers::Worker.perform_async(
|
||||
message: message,
|
||||
channel: "activity",
|
||||
username: "article_bot",
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ module Slack
|
|||
internal_user_url: internal_user_url,
|
||||
)
|
||||
|
||||
SlackBotPingWorker.perform_async(
|
||||
Slack::Messengers::Worker.perform_async(
|
||||
message: message,
|
||||
channel: "warned-user-comments",
|
||||
username: "sloan_watch_bot",
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ module Slack
|
|||
message: message,
|
||||
)
|
||||
|
||||
SlackBotPingWorker.perform_async(
|
||||
Slack::Messengers::Worker.perform_async(
|
||||
message: final_message,
|
||||
channel: type,
|
||||
username: "#{type}_bot",
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ module Slack
|
|||
message: message,
|
||||
)
|
||||
|
||||
SlackBotPingWorker.perform_async(
|
||||
Slack::Messengers::Worker.perform_async(
|
||||
message: final_message,
|
||||
channel: type,
|
||||
username: "new_note_bot",
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ module Slack
|
|||
url: URL.user(user),
|
||||
)
|
||||
|
||||
SlackBotPingWorker.perform_async(
|
||||
Slack::Messengers::Worker.perform_async(
|
||||
message: message,
|
||||
channel: "potential-spam",
|
||||
username: "spam_account_checker_bot",
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ module Slack
|
|||
url: URL.user(user),
|
||||
)
|
||||
|
||||
SlackBotPingWorker.perform_async(
|
||||
Slack::Messengers::Worker.perform_async(
|
||||
message: message,
|
||||
channel: "abuse-reports",
|
||||
username: "rate_limit",
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ module Slack
|
|||
reactable_url: URL.reaction(reaction),
|
||||
)
|
||||
|
||||
SlackBotPingWorker.perform_async(
|
||||
Slack::Messengers::Worker.perform_async(
|
||||
message: message,
|
||||
channel: "abuse-reports",
|
||||
username: "abuse_bot",
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ module Slack
|
|||
organization: organization.username,
|
||||
)
|
||||
|
||||
SlackBotPingWorker.perform_async(
|
||||
Slack::Messengers::Worker.perform_async(
|
||||
message: message,
|
||||
channel: "incoming-partners",
|
||||
username: "media_sponsor",
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
# TODO: [@thepracticaldev/oss] remove this when Sidekiq has exhausted these workers
|
||||
class RateLimitCheckerWorker
|
||||
include Sidekiq::Worker
|
||||
sidekiq_options queue: :default, retry: 10
|
||||
|
||||
def perform(user_id, action)
|
||||
user = User.find_by(id: user_id)
|
||||
PingAdmins.call(user, action) if user
|
||||
end
|
||||
end
|
||||
30
app/workers/slack/messengers/worker.rb
Normal file
30
app/workers/slack/messengers/worker.rb
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
module Slack
|
||||
module Messengers
|
||||
class Worker
|
||||
include Sidekiq::Worker
|
||||
|
||||
sidekiq_options queue: :default, retry: 10
|
||||
|
||||
def perform(slack_data = {})
|
||||
# Sidekiq turns arguments into Strings so the Ruby keyword argument sorcery doesn't work here
|
||||
# prevent any mismatch between String keys and Symbol keys
|
||||
slack_data.symbolize_keys!
|
||||
|
||||
message = slack_data[:message]
|
||||
channel = slack_data[:channel]
|
||||
username = slack_data[:username]
|
||||
icon_emoji = slack_data[:icon_emoji]
|
||||
|
||||
Slack::Announcer.call(
|
||||
message: message,
|
||||
channel: channel,
|
||||
username: username,
|
||||
icon_emoji: icon_emoji,
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# TODO: [@thepracticaldev/oss] remove this when Sidekiq has exhausted Slack::Messengers::Worker workers
|
||||
SlackBotPingWorker = Slack::Messengers::Worker
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
class SlackBotPingWorker
|
||||
include Sidekiq::Worker
|
||||
|
||||
sidekiq_options queue: :default, retry: 10
|
||||
|
||||
def perform(slack_data = {})
|
||||
# Sidekiq turns arguments into Strings so the Ruby keyword argument sorcery doesn't work here
|
||||
# prevent any mismatch between String keys and Symbol keys
|
||||
slack_data.symbolize_keys!
|
||||
|
||||
message = slack_data[:message]
|
||||
channel = slack_data[:channel]
|
||||
username = slack_data[:username]
|
||||
icon_emoji = slack_data[:icon_emoji]
|
||||
|
||||
# Double check for any nil values
|
||||
return unless message && channel && username && icon_emoji
|
||||
|
||||
Slack::Announcer.call(
|
||||
message: message,
|
||||
channel: channel,
|
||||
username: username,
|
||||
icon_emoji: icon_emoji,
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
@ -28,16 +28,6 @@ def create_stubbed_notifier
|
|||
end
|
||||
end
|
||||
|
||||
# TODO: [@thepracticaldev/oss] remove this when Sidekiq has exhausted RateLimitCheckerWorker
|
||||
::SlackBot = case Rails.env # rubocop:disable Naming/ConstantName
|
||||
when "production"
|
||||
create_normal_notifier
|
||||
when "development"
|
||||
create_test_channel_notifier
|
||||
when "test"
|
||||
create_stubbed_notifier
|
||||
end
|
||||
|
||||
def init_slack_client
|
||||
default_options = if Rails.env.production?
|
||||
{
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ RSpec.describe RateLimitChecker, type: :labor do
|
|||
it "sends a slack message if a user leaves too any messages" do
|
||||
create_list(:comment, 2, user_id: user.id, commentable: article)
|
||||
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
rate_limit_checker.limit_by_action("comment_creation")
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -802,32 +802,32 @@ RSpec.describe Article, type: :model do
|
|||
describe "slack messages" do
|
||||
before do
|
||||
# making sure there are no other enqueued jobs from other tests
|
||||
sidekiq_perform_enqueued_jobs(only: SlackBotPingWorker)
|
||||
sidekiq_perform_enqueued_jobs(only: Slack::Messengers::Worker)
|
||||
end
|
||||
|
||||
it "queues a slack message to be sent" do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
article.update(published: true, published_at: Time.current)
|
||||
end
|
||||
end
|
||||
|
||||
it "does not queue a message for an article published more than 30 seconds ago" do
|
||||
Timecop.freeze(Time.current) do
|
||||
sidekiq_assert_no_enqueued_jobs(only: SlackBotPingWorker) do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Slack::Messengers::Worker) do
|
||||
article.update(published: true, published_at: 31.seconds.ago)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it "does not queue a message for a draft article" do
|
||||
sidekiq_assert_no_enqueued_jobs(only: SlackBotPingWorker) do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Slack::Messengers::Worker) do
|
||||
article.update(body_markdown: "foobar", published: false)
|
||||
end
|
||||
end
|
||||
|
||||
it "queues a message for a draft article that gets published" do
|
||||
Timecop.freeze(Time.current) do
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
article.update_columns(published: false)
|
||||
article.update(published: true, published_at: Time.current)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -324,19 +324,19 @@ RSpec.describe Comment, type: :model do
|
|||
|
||||
before do
|
||||
# making sure there are no other enqueued jobs from other tests
|
||||
sidekiq_perform_enqueued_jobs(only: SlackBotPingWorker)
|
||||
sidekiq_perform_enqueued_jobs(only: Slack::Messengers::Worker)
|
||||
end
|
||||
|
||||
it "queues a slack message when a warned user leaves a comment" do
|
||||
user.add_role(:warned)
|
||||
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
create(:comment, user: user, commentable: article)
|
||||
end
|
||||
end
|
||||
|
||||
it "does not send notification if a regular user leaves a comment" do
|
||||
sidekiq_assert_no_enqueued_jobs(only: SlackBotPingWorker) do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Slack::Messengers::Worker) do
|
||||
create(:comment, commentable: article, user: user)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -187,23 +187,23 @@ RSpec.describe Reaction, type: :model do
|
|||
|
||||
before do
|
||||
# making sure there are no other enqueued jobs from other tests
|
||||
sidekiq_perform_enqueued_jobs(only: SlackBotPingWorker)
|
||||
sidekiq_perform_enqueued_jobs(only: Slack::Messengers::Worker)
|
||||
end
|
||||
|
||||
it "queues a slack message to be sent for a vomit reaction" do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
create(:reaction, reactable: article, user: user, category: "vomit")
|
||||
end
|
||||
end
|
||||
|
||||
it "does not queue a message for a like reaction" do
|
||||
sidekiq_assert_no_enqueued_jobs(only: SlackBotPingWorker) do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Slack::Messengers::Worker) do
|
||||
create(:reaction, reactable: article, user: user, category: "like")
|
||||
end
|
||||
end
|
||||
|
||||
it "does not queue a message for a thumbsdown reaction" do
|
||||
sidekiq_assert_no_enqueued_jobs(only: SlackBotPingWorker) do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Slack::Messengers::Worker) do
|
||||
create(:reaction, reactable: article, user: user, category: "thumbsdown")
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -2,13 +2,13 @@ require "rails_helper"
|
|||
|
||||
RSpec.describe "feedback_messages", type: :request do
|
||||
describe "POST /feedback_messages" do
|
||||
# rubocop:disable RSpec/AnyInstance
|
||||
def verify_captcha_and_slack_ping
|
||||
allow_any_instance_of(FeedbackMessagesController).
|
||||
to receive(:recaptcha_verified?).and_return(true)
|
||||
allow(SlackClient).to receive(:ping).and_return(true)
|
||||
def mock_recaptcha_verification
|
||||
# rubocop:disable RSpec/AnyInstance
|
||||
allow_any_instance_of(FeedbackMessagesController).to(
|
||||
receive(:recaptcha_verified?).and_return(true),
|
||||
)
|
||||
# rubocop:enable RSpec/AnyInstance
|
||||
end
|
||||
# rubocop:enable RSpec/AnyInstance
|
||||
|
||||
valid_abuse_report_params = {
|
||||
feedback_message: {
|
||||
|
|
@ -21,7 +21,7 @@ RSpec.describe "feedback_messages", type: :request do
|
|||
|
||||
context "with valid params" do
|
||||
before do
|
||||
verify_captcha_and_slack_ping
|
||||
mock_recaptcha_verification
|
||||
end
|
||||
|
||||
it "creates a feedback message" do
|
||||
|
|
@ -36,7 +36,7 @@ RSpec.describe "feedback_messages", type: :request do
|
|||
end
|
||||
|
||||
it "queues a slack message to be sent" do
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
post feedback_messages_path, params: valid_abuse_report_params
|
||||
end
|
||||
end
|
||||
|
|
@ -49,7 +49,7 @@ RSpec.describe "feedback_messages", type: :request do
|
|||
end
|
||||
|
||||
it "queues a slack message to be sent" do
|
||||
sidekiq_assert_no_enqueued_jobs(only: SlackBotPingWorker) do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Slack::Messengers::Worker) do
|
||||
post feedback_messages_path, params: valid_abuse_report_params
|
||||
end
|
||||
end
|
||||
|
|
@ -59,8 +59,9 @@ RSpec.describe "feedback_messages", type: :request do
|
|||
let(:user) { create(:user) }
|
||||
|
||||
before do
|
||||
verify_captcha_and_slack_ping
|
||||
sign_in(user)
|
||||
mock_recaptcha_verification
|
||||
|
||||
sign_in user
|
||||
end
|
||||
|
||||
it "creates a feedback message reported by the user" do
|
||||
|
|
@ -70,7 +71,7 @@ RSpec.describe "feedback_messages", type: :request do
|
|||
end
|
||||
|
||||
it "queues a slack message to be sent" do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
post feedback_messages_path, params: valid_abuse_report_params
|
||||
end
|
||||
end
|
||||
|
|
@ -78,7 +79,7 @@ RSpec.describe "feedback_messages", type: :request do
|
|||
|
||||
context "when an anonymous user submits a report" do
|
||||
before do
|
||||
verify_captcha_and_slack_ping
|
||||
mock_recaptcha_verification
|
||||
end
|
||||
|
||||
it "does not add any user as the reporter" do
|
||||
|
|
@ -88,7 +89,7 @@ RSpec.describe "feedback_messages", type: :request do
|
|||
end
|
||||
|
||||
it "queues a slack message to be sent" do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
post feedback_messages_path, params: valid_abuse_report_params
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ RSpec.describe "/internal/reports", type: :request do
|
|||
end
|
||||
|
||||
it "queues a slack message to be sent" do
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
post create_note_internal_reports_path, params: note_params
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ RSpec.describe "Partnerships", type: :request do
|
|||
end
|
||||
|
||||
it "queues a slack message to be sent" do
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
post partnerships_path, params: params
|
||||
end
|
||||
end
|
||||
|
|
@ -211,7 +211,7 @@ RSpec.describe "Partnerships", type: :request do
|
|||
end
|
||||
|
||||
it "queues a slack message to be sent" do
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
post partnerships_path, params: params
|
||||
end
|
||||
end
|
||||
|
|
@ -252,7 +252,7 @@ RSpec.describe "Partnerships", type: :request do
|
|||
end
|
||||
|
||||
it "queues a slack message to be sent" do
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
post partnerships_path, params: params
|
||||
end
|
||||
end
|
||||
|
|
@ -295,7 +295,7 @@ RSpec.describe "Partnerships", type: :request do
|
|||
end
|
||||
|
||||
it "queues a slack message to be sent" do
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
post partnerships_path, params: params
|
||||
end
|
||||
end
|
||||
|
|
@ -337,7 +337,7 @@ RSpec.describe "Partnerships", type: :request do
|
|||
end
|
||||
|
||||
it "queues a slack message to be sent" do
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
post partnerships_path, params: params
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ RSpec.describe Authentication::Authenticator, type: :service do
|
|||
it "queues a slack message to be sent for a user whose identity is brand new" do
|
||||
auth_payload.extra.raw_info.created_at = 1.minute.ago.rfc3339
|
||||
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
described_class.call(auth_payload)
|
||||
end
|
||||
end
|
||||
|
|
@ -278,7 +278,7 @@ RSpec.describe Authentication::Authenticator, type: :service do
|
|||
it "queues a slack message to be sent for a user whose identity is brand new" do
|
||||
auth_payload.extra.raw_info.created_at = 1.minute.ago.rfc3339
|
||||
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
described_class.call(auth_payload)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,50 +0,0 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe PingAdmins, type: :service do
|
||||
let(:user) { build_stubbed(:user) }
|
||||
|
||||
describe "#call" do
|
||||
subject(:ping_admin_call) { described_class.call(user) }
|
||||
|
||||
before { allow(SlackBot).to receive(:ping) }
|
||||
|
||||
context "when user isn't nil" do
|
||||
let(:action) { "unknown" }
|
||||
let(:message_expected) { "Rate limit exceeded (#{action}). https://dev.to#{user.path}" }
|
||||
|
||||
it "calls SlackBot.ping" do
|
||||
ping_admin_call
|
||||
|
||||
expect(SlackBot).to have_received(:ping).with(message_expected,
|
||||
channel: "abuse-reports",
|
||||
username: "rate_limit",
|
||||
icon_emoji: ":hand:")
|
||||
end
|
||||
end
|
||||
|
||||
context "when user is nil" do
|
||||
let(:user) { nil }
|
||||
|
||||
it "doesnt call SlackBot.ping" do
|
||||
expect(ping_admin_call).to be_nil
|
||||
expect(SlackBot).not_to have_received(:ping)
|
||||
end
|
||||
end
|
||||
|
||||
context "when receive action" do
|
||||
subject(:ping_admin_call) { described_class.call(user, action) }
|
||||
|
||||
let(:action) { "any-action" }
|
||||
let(:message_expected) { "Rate limit exceeded (#{action}). https://dev.to#{user.path}" }
|
||||
|
||||
it "calls SlackBot.ping" do
|
||||
ping_admin_call
|
||||
|
||||
expect(SlackBot).to have_received(:ping).with(message_expected,
|
||||
channel: "abuse-reports",
|
||||
username: "rate_limit",
|
||||
icon_emoji: ":hand:")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -96,7 +96,7 @@ RSpec.describe ProMemberships::Biller, type: :service do
|
|||
it "notifies the admins about the error" do
|
||||
Timecop.travel(format_date(pro_membership.expires_at)) do
|
||||
allow(Credits::Buyer).to receive(:call).and_raise(StandardError)
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
described_class.call
|
||||
end
|
||||
end
|
||||
|
|
@ -129,7 +129,7 @@ RSpec.describe ProMemberships::Biller, type: :service do
|
|||
|
||||
it "notifies the admins about the expiration" do
|
||||
Timecop.travel(format_date(pro_membership.expires_at)) do
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
described_class.call
|
||||
end
|
||||
end
|
||||
|
|
@ -239,7 +239,7 @@ RSpec.describe ProMemberships::Biller, type: :service do
|
|||
it "notifies the admins about the problem" do
|
||||
allow(user).to receive(:stripe_id_code).and_return(nil)
|
||||
Timecop.travel(format_date(pro_membership.expires_at)) do
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
described_class.call
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ RSpec.describe ProMemberships::ExpirationNotifier, type: :service do
|
|||
|
||||
it "enqueus a slack bot ping job" do
|
||||
Timecop.travel(pro_membership.expires_at - 1.week) do
|
||||
sidekiq_assert_enqueued_with(job: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_with(job: Slack::Messengers::Worker) do
|
||||
described_class.call(1.week.from_now)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ RSpec.describe RssReader, type: :service, vcr: VCR_OPTIONS[:rss_feeds] do
|
|||
it "queues as many slack messages as there are articles" do
|
||||
expect do
|
||||
rss_reader.get_all_articles
|
||||
end.to change(SlackBotPingWorker.jobs, :count).by(12)
|
||||
end.to change(Slack::Messengers::Worker.jobs, :count).by(12)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -157,7 +157,7 @@ RSpec.describe RssReader, type: :service, vcr: VCR_OPTIONS[:rss_feeds] do
|
|||
it "queues as many slack messages as there are user articles" do
|
||||
expect do
|
||||
rss_reader.fetch_user(User.find_by(feed_url: link))
|
||||
end.to change(SlackBotPingWorker.jobs, :count).by(1)
|
||||
end.to change(Slack::Messengers::Worker.jobs, :count).by(1)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ RSpec.describe Slack::Messengers::ArticleFetchedFeed, type: :service do
|
|||
let(:default_params) { { article: article } }
|
||||
|
||||
it "does not message slack for a new article not coming from the feed" do
|
||||
sidekiq_assert_no_enqueued_jobs(only: SlackBotPingWorker) do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Slack::Messengers::Worker) do
|
||||
article.published_from_feed = false
|
||||
|
||||
described_class.call(article: article)
|
||||
|
|
@ -19,11 +19,11 @@ RSpec.describe Slack::Messengers::ArticleFetchedFeed, type: :service do
|
|||
end
|
||||
|
||||
it "contains the correct info", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
message = job["args"].first["message"]
|
||||
|
||||
expect(message).to include(article.title)
|
||||
|
|
@ -31,11 +31,11 @@ RSpec.describe Slack::Messengers::ArticleFetchedFeed, type: :service do
|
|||
end
|
||||
|
||||
it "messages the proper channel with the proper username and emoji", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
job_args = job["args"].first
|
||||
|
||||
expect(job_args["channel"]).to eq("activity")
|
||||
|
|
|
|||
|
|
@ -12,14 +12,14 @@ RSpec.describe Slack::Messengers::ArticlePublished, type: :service do
|
|||
let(:default_params) { { article: article } }
|
||||
|
||||
it "does not message slack for a draft article" do
|
||||
sidekiq_assert_no_enqueued_jobs(only: SlackBotPingWorker) do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Slack::Messengers::Worker) do
|
||||
article = build(:article, published: false)
|
||||
described_class.call(article: article)
|
||||
end
|
||||
end
|
||||
|
||||
it "does not message slack for an article that was published long ago" do
|
||||
sidekiq_assert_no_enqueued_jobs(only: SlackBotPingWorker) do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Slack::Messengers::Worker) do
|
||||
article = build(:article).tap do |art|
|
||||
art.published = true
|
||||
art.published_at = 1.minute.ago
|
||||
|
|
@ -29,11 +29,11 @@ RSpec.describe Slack::Messengers::ArticlePublished, type: :service do
|
|||
end
|
||||
|
||||
it "contains the correct info", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
message = job["args"].first["message"]
|
||||
|
||||
expect(message).to include(article.title)
|
||||
|
|
@ -41,11 +41,11 @@ RSpec.describe Slack::Messengers::ArticlePublished, type: :service do
|
|||
end
|
||||
|
||||
it "messages the proper channel with the proper username and emoji", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
job_args = job["args"].first
|
||||
|
||||
expect(job_args["channel"]).to eq("activity")
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ RSpec.describe Slack::Messengers::CommentUserWarned, type: :service do
|
|||
let(:default_params) { { comment: comment } }
|
||||
|
||||
it "does not message slack for a comment with a regular user" do
|
||||
sidekiq_assert_no_enqueued_jobs(only: SlackBotPingWorker) do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Slack::Messengers::Worker) do
|
||||
described_class.call(comment: build(:comment, user: build(:user)))
|
||||
end
|
||||
end
|
||||
|
|
@ -18,11 +18,11 @@ RSpec.describe Slack::Messengers::CommentUserWarned, type: :service do
|
|||
end
|
||||
|
||||
it "contains the correct info", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
message = job["args"].first["message"]
|
||||
|
||||
internal_user_url = URL.url(
|
||||
|
|
@ -36,11 +36,11 @@ RSpec.describe Slack::Messengers::CommentUserWarned, type: :service do
|
|||
end
|
||||
|
||||
it "messages the proper channel with the proper username and emoji", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
job_args = job["args"].first
|
||||
|
||||
expect(job_args["channel"]).to eq("warned-user-comments")
|
||||
|
|
|
|||
|
|
@ -12,18 +12,18 @@ RSpec.describe Slack::Messengers::Feedback, type: :service do
|
|||
end
|
||||
|
||||
def get_argument_from_last_job(argument_name)
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
job["args"].first[argument_name]
|
||||
end
|
||||
|
||||
it "supports an anonymous report" do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
end
|
||||
|
||||
it "contains user's details", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params.merge(user: user))
|
||||
end
|
||||
|
||||
|
|
@ -35,7 +35,7 @@ RSpec.describe Slack::Messengers::Feedback, type: :service do
|
|||
end
|
||||
|
||||
it "contains report information", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params.merge(user: user))
|
||||
end
|
||||
|
||||
|
|
@ -52,7 +52,7 @@ RSpec.describe Slack::Messengers::Feedback, type: :service do
|
|||
end
|
||||
|
||||
it "messages the proper channel with the proper username" do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
|
|
@ -64,7 +64,7 @@ RSpec.describe Slack::Messengers::Feedback, type: :service do
|
|||
end
|
||||
|
||||
it "uses the cry emoji for abuse reports" do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params.merge(type: "abuse-reports"))
|
||||
end
|
||||
|
||||
|
|
@ -73,7 +73,7 @@ RSpec.describe Slack::Messengers::Feedback, type: :service do
|
|||
end
|
||||
|
||||
it "uses the robot face emoji for other reports" do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params.merge(type: "other"))
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -12,11 +12,11 @@ RSpec.describe Slack::Messengers::Note, type: :service do
|
|||
end
|
||||
|
||||
it "contains the correct info", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
message = job["args"].first["message"]
|
||||
|
||||
expect(message).to include(default_params[:author_name])
|
||||
|
|
@ -31,11 +31,11 @@ RSpec.describe Slack::Messengers::Note, type: :service do
|
|||
end
|
||||
|
||||
it "messages the proper channel with the proper username and emoji", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
job_args = job["args"].first
|
||||
|
||||
expect(job_args["channel"]).to eq(default_params[:type])
|
||||
|
|
|
|||
|
|
@ -6,22 +6,22 @@ RSpec.describe Slack::Messengers::PotentialSpammer, type: :service do
|
|||
let(:default_params) { { user: user } }
|
||||
|
||||
it "contains the correct info", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
message = job["args"].first["message"]
|
||||
|
||||
expect(message).to include(URL.user(user))
|
||||
end
|
||||
|
||||
it "messages the proper channel with the proper username and emoji", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
job_args = job["args"].first
|
||||
|
||||
expect(job_args["channel"]).to eq("potential-spam")
|
||||
|
|
|
|||
|
|
@ -11,11 +11,11 @@ RSpec.describe Slack::Messengers::RateLimit, type: :service do
|
|||
end
|
||||
|
||||
it "contains the correct info", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
message = job["args"].first["message"]
|
||||
|
||||
expect(message).to include(default_params[:action])
|
||||
|
|
@ -23,11 +23,11 @@ RSpec.describe Slack::Messengers::RateLimit, type: :service do
|
|||
end
|
||||
|
||||
it "messages the proper channel with the proper username and emoji", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
job_args = job["args"].first
|
||||
|
||||
expect(job_args["channel"]).to eq("abuse-reports")
|
||||
|
|
|
|||
|
|
@ -7,18 +7,18 @@ RSpec.describe Slack::Messengers::ReactionVomit, type: :service do
|
|||
let(:default_params) { { reaction: reaction } }
|
||||
|
||||
it "does not message slack for a like reaction" do
|
||||
sidekiq_assert_no_enqueued_jobs(only: SlackBotPingWorker) do
|
||||
sidekiq_assert_no_enqueued_jobs(only: Slack::Messengers::Worker) do
|
||||
reaction = build(:reaction, category: :like)
|
||||
described_class.call(reaction: reaction)
|
||||
end
|
||||
end
|
||||
|
||||
it "contains the correct info", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
message = job["args"].first["message"]
|
||||
|
||||
expect(message).to include(user.name)
|
||||
|
|
@ -28,11 +28,11 @@ RSpec.describe Slack::Messengers::ReactionVomit, type: :service do
|
|||
end
|
||||
|
||||
it "messages the proper channel with the proper username and emoji", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
job_args = job["args"].first
|
||||
|
||||
expect(job_args["channel"]).to eq("abuse-reports")
|
||||
|
|
|
|||
|
|
@ -14,12 +14,12 @@ RSpec.describe Slack::Messengers::Sponsorship, type: :service do
|
|||
end
|
||||
|
||||
def get_argument_from_last_job(argument_name)
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
job["args"].first[argument_name]
|
||||
end
|
||||
|
||||
it "contains the correct info for a regular sponsorship", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
|
|
@ -31,7 +31,7 @@ RSpec.describe Slack::Messengers::Sponsorship, type: :service do
|
|||
end
|
||||
|
||||
it "contains the correct info for a tag sponsorship", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params.merge(level: "tag", tag: tag))
|
||||
end
|
||||
|
||||
|
|
@ -44,11 +44,11 @@ RSpec.describe Slack::Messengers::Sponsorship, type: :service do
|
|||
end
|
||||
|
||||
it "messages the proper channel with the proper username and emoji", :aggregate_failures do
|
||||
sidekiq_assert_enqueued_jobs(1, only: SlackBotPingWorker) do
|
||||
sidekiq_assert_enqueued_jobs(1, only: Slack::Messengers::Worker) do
|
||||
described_class.call(default_params)
|
||||
end
|
||||
|
||||
job = sidekiq_enqueued_jobs(worker: SlackBotPingWorker).last
|
||||
job = sidekiq_enqueued_jobs(worker: Slack::Messengers::Worker).last
|
||||
job_args = job["args"].first
|
||||
|
||||
expect(job_args["channel"]).to eq("incoming-partners")
|
||||
|
|
|
|||
|
|
@ -1,31 +0,0 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe RateLimitCheckerWorker, type: :worker do
|
||||
describe "#perform_async" do
|
||||
it "enqueues a job correctly" do
|
||||
sidekiq_assert_enqueued_with(job: described_class, args: [1, "test"], queue: "default") do
|
||||
described_class.perform_async(1, "test")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe "#perform" do
|
||||
let(:user) { create(:user) }
|
||||
let(:service) { PingAdmins }
|
||||
let(:worker) { subject }
|
||||
|
||||
before { allow(service).to receive(:call) }
|
||||
|
||||
it "calls a service" do
|
||||
worker.perform(user.id, "test")
|
||||
|
||||
expect(service).to have_received(:call).with(user, "test").once
|
||||
end
|
||||
|
||||
it "does nothing for non-existent user" do
|
||||
worker.perform(nil, "test")
|
||||
|
||||
expect(service).not_to have_received(:call)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe SlackBotPingWorker, type: :worker do
|
||||
RSpec.describe Slack::Messengers::Worker, type: :worker do
|
||||
let(:worker) { subject }
|
||||
let(:params) do
|
||||
{
|
||||
|
|
@ -16,15 +16,17 @@ RSpec.describe SlackBotPingWorker, type: :worker do
|
|||
]
|
||||
|
||||
describe "#perform_now" do
|
||||
before { allow(Slack::Announcer).to receive(:call) }
|
||||
it "sends a message to Slack" do
|
||||
allow(Slack::Announcer).to receive(:call)
|
||||
|
||||
it "calls the SlackBot" do
|
||||
worker.perform(params)
|
||||
|
||||
expect(Slack::Announcer).to have_received(:call).with(params)
|
||||
end
|
||||
|
||||
it "does nothing if there is missing data" do
|
||||
allow(SlackClient).to receive(:ping)
|
||||
|
||||
worker.perform(
|
||||
message: nil,
|
||||
channel: nil,
|
||||
|
|
@ -32,10 +34,12 @@ RSpec.describe SlackBotPingWorker, type: :worker do
|
|||
icon_emoji: nil,
|
||||
)
|
||||
|
||||
expect(Slack::Announcer).not_to have_received(:call)
|
||||
expect(SlackClient).not_to have_received(:ping)
|
||||
end
|
||||
|
||||
it "works with keys as Strings" do
|
||||
allow(Slack::Announcer).to receive(:call)
|
||||
|
||||
worker.perform(params.stringify_keys)
|
||||
|
||||
expect(Slack::Announcer).to have_received(:call).with(params)
|
||||
Loading…
Add table
Reference in a new issue