mirror of
https://github.com/discourse/discourse.git
synced 2025-06-06 13:06:56 +08:00
Missing specs for Group
, Tag
, Category
and Flag
web hooks.
This commit is contained in:
@ -150,7 +150,6 @@ class CategoriesController < ApplicationController
|
|||||||
old_permissions = cat.permissions_params
|
old_permissions = cat.permissions_params
|
||||||
|
|
||||||
if result = cat.update(category_params)
|
if result = cat.update(category_params)
|
||||||
DiscourseEvent.trigger(:category_updated, cat)
|
|
||||||
Scheduler::Defer.later "Log staff action change category settings" do
|
Scheduler::Defer.later "Log staff action change category settings" do
|
||||||
@staff_action_logger.log_category_settings_change(@category, category_params, old_permissions)
|
@staff_action_logger.log_category_settings_change(@category, category_params, old_permissions)
|
||||||
end
|
end
|
||||||
@ -167,7 +166,6 @@ class CategoriesController < ApplicationController
|
|||||||
custom_slug = params[:slug].to_s
|
custom_slug = params[:slug].to_s
|
||||||
|
|
||||||
if custom_slug.present? && @category.update_attributes(slug: custom_slug)
|
if custom_slug.present? && @category.update_attributes(slug: custom_slug)
|
||||||
DiscourseEvent.trigger(:category_updated, @category)
|
|
||||||
render json: success_json
|
render json: success_json
|
||||||
else
|
else
|
||||||
render_json_error(@category)
|
render_json_error(@category)
|
||||||
|
@ -136,8 +136,6 @@ class GroupsController < ApplicationController
|
|||||||
|
|
||||||
if group.update(group_params(automatic: group.automatic))
|
if group.update(group_params(automatic: group.automatic))
|
||||||
GroupActionLogger.new(current_user, group).log_change_group_settings
|
GroupActionLogger.new(current_user, group).log_change_group_settings
|
||||||
DiscourseEvent.trigger(:group_updated, group)
|
|
||||||
|
|
||||||
render json: success_json
|
render json: success_json
|
||||||
else
|
else
|
||||||
render_json_error(group)
|
render_json_error(group)
|
||||||
|
@ -111,7 +111,6 @@ class TagsController < ::ApplicationController
|
|||||||
tag.name = new_tag_name
|
tag.name = new_tag_name
|
||||||
if tag.save
|
if tag.save
|
||||||
StaffActionLogger.new(current_user).log_custom('renamed_tag', previous_value: params[:tag_id], new_value: new_tag_name)
|
StaffActionLogger.new(current_user).log_custom('renamed_tag', previous_value: params[:tag_id], new_value: new_tag_name)
|
||||||
DiscourseEvent.trigger(:tag_updated, tag)
|
|
||||||
render json: { tag: { id: new_tag_name } }
|
render json: { tag: { id: new_tag_name } }
|
||||||
else
|
else
|
||||||
render_json_error tag.errors.full_messages
|
render_json_error tag.errors.full_messages
|
||||||
|
@ -62,6 +62,7 @@ class Category < ActiveRecord::Base
|
|||||||
after_update :create_category_permalink, if: :saved_change_to_slug?
|
after_update :create_category_permalink, if: :saved_change_to_slug?
|
||||||
|
|
||||||
after_commit :trigger_category_created_event, on: :create
|
after_commit :trigger_category_created_event, on: :create
|
||||||
|
after_commit :trigger_category_updated_event, on: :update
|
||||||
after_commit :trigger_category_destroyed_event, on: :destroy
|
after_commit :trigger_category_destroyed_event, on: :destroy
|
||||||
|
|
||||||
belongs_to :parent_category, class_name: 'Category'
|
belongs_to :parent_category, class_name: 'Category'
|
||||||
@ -512,14 +513,15 @@ SQL
|
|||||||
subcategory_list_style.end_with?("with_featured_topics")
|
subcategory_list_style.end_with?("with_featured_topics")
|
||||||
end
|
end
|
||||||
|
|
||||||
def trigger_category_created_event
|
%i{
|
||||||
DiscourseEvent.trigger(:category_created, self)
|
category_created
|
||||||
|
category_updated
|
||||||
|
category_destroyed
|
||||||
|
}.each do |event|
|
||||||
|
define_method("trigger_#{event}_event") do
|
||||||
|
DiscourseEvent.trigger(event, self)
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def trigger_category_destroyed_event
|
|
||||||
DiscourseEvent.trigger(:category_destroyed, self)
|
|
||||||
true
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@ class Group < ActiveRecord::Base
|
|||||||
after_destroy :expire_cache
|
after_destroy :expire_cache
|
||||||
|
|
||||||
after_commit :trigger_group_created_event, on: :create
|
after_commit :trigger_group_created_event, on: :create
|
||||||
|
after_commit :trigger_group_updated_event, on: :update
|
||||||
after_commit :trigger_group_destroyed_event, on: :destroy
|
after_commit :trigger_group_destroyed_event, on: :destroy
|
||||||
|
|
||||||
def expire_cache
|
def expire_cache
|
||||||
@ -584,14 +585,15 @@ class Group < ActiveRecord::Base
|
|||||||
self.member_of(groups, user).where("gu.owner")
|
self.member_of(groups, user).where("gu.owner")
|
||||||
end
|
end
|
||||||
|
|
||||||
def trigger_group_created_event
|
%i{
|
||||||
DiscourseEvent.trigger(:group_created, self)
|
group_created
|
||||||
|
group_updated
|
||||||
|
group_destroyed
|
||||||
|
}.each do |event|
|
||||||
|
define_method("trigger_#{event}_event") do
|
||||||
|
DiscourseEvent.trigger(event, self)
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def trigger_group_destroyed_event
|
|
||||||
DiscourseEvent.trigger(:group_destroyed, self)
|
|
||||||
true
|
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
@ -17,6 +17,7 @@ class Tag < ActiveRecord::Base
|
|||||||
after_save :index_search
|
after_save :index_search
|
||||||
|
|
||||||
after_commit :trigger_tag_created_event, on: :create
|
after_commit :trigger_tag_created_event, on: :create
|
||||||
|
after_commit :trigger_tag_updated_event, on: :update
|
||||||
after_commit :trigger_tag_destroyed_event, on: :destroy
|
after_commit :trigger_tag_destroyed_event, on: :destroy
|
||||||
|
|
||||||
def self.ensure_consistency!
|
def self.ensure_consistency!
|
||||||
@ -124,14 +125,15 @@ class Tag < ActiveRecord::Base
|
|||||||
SearchIndexer.index(self)
|
SearchIndexer.index(self)
|
||||||
end
|
end
|
||||||
|
|
||||||
def trigger_tag_created_event
|
%i{
|
||||||
DiscourseEvent.trigger(:tag_created, self)
|
tag_created
|
||||||
|
tag_updated
|
||||||
|
tag_destroyed
|
||||||
|
}.each do |event|
|
||||||
|
define_method("trigger_#{event}_event") do
|
||||||
|
DiscourseEvent.trigger(event, self)
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
def trigger_tag_destroyed_event
|
|
||||||
DiscourseEvent.trigger(:tag_destroyed, self)
|
|
||||||
true
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ end
|
|||||||
tag_destroyed
|
tag_destroyed
|
||||||
).each do |event|
|
).each do |event|
|
||||||
DiscourseEvent.on(event) do |tag|
|
DiscourseEvent.on(event) do |tag|
|
||||||
WebHook.enqueue_object_hooks(:tag, tag, event)
|
WebHook.enqueue_object_hooks(:tag, tag, event, TagSerializer)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -84,6 +84,6 @@ end
|
|||||||
flag_deferred
|
flag_deferred
|
||||||
).each do |event|
|
).each do |event|
|
||||||
DiscourseEvent.on(event) do |flag|
|
DiscourseEvent.on(event) do |flag|
|
||||||
WebHook.enqueue_object_hooks(:flag, flag, event, WebHookFlagSerializer)
|
WebHook.enqueue_object_hooks(:flag, flag, event)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -721,7 +721,7 @@ describe PostAction do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "triggers webhook events" do
|
describe "triggers Discourse events" do
|
||||||
let(:post) { Fabricate(:post) }
|
let(:post) { Fabricate(:post) }
|
||||||
|
|
||||||
it 'flag created' do
|
it 'flag created' do
|
||||||
|
@ -297,5 +297,123 @@ describe WebHook do
|
|||||||
payload = JSON.parse(job_args["payload"])
|
payload = JSON.parse(job_args["payload"])
|
||||||
expect(payload["id"]).to eq(user.id)
|
expect(payload["id"]).to eq(user.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should enqueue the right hooks for category events' do
|
||||||
|
Fabricate(:category_web_hook)
|
||||||
|
category = Fabricate(:category)
|
||||||
|
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("category_created")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["id"]).to eq(category.id)
|
||||||
|
|
||||||
|
category.update!(slug: 'testing')
|
||||||
|
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("category_updated")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["id"]).to eq(category.id)
|
||||||
|
expect(payload["slug"]).to eq('testing')
|
||||||
|
|
||||||
|
category.destroy!
|
||||||
|
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("category_destroyed")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["id"]).to eq(category.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should enqueue the right hooks for group events' do
|
||||||
|
Fabricate(:group_web_hook)
|
||||||
|
group = Fabricate(:group)
|
||||||
|
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("group_created")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["id"]).to eq(group.id)
|
||||||
|
|
||||||
|
group.update!(full_name: 'testing')
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("group_updated")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["id"]).to eq(group.id)
|
||||||
|
expect(payload["full_name"]).to eq('testing')
|
||||||
|
|
||||||
|
group.destroy!
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("group_destroyed")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["full_name"]).to eq('testing')
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should enqueue the right hooks for tag events' do
|
||||||
|
Fabricate(:tag_web_hook)
|
||||||
|
tag = Fabricate(:tag)
|
||||||
|
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("tag_created")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["id"]).to eq(tag.id)
|
||||||
|
|
||||||
|
tag.update!(name: 'testing')
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("tag_updated")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["id"]).to eq(tag.id)
|
||||||
|
expect(payload["name"]).to eq('testing')
|
||||||
|
|
||||||
|
tag.destroy!
|
||||||
|
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("tag_destroyed")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["id"]).to eq(tag.id)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'should enqueue the right hooks for flag events' do
|
||||||
|
post = Fabricate(:post)
|
||||||
|
admin = Fabricate(:admin)
|
||||||
|
moderator = Fabricate(:moderator)
|
||||||
|
Fabricate(:flag_web_hook)
|
||||||
|
|
||||||
|
post_action = PostAction.act(admin, post, PostActionType.types[:spam])
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("flag_created")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["id"]).to eq(post_action.id)
|
||||||
|
|
||||||
|
PostAction.agree_flags!(post, moderator)
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("flag_agreed")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["id"]).to eq(post_action.id)
|
||||||
|
|
||||||
|
PostAction.clear_flags!(post, moderator)
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("flag_disagreed")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["id"]).to eq(post_action.id)
|
||||||
|
|
||||||
|
post = Fabricate(:post)
|
||||||
|
post_action = PostAction.act(admin, post, PostActionType.types[:spam])
|
||||||
|
PostAction.defer_flags!(post, moderator)
|
||||||
|
job_args = Jobs::EmitWebHookEvent.jobs.last["args"].first
|
||||||
|
|
||||||
|
expect(job_args["event_name"]).to eq("flag_deferred")
|
||||||
|
payload = JSON.parse(job_args["payload"])
|
||||||
|
expect(payload["id"]).to eq(post_action.id)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user