Improve `MessageBus.track_publish` to allow filter by channel.

This commit is contained in:
Guo Xiang Tan 2017-10-02 11:34:57 +08:00
parent b295a39977
commit c872225762
7 changed files with 28 additions and 39 deletions

View File

@ -15,9 +15,8 @@ describe PostMerger do
reply3 = create_post(topic: topic, raw: 'The third reply', post_number: 4, user: user)
replies = [reply3, reply2, reply1]
message = MessageBus.track_publish { PostMerger.new(admin, replies).merge }.last
message = MessageBus.track_publish("/topic/#{topic.id}") { PostMerger.new(admin, replies).merge }.last
expect(message.channel).to eq("/topic/#{topic.id}")
expect(message.data[:type]).to eq(:revised)
expect(message.data[:post_number]).to eq(reply3.post_number)

View File

@ -382,11 +382,10 @@ describe PostRevisor do
it "should publish topic changes to clients" do
revisor = described_class.new(topic.ordered_posts.first, topic)
messages = MessageBus.track_publish do
message = MessageBus.track_publish("/topic/#{topic.id}") do
revisor.revise!(newuser, title: 'this is a test topic')
end
end.first
message = messages.find { |m| m.channel == "/topic/#{topic.id}" }
payload = message.data
expect(payload[:reload_topic]).to eq(true)
end

View File

@ -145,11 +145,11 @@ describe SiteSettingExtension do
settings.setting("test_setting", 100)
settings.setting("test_setting", nil, client: true)
messages = MessageBus.track_publish do
message = MessageBus.track_publish('/client_settings') do
settings.test_setting = 88
end
end.first
expect(messages.map(&:channel).include?('/client_settings')).to eq(true)
expect(message).to be_present
end
end
end

View File

