Add slack message for warned user activity (#1077)

* add slack messsages for warned user activity

* make slack messages async

* add spec for warned user article creation

* refactor observers

* add specs

* fix specs

* enable and create observer specs
This commit is contained in:
Jess Lee 2018-11-07 13:29:05 -05:00 committed by Ben Halpern
parent b865ad9f69
commit 94e55558f1
7 changed files with 57 additions and 3 deletions

View file

@ -0,0 +1,10 @@
class ApplicationObserver < ActiveRecord::Observer
def warned_user_ping(activity)
if activity.user.warned == true
SlackBot.ping "@#{activity.user.username} just posted.\nThey've been warned since #{activity.user.roles.where(name: 'warned')[0].updated_at.strftime('%d %B %Y')}\nhttps://dev.to#{activity.path}",
channel: "warned-user-activity",
username: "sloan_watch_bot",
icon_emoji: ":sloan:"
end
end
end

View file

@ -1,4 +1,4 @@
class ArticleObserver < ActiveRecord::Observer
class ArticleObserver < ApplicationObserver
def after_save(article)
return if Rails.env.development?
if article.published && article.published_at > 30.seconds.ago
@ -8,6 +8,7 @@ class ArticleObserver < ActiveRecord::Observer
icon_emoji: ":writing_hand:"
end
warned_user_ping(article)
rescue StandardError
puts "error"
end

View file

@ -0,0 +1,8 @@
class CommentObserver < ApplicationObserver
def after_save(comment)
return if Rails.env.development?
warned_user_ping(comment)
rescue StandardError
puts "error"
end
end

View file

@ -31,7 +31,7 @@ module PracticalDeveloper
config.autoload_paths += Dir["#{config.root}/app/sanitizers"]
config.autoload_paths += Dir["#{config.root}/lib/"]
config.active_record.observers = :article_observer, :reaction_observer
config.active_record.observers = :article_observer, :reaction_observer, :comment_observer
config.active_job.queue_adapter = :delayed_job
config.middleware.use Rack::Deflater

View file

@ -0,0 +1,17 @@
require "rails_helper"
RSpec.describe ArticleObserver, type: :observer do
let(:user) { create(:user) }
before do
allow(SlackBot).to receive(:ping).and_return(true)
end
it "pings slack if user with warned role creates an article" do
user.add_role :warned
Article.observers.enable :article_observer do
create(:article, user_id: user.id)
end
expect(SlackBot).to have_received(:ping).twice
end
end

View file

@ -0,0 +1,18 @@
require "rails_helper"
RSpec.describe CommentObserver, type: :observer do
let(:user) { create(:user) }
let(:article) { create(:article) }
before do
allow(SlackBot).to receive(:ping).and_return(true)
end
it "pings slack if user with warned role creates a comment" do
user.add_role :warned
Comment.observers.enable :comment_observer do
create(:comment, user_id: user.id, commentable_id: article.id)
end
expect(SlackBot).to have_received(:ping).twice
end
end

View file

@ -56,7 +56,7 @@ RSpec.describe "ArticlesCreate", type: :request do
post "/articles", params: {
article: {
title: new_title,
body_markdown: "---\ntitle: hey hey hahuu\npublished: false\nseries: helloyo\n---\nYo ho ho#{rand(100)}",
body_markdown: "---\ntitle: hey hey hahuu\npublished: false\nseries: helloyo\n---\nYo ho ho#{rand(100)}"
}
}
expect(Collection.last.slug).to eq("helloyo")