mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
Merge pull request #5705 from discourse/new_webhooks
FEATURE: Webhook for group and category events
This commit is contained in:
@@ -21,6 +21,9 @@ Fabricator(:wildcard_web_hook, from: :web_hook) do
|
||||
wildcard_web_hook true
|
||||
end
|
||||
|
||||
Fabricator(:post_web_hook, from: :web_hook) do
|
||||
end
|
||||
|
||||
Fabricator(:topic_web_hook, from: :web_hook) do
|
||||
transient topic_hook: WebHookEventType.find_by(name: 'topic')
|
||||
|
||||
@@ -36,3 +39,19 @@ Fabricator(:user_web_hook, from: :web_hook) do
|
||||
web_hook.web_hook_event_types = [transients[:user_hook]]
|
||||
end
|
||||
end
|
||||
|
||||
Fabricator(:group_web_hook, from: :web_hook) do
|
||||
transient group_hook: WebHookEventType.find_by(name: 'group')
|
||||
|
||||
after_build do |web_hook, transients|
|
||||
web_hook.web_hook_event_types = [transients[:group_hook]]
|
||||
end
|
||||
end
|
||||
|
||||
Fabricator(:category_web_hook, from: :web_hook) do
|
||||
transient category_hook: WebHookEventType.find_by(name: 'category')
|
||||
|
||||
after_build do |web_hook, transients|
|
||||
web_hook.web_hook_event_types = [transients[:category_hook]]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -56,9 +56,14 @@ describe Jobs::EmitWebHookEvent do
|
||||
stub_request(:post, "https://meta.discourse.org/webhook_listener")
|
||||
.to_return(body: 'OK', status: 200)
|
||||
|
||||
expect do
|
||||
subject.execute(web_hook_id: post_hook.id, event_type: 'post', post_id: post.id)
|
||||
end.to change(WebHookEvent, :count).by(1)
|
||||
WebHookEventType.all.pluck(:name).each do |name|
|
||||
web_hook_id = Fabricate("#{name}_web_hook").id
|
||||
object_id = Fabricate(name).id
|
||||
|
||||
expect do
|
||||
subject.execute(web_hook_id: web_hook_id, event_type: name, "#{name}_id": object_id)
|
||||
end.to change(WebHookEvent, :count).by(1)
|
||||
end
|
||||
end
|
||||
|
||||
it 'skips silently on missing post' do
|
||||
|
||||
@@ -368,6 +368,17 @@ describe Category do
|
||||
end
|
||||
end
|
||||
|
||||
describe 'new' do
|
||||
subject { Fabricate.build(:category, user: Fabricate(:user)) }
|
||||
|
||||
it 'triggers a extensibility event' do
|
||||
event = DiscourseEvent.track_events { subject.save! }.last
|
||||
|
||||
expect(event[:event_name]).to eq(:category_created)
|
||||
expect(event[:params].first).to eq(subject)
|
||||
end
|
||||
end
|
||||
|
||||
describe "update" do
|
||||
it "should enforce uniqueness of slug" do
|
||||
Fabricate(:category, slug: "the-slug")
|
||||
@@ -384,14 +395,21 @@ describe Category do
|
||||
@category_id = @category.id
|
||||
@topic_id = @category.topic_id
|
||||
SiteSetting.shared_drafts_category = @category.id.to_s
|
||||
@category.destroy
|
||||
end
|
||||
|
||||
it 'is deleted correctly' do
|
||||
@category.destroy
|
||||
expect(Category.exists?(id: @category_id)).to be false
|
||||
expect(Topic.exists?(id: @topic_id)).to be false
|
||||
expect(SiteSetting.shared_drafts_category).to be_blank
|
||||
end
|
||||
|
||||
it 'triggers a extensibility event' do
|
||||
event = DiscourseEvent.track_events { @category.destroy }.first
|
||||
|
||||
expect(event[:event_name]).to eq(:category_destroyed)
|
||||
expect(event[:params].first).to eq(@category)
|
||||
end
|
||||
end
|
||||
|
||||
describe 'latest' do
|
||||
|
||||
@@ -411,17 +411,37 @@ describe Group do
|
||||
expect(g.usernames.split(",").sort).to eq usernames.split(",").sort
|
||||
end
|
||||
|
||||
it "correctly destroys groups" do
|
||||
describe 'new' do
|
||||
subject { Fabricate.build(:group) }
|
||||
|
||||
g = Fabricate(:group)
|
||||
u1 = Fabricate(:user)
|
||||
g.add(u1)
|
||||
g.save!
|
||||
it 'triggers a extensibility event' do
|
||||
event = DiscourseEvent.track_events { subject.save! }.first
|
||||
|
||||
g.destroy
|
||||
expect(event[:event_name]).to eq(:group_created)
|
||||
expect(event[:params].first).to eq(subject)
|
||||
end
|
||||
end
|
||||
|
||||
expect(User.where(id: u1.id).count).to eq 1
|
||||
expect(GroupUser.where(group_id: g.id).count).to eq 0
|
||||
describe 'destroy' do
|
||||
let(:user) { Fabricate(:user) }
|
||||
let(:group) { Fabricate(:group, users: [user]) }
|
||||
|
||||
before do
|
||||
group.add(user)
|
||||
end
|
||||
|
||||
it "it deleted correctly" do
|
||||
group.destroy!
|
||||
expect(User.where(id: user.id).count).to eq 1
|
||||
expect(GroupUser.where(group_id: group.id).count).to eq 0
|
||||
end
|
||||
|
||||
it 'triggers a extensibility event' do
|
||||
event = DiscourseEvent.track_events { group.destroy! }.first
|
||||
|
||||
expect(event[:event_name]).to eq(:group_destroyed)
|
||||
expect(event[:params].first).to eq(group)
|
||||
end
|
||||
end
|
||||
|
||||
it "has custom fields" do
|
||||
|
||||
24
spec/requests/categories_controller_spec.rb
Normal file
24
spec/requests/categories_controller_spec.rb
Normal file
@@ -0,0 +1,24 @@
|
||||
require 'rails_helper'
|
||||
|
||||
describe GroupsController do
|
||||
let(:admin) { Fabricate(:admin) }
|
||||
let(:category) { Fabricate(:category, user: admin) }
|
||||
|
||||
before do
|
||||
category
|
||||
sign_in(admin)
|
||||
end
|
||||
|
||||
it "triggers a extensibility event" do
|
||||
event = DiscourseEvent.track_events {
|
||||
put "/categories/#{category.id}.json", params: {
|
||||
name: 'hello',
|
||||
color: 'ff0',
|
||||
text_color: 'fff'
|
||||
}
|
||||
}.last
|
||||
|
||||
expect(event[:event_name]).to eq(:category_updated)
|
||||
expect(event[:params].first).to eq(category)
|
||||
end
|
||||
end
|
||||
@@ -450,6 +450,15 @@ describe GroupsController do
|
||||
expect(group.flair_color).to eq('BBB')
|
||||
expect(group.name).to eq('testing')
|
||||
end
|
||||
|
||||
it 'triggers a extensibility event' do
|
||||
event = DiscourseEvent.track_events {
|
||||
put "/groups/#{group.id}.json", params: { group: { flair_color: 'BBB' } }
|
||||
}.last
|
||||
|
||||
expect(event[:event_name]).to eq(:group_updated)
|
||||
expect(event[:params].first).to eq(group)
|
||||
end
|
||||
end
|
||||
|
||||
context "when user is not a group owner or admin" do
|
||||
|
||||
Reference in New Issue
Block a user