@ -52,13 +52,11 @@ describe UploadsController do
it 'is successful with an image' do
Jobs.expects(:enqueue).with(:create_avatar_thumbnails, anything)
message = MessageBus.track_publish do
message = MessageBus.track_publish('/uploads/avatar') do
post :create, params: { file: logo, type: "avatar", format: :json }
end.find { |m| m.channel == "/uploads/avatar" }
end.first
expect(response.status).to eq 200
expect(message.channel).to eq("/uploads/avatar")
expect(message.data["id"]).to be
end
@ -67,12 +65,11 @@ describe UploadsController do
Jobs.expects(:enqueue).never
message = MessageBus.track_publish do
message = MessageBus.track_publish('/uploads/composer') do
post :create, params: { file: text_file, type: "composer", format: :json }
end.find { |m| m.channel == "/uploads/composer" }
end.first
expect(response.status).to eq 200
expect(message.channel).to eq("/uploads/composer")
expect(message.data["id"]).to be
end
@ -103,7 +100,7 @@ describe UploadsController do
log_in :admin
Jobs.expects(:enqueue).with(:create_avatar_thumbnails, anything).never
message = MessageBus.track_publish do
message = MessageBus.track_publish('/uploads/profile_background') do
post :create, params: {
file: logo,
retain_hours: 100,
@ -119,7 +116,7 @@ describe UploadsController do
it 'requires a file' do
Jobs.expects(:enqueue).never
message = MessageBus.track_publish do
message = MessageBus.track_publish('/uploads/composer') do
post :create, params: { type: "composer", format: :json }
end.first
@ -157,14 +154,14 @@ describe UploadsController do
SiteSetting.allow_staff_to_upload_any_file_in_pm = true
@user.update_columns(moderator: true)
message = MessageBus.track_publish do
message = MessageBus.track_publish('/uploads/composer') do
post :create, params: {
file: text_file,
type: "composer",
for_private_message: "true",
format: :json
}
end.find { |m| m.channel = '/uploads/composer' }
end.first
expect(response).to be_success
expect(message.data["id"]).to be
@ -173,13 +170,11 @@ describe UploadsController do
it 'returns an error when it could not determine the dimensions of an image' do
Jobs.expects(:enqueue).with(:create_avatar_thumbnails, anything).never
message = MessageBus.track_publish do
message = MessageBus.track_publish('/uploads/composer') do
post :create, params: { file: fake_jpg, type: "composer", format: :json }
end.find { |m| m.channel == '/uploads/composer' }
end.first
expect(response.status).to eq 200
expect(message.channel).to eq("/uploads/composer")
expect(message.data["errors"]).to contain_exactly(I18n.t("upload.images.size_not_found"))
end

View File

@ -1420,9 +1420,8 @@ describe User do
let(:user) { Fabricate(:user) }
it 'should publish the right message' do
message = MessageBus.track_publish { user.logged_out }.find { |m| m.channel == '/logout' }
message = MessageBus.track_publish('/logout') { user.logged_out }.first
expect(message.channel).to eq('/logout')
expect(message.data).to eq(user.id)
end
end
@ -1527,9 +1526,9 @@ describe User do
notification = Fabricate(:notification, user: user)
notification2 = Fabricate(:notification, user: user, read: true)
message = MessageBus.track_publish do
message = MessageBus.track_publish("/notification/#{user.id}") do
user.publish_notifications_state
end.find { |m| m.channel = "/notification/#{user.id}" }
end.first
expect(message.data[:recent]).to eq([
[notification2.id, true], [notification.id, false]

View File

@ -11,14 +11,13 @@ RSpec.describe Admin::EmojisController do
describe "#create" do
describe 'when upload is invalid' do
it 'should publish the right error' do
message = MessageBus.track_publish do
message = MessageBus.track_publish("/uploads/emoji") do
post "/admin/customize/emojis.json", params: {
name: 'test',
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/fake.jpg")
}
end.find { |m| m.channel == "/uploads/emoji" }
end.first
expect(message.channel).to eq("/uploads/emoji")
expect(message.data["errors"]).to eq([I18n.t('upload.images.size_not_found')])
end
end
@ -27,14 +26,12 @@ RSpec.describe Admin::EmojisController do
it 'should publish the right error' do
CustomEmoji.create!(name: 'test', upload: upload)
message = MessageBus.track_publish do
message = MessageBus.track_publish("/uploads/emoji") do
post "/admin/customize/emojis.json", params: {
name: 'test',
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/logo.png")
}
end.find { |m| m.channel == "/uploads/emoji" }
expect(message.channel).to eq("/uploads/emoji")
end.first
expect(message.data["errors"]).to eq([
"Name #{I18n.t('activerecord.errors.models.custom_emoji.attributes.name.taken')}"
@ -45,18 +42,17 @@ RSpec.describe Admin::EmojisController do
it 'should allow an admin to add a custom emoji' do
Emoji.expects(:clear_cache)
message = MessageBus.track_publish do
message = MessageBus.track_publish("/uploads/emoji") do
post "/admin/customize/emojis.json", params: {
name: 'test',
file: fixture_file_upload("#{Rails.root}/spec/fixtures/images/logo.png")
}
end.find { |m| m.channel == "/uploads/emoji" }
end.first
custom_emoji = CustomEmoji.last
upload = custom_emoji.upload
expect(upload.original_filename).to eq('logo.png')
expect(message.channel).to eq("/uploads/emoji")
expect(message.data["errors"]).to eq(nil)
expect(message.data["name"]).to eq(custom_emoji.name)
expect(message.data["url"]).to eq(upload.url)

View File

@ -1,7 +1,7 @@
module MessageBus::DiagnosticsHelper
def publish(channel, data, opts = nil)
id = super(channel, data, opts)
if @tracking
if @tracking && (@channel.nil? || @channel == channel)
m = MessageBus::Message.new(-1, id, channel, data)
m.user_ids = opts[:user_ids] if opts
m.group_ids = opts[:group_ids] if opts
@ -10,7 +10,8 @@ module MessageBus::DiagnosticsHelper
id
end
def track_publish
def track_publish(channel = nil)
@channel = channel
@tracking = tracking = []
yield
tracking