mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Refactor user_badge_granted DiscourseEvent logic (#17579)
Follow-up to 02ce9b8a62
This commit is contained in:
committed by
GitHub
parent
9630095370
commit
78427e0797
@@ -234,17 +234,4 @@ describe Badge do
|
||||
expect(regular_badge.allow_title).to eq(false)
|
||||
end
|
||||
end
|
||||
|
||||
context "#trigger_badge_granted_event" do
|
||||
it "triggers a 'user_badge_granted' event" do
|
||||
badge = Fabricate(:badge)
|
||||
user = Fabricate(:user)
|
||||
event = DiscourseEvent.track(:user_badge_granted) do
|
||||
badge.trigger_badge_granted_event(user.id)
|
||||
end
|
||||
|
||||
expect(event[:event_name]).to eq(:user_badge_granted)
|
||||
expect(event[:params]).to eq([badge.id, user.id])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
describe UserBadge do
|
||||
fab!(:badge) { Fabricate(:badge) }
|
||||
fab!(:user) { Fabricate(:user) }
|
||||
|
||||
context 'validations' do
|
||||
fab!(:badge) { Fabricate(:badge) }
|
||||
fab!(:user) { Fabricate(:user) }
|
||||
let(:subject) { BadgeGranter.grant(badge, user) }
|
||||
|
||||
it { is_expected.to validate_presence_of(:badge_id) }
|
||||
@@ -14,6 +14,18 @@ describe UserBadge do
|
||||
it { is_expected.to validate_uniqueness_of(:badge_id).scoped_to(:user_id) }
|
||||
end
|
||||
|
||||
describe '#save' do
|
||||
it "triggers the 'user_badge_granted' DiscourseEvent" do
|
||||
user_badge = UserBadge.new(badge: badge, user: user, granted_at: Time.zone.now, granted_by: Discourse.system_user)
|
||||
|
||||
event = DiscourseEvent.track(:user_badge_granted, args: [badge.id, user.id]) do
|
||||
user_badge.save!
|
||||
end
|
||||
|
||||
expect(event).to be_present
|
||||
end
|
||||
end
|
||||
|
||||
describe "featured rank" do
|
||||
fab!(:user) { Fabricate(:user) }
|
||||
fab!(:user_badge_tl1) { UserBadge.create!(badge_id: Badge::BasicUser, user: user, granted_by: Discourse.system_user, granted_at: Time.now) }
|
||||
|
||||
@@ -482,14 +482,17 @@ describe BadgeGranter do
|
||||
expect(UserBadge.find_by(user_id: user.id, badge_id: Badge::GreatPost)).to eq(nil)
|
||||
end
|
||||
|
||||
it 'calls user_badge_granted on backfilled badge' do
|
||||
it "triggers the 'user_badge_granted' DiscourseEvent per badge when badges are backfilled" do
|
||||
post = create_post(user: user)
|
||||
action = PostActionCreator.like(liker, post).post_action
|
||||
|
||||
Badge.any_instance.expects(:trigger_badge_granted_event).with(user.id).once
|
||||
Badge.any_instance.expects(:trigger_badge_granted_event).with(liker.id).once
|
||||
events = DiscourseEvent.track_events(:user_badge_granted) do
|
||||
BadgeGranter.process_queue!
|
||||
end
|
||||
|
||||
BadgeGranter.process_queue!
|
||||
expect(events.length).to eq(2)
|
||||
expect(events[0][:params]).to eq([Badge::FirstLike, liker.id])
|
||||
expect(events[1][:params]).to eq([Badge::Welcome, user.id])
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -9,16 +9,25 @@ module DiscourseEvent::TestHelper
|
||||
end
|
||||
end
|
||||
|
||||
def track_events
|
||||
def track_events(event_name = nil, args: nil)
|
||||
@events_trigger = events_trigger = []
|
||||
yield
|
||||
@events_trigger = nil
|
||||
|
||||
if event_name
|
||||
events_trigger = events_trigger.filter do |event|
|
||||
next if event[:event_name] != event_name
|
||||
next if args && event[:params] != args
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
events_trigger
|
||||
end
|
||||
|
||||
def track(event_type)
|
||||
events = track_events { yield }
|
||||
events.find { |e| e[:event_name] == event_type }
|
||||
def track(event_name, args: nil)
|
||||
events = track_events(event_name, args: args) { yield }
|
||||
events.first
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user