81 lines
2.4 KiB
Ruby
81 lines
2.4 KiB
Ruby
|
require 'rails_helper'
|
||
|
|
||
|
describe ::Presence::PresencesController, type: :request do
|
||
|
|
||
|
before do
|
||
|
SiteSetting.presence_enabled = true
|
||
|
end
|
||
|
|
||
|
let(:user1) { Fabricate(:user) }
|
||
|
let(:user2) { Fabricate(:user) }
|
||
|
let(:user3) { Fabricate(:user) }
|
||
|
|
||
|
after(:each) do
|
||
|
$redis.del('presence:post:22')
|
||
|
$redis.del('presence:post:11')
|
||
|
end
|
||
|
|
||
|
context 'when not logged in' do
|
||
|
it 'should raise the right error' do
|
||
|
expect { post '/presence/publish.json' }.to raise_error(Discourse::NotLoggedIn)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when logged in' do
|
||
|
before do
|
||
|
sign_in(user1)
|
||
|
end
|
||
|
|
||
|
it "doesn't produce an error" do
|
||
|
expect { post '/presence/publish.json' }.not_to raise_error
|
||
|
end
|
||
|
|
||
|
it "returns a response when requested" do
|
||
|
messages = MessageBus.track_publish do
|
||
|
post '/presence/publish.json', current: { compose_state: 'open', action: 'edit', post_id: 22 }, response_needed: true
|
||
|
end
|
||
|
|
||
|
expect(messages.count).to eq (1)
|
||
|
|
||
|
data = JSON.parse(response.body)
|
||
|
|
||
|
expect(data['messagebus_channel']).to eq('/presence/post/22')
|
||
|
expect(data['messagebus_id']).to eq(MessageBus.last_id('/presence/post/22'))
|
||
|
expect(data['users'][0]["id"]).to eq(user1.id)
|
||
|
end
|
||
|
|
||
|
it "doesn't return a response when not requested" do
|
||
|
messages = MessageBus.track_publish do
|
||
|
post '/presence/publish.json', current: { compose_state: 'open', action: 'edit', post_id: 22 }
|
||
|
end
|
||
|
|
||
|
expect(messages.count).to eq (1)
|
||
|
|
||
|
data = JSON.parse(response.body)
|
||
|
expect(data).to eq({})
|
||
|
end
|
||
|
|
||
|
it "doesn't send duplicate messagebus messages" do
|
||
|
messages = MessageBus.track_publish do
|
||
|
post '/presence/publish.json', current: { compose_state: 'open', action: 'edit', post_id: 22 }
|
||
|
end
|
||
|
expect(messages.count).to eq (1)
|
||
|
|
||
|
messages = MessageBus.track_publish do
|
||
|
post '/presence/publish.json', current: { compose_state: 'open', action: 'edit', post_id: 22 }
|
||
|
end
|
||
|
expect(messages.count).to eq (0)
|
||
|
end
|
||
|
|
||
|
it "clears 'previous' state when supplied" do
|
||
|
messages = MessageBus.track_publish do
|
||
|
post '/presence/publish.json', current: { compose_state: 'open', action: 'edit', post_id: 22 }
|
||
|
post '/presence/publish.json', current: { compose_state: 'open', action: 'edit', post_id: 11 }, previous: { compose_state: 'open', action: 'edit', post_id: 22 }
|
||
|
end
|
||
|
expect(messages.count).to eq (3)
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
end
|