diff --git a/app/services/ping_admins.rb b/app/services/ping_admins.rb deleted file mode 100644 index 741652189..000000000 --- a/app/services/ping_admins.rb +++ /dev/null @@ -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 diff --git a/app/services/pro_memberships/biller.rb b/app/services/pro_memberships/biller.rb index 6c71fde96..2399cb30e 100644 --- a/app/services/pro_memberships/biller.rb +++ b/app/services/pro_memberships/biller.rb @@ -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", diff --git a/app/services/pro_memberships/expiration_notifier.rb b/app/services/pro_memberships/expiration_notifier.rb index d29c1a18b..8b4853ed6 100644 --- a/app/services/pro_memberships/expiration_notifier.rb +++ b/app/services/pro_memberships/expiration_notifier.rb @@ -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", diff --git a/app/services/slack/messengers/article_fetched_feed.rb b/app/services/slack/messengers/article_fetched_feed.rb index a2dc85dab..ea631c273 100644 --- a/app/services/slack/messengers/article_fetched_feed.rb +++ b/app/services/slack/messengers/article_fetched_feed.rb @@ -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", diff --git a/app/services/slack/messengers/article_published.rb b/app/services/slack/messengers/article_published.rb index dc97631b2..8ddc809e3 100644 --- a/app/services/slack/messengers/article_published.rb +++ b/app/services/slack/messengers/article_published.rb @@ -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", diff --git a/app/services/slack/messengers/comment_user_warned.rb b/app/services/slack/messengers/comment_user_warned.rb index 66b4faf00..2ec1553c4 100644 --- a/app/services/slack/messengers/comment_user_warned.rb +++ b/app/services/slack/messengers/comment_user_warned.rb @@ -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", diff --git a/app/services/slack/messengers/feedback.rb b/app/services/slack/messengers/feedback.rb index 7a48ca560..9585b6d88 100644 --- a/app/services/slack/messengers/feedback.rb +++ b/app/services/slack/messengers/feedback.rb @@ -42,7 +42,7 @@ module Slack message: message, ) - SlackBotPingWorker.perform_async( + Slack::Messengers::Worker.perform_async( message: final_message, channel: type, username: "#{type}_bot", diff --git a/app/services/slack/messengers/note.rb b/app/services/slack/messengers/note.rb index 1df8a69ed..eda26b0b9 100644 --- a/app/services/slack/messengers/note.rb +++ b/app/services/slack/messengers/note.rb @@ -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", diff --git a/app/services/slack/messengers/potential_spammer.rb b/app/services/slack/messengers/potential_spammer.rb index 50405b38f..e0c3a4c0c 100644 --- a/app/services/slack/messengers/potential_spammer.rb +++ b/app/services/slack/messengers/potential_spammer.rb @@ -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", diff --git a/app/services/slack/messengers/rate_limit.rb b/app/services/slack/messengers/rate_limit.rb index 410b7333d..78a2c1b2b 100644 --- a/app/services/slack/messengers/rate_limit.rb +++ b/app/services/slack/messengers/rate_limit.rb @@ -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", diff --git a/app/services/slack/messengers/reaction_vomit.rb b/app/services/slack/messengers/reaction_vomit.rb index e77e68f4f..b933e7c68 100644 --- a/app/services/slack/messengers/reaction_vomit.rb +++ b/app/services/slack/messengers/reaction_vomit.rb @@ -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", diff --git a/app/services/slack/messengers/sponsorship.rb b/app/services/slack/messengers/sponsorship.rb index 00d72b360..b850462ef 100644 --- a/app/services/slack/messengers/sponsorship.rb +++ b/app/services/slack/messengers/sponsorship.rb @@ -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", diff --git a/app/workers/rate_limit_checker_worker.rb b/app/workers/rate_limit_checker_worker.rb deleted file mode 100644 index 45b9b4fe2..000000000 --- a/app/workers/rate_limit_checker_worker.rb +++ /dev/null @@ -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 diff --git a/app/workers/slack/messengers/worker.rb b/app/workers/slack/messengers/worker.rb new file mode 100644 index 000000000..a400b1df4 --- /dev/null +++ b/app/workers/slack/messengers/worker.rb @@ -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 diff --git a/app/workers/slack_bot_ping_worker.rb b/app/workers/slack_bot_ping_worker.rb deleted file mode 100644 index 021cd1ac2..000000000 --- a/app/workers/slack_bot_ping_worker.rb +++ /dev/null @@ -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 diff --git a/config/initializers/slack_notifier.rb b/config/initializers/slack_notifier.rb index 92c585352..44983dece 100644 --- a/config/initializers/slack_notifier.rb +++ b/config/initializers/slack_notifier.rb @@ -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? { diff --git a/spec/labor/rate_limit_checker_spec.rb b/spec/labor/rate_limit_checker_spec.rb index fe2888e29..3c9a80397 100644 --- a/spec/labor/rate_limit_checker_spec.rb +++ b/spec/labor/rate_limit_checker_spec.rb @@ -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 diff --git a/spec/models/article_spec.rb b/spec/models/article_spec.rb index 349779246..22e86274e 100644 --- a/spec/models/article_spec.rb +++ b/spec/models/article_spec.rb @@ -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 diff --git a/spec/models/comment_spec.rb b/spec/models/comment_spec.rb index 8501c57f3..05ec15b91 100644 --- a/spec/models/comment_spec.rb +++ b/spec/models/comment_spec.rb @@ -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 diff --git a/spec/models/reaction_spec.rb b/spec/models/reaction_spec.rb index a25709391..8adc06b40 100644 --- a/spec/models/reaction_spec.rb +++ b/spec/models/reaction_spec.rb @@ -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 diff --git a/spec/requests/feedback_messages_spec.rb b/spec/requests/feedback_messages_spec.rb index 525895c15..f5cbbce09 100644 --- a/spec/requests/feedback_messages_spec.rb +++ b/spec/requests/feedback_messages_spec.rb @@ -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 diff --git a/spec/requests/internal/feedback_messages_spec.rb b/spec/requests/internal/feedback_messages_spec.rb index 8a4919f3b..71a687179 100644 --- a/spec/requests/internal/feedback_messages_spec.rb +++ b/spec/requests/internal/feedback_messages_spec.rb @@ -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 diff --git a/spec/requests/partnerships_spec.rb b/spec/requests/partnerships_spec.rb index e0f25019e..01af822c8 100644 --- a/spec/requests/partnerships_spec.rb +++ b/spec/requests/partnerships_spec.rb @@ -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 diff --git a/spec/services/authentication/authenticator_spec.rb b/spec/services/authentication/authenticator_spec.rb index 0a38b1c11..31dbd4104 100644 --- a/spec/services/authentication/authenticator_spec.rb +++ b/spec/services/authentication/authenticator_spec.rb @@ -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 diff --git a/spec/services/ping_admins_spec.rb b/spec/services/ping_admins_spec.rb deleted file mode 100644 index c65d9a885..000000000 --- a/spec/services/ping_admins_spec.rb +++ /dev/null @@ -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 diff --git a/spec/services/pro_memberships/biller_spec.rb b/spec/services/pro_memberships/biller_spec.rb index 4312558b6..1fd6c1701 100644 --- a/spec/services/pro_memberships/biller_spec.rb +++ b/spec/services/pro_memberships/biller_spec.rb @@ -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 diff --git a/spec/services/pro_memberships/expiration_notifier_spec.rb b/spec/services/pro_memberships/expiration_notifier_spec.rb index 7019f460c..fa1a36b5a 100644 --- a/spec/services/pro_memberships/expiration_notifier_spec.rb +++ b/spec/services/pro_memberships/expiration_notifier_spec.rb @@ -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 diff --git a/spec/services/rss_reader_spec.rb b/spec/services/rss_reader_spec.rb index 86d403bdc..bdfc335a0 100644 --- a/spec/services/rss_reader_spec.rb +++ b/spec/services/rss_reader_spec.rb @@ -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 diff --git a/spec/services/slack/messengers/article_fetched_feed_spec.rb b/spec/services/slack/messengers/article_fetched_feed_spec.rb index 758b5365d..1d5947ca7 100644 --- a/spec/services/slack/messengers/article_fetched_feed_spec.rb +++ b/spec/services/slack/messengers/article_fetched_feed_spec.rb @@ -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") diff --git a/spec/services/slack/messengers/article_published_spec.rb b/spec/services/slack/messengers/article_published_spec.rb index 6c74f5c74..860f9d994 100644 --- a/spec/services/slack/messengers/article_published_spec.rb +++ b/spec/services/slack/messengers/article_published_spec.rb @@ -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") diff --git a/spec/services/slack/messengers/comment_user_warned_spec.rb b/spec/services/slack/messengers/comment_user_warned_spec.rb index 94e120fff..89781096e 100644 --- a/spec/services/slack/messengers/comment_user_warned_spec.rb +++ b/spec/services/slack/messengers/comment_user_warned_spec.rb @@ -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") diff --git a/spec/services/slack/messengers/feedback_spec.rb b/spec/services/slack/messengers/feedback_spec.rb index 377f1b3e5..583714cae 100644 --- a/spec/services/slack/messengers/feedback_spec.rb +++ b/spec/services/slack/messengers/feedback_spec.rb @@ -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 diff --git a/spec/services/slack/messengers/note_spec.rb b/spec/services/slack/messengers/note_spec.rb index 31bf5994b..e734c3fd8 100644 --- a/spec/services/slack/messengers/note_spec.rb +++ b/spec/services/slack/messengers/note_spec.rb @@ -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]) diff --git a/spec/services/slack/messengers/potential_spammer_spec.rb b/spec/services/slack/messengers/potential_spammer_spec.rb index c70f4f677..3eba28490 100644 --- a/spec/services/slack/messengers/potential_spammer_spec.rb +++ b/spec/services/slack/messengers/potential_spammer_spec.rb @@ -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") diff --git a/spec/services/slack/messengers/rate_limit_spec.rb b/spec/services/slack/messengers/rate_limit_spec.rb index 7496220c6..45ddf3729 100644 --- a/spec/services/slack/messengers/rate_limit_spec.rb +++ b/spec/services/slack/messengers/rate_limit_spec.rb @@ -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") diff --git a/spec/services/slack/messengers/reaction_vomit_spec.rb b/spec/services/slack/messengers/reaction_vomit_spec.rb index 63f8a932c..e5e858b66 100644 --- a/spec/services/slack/messengers/reaction_vomit_spec.rb +++ b/spec/services/slack/messengers/reaction_vomit_spec.rb @@ -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") diff --git a/spec/services/slack/messengers/sponsorship_spec.rb b/spec/services/slack/messengers/sponsorship_spec.rb index 46068ccda..e560e443d 100644 --- a/spec/services/slack/messengers/sponsorship_spec.rb +++ b/spec/services/slack/messengers/sponsorship_spec.rb @@ -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") diff --git a/spec/workers/rate_limit_checker_worker_spec.rb b/spec/workers/rate_limit_checker_worker_spec.rb deleted file mode 100644 index f2b76b2d7..000000000 --- a/spec/workers/rate_limit_checker_worker_spec.rb +++ /dev/null @@ -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 diff --git a/spec/workers/slack_bot_ping_worker_spec.rb b/spec/workers/slack/messengers/worker_spec.rb similarity index 74% rename from spec/workers/slack_bot_ping_worker_spec.rb rename to spec/workers/slack/messengers/worker_spec.rb index 21f9857c1..a52485786 100644 --- a/spec/workers/slack_bot_ping_worker_spec.rb +++ b/spec/workers/slack/messengers/worker_spec.rb @@ -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)