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:
rhymes 2020-04-24 21:15:10 +02:00 committed by GitHub
parent baac7997c3
commit f5a6ff32cc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
39 changed files with 136 additions and 254 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -42,7 +42,7 @@ module Slack
message: message,
)
SlackBotPingWorker.perform_async(
Slack::Messengers::Worker.perform_async(
message: final_message,
channel: type,
username: "#{type}_bot",

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View 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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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