mirror of
https://github.com/discourse/discourse.git
synced 2025-02-06 11:28:18 +00:00
4ae26bcaac
It is now safe to render the message excerpt as HTML since it is no longer using text_entities: true in the server PrettyText.excerpt call when creating the message excerpt from the cooked HTML. This will fix the issue of things like mentions showing HTML code instead of the actual mention when replying, and cannot be used to inject improper HTML like style tags via XSS.
103 lines
2.9 KiB
Ruby
103 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe "Reply to message - channel - drawer", type: :system do
|
|
let(:chat_page) { PageObjects::Pages::Chat.new }
|
|
let(:channel_page) { PageObjects::Pages::ChatChannel.new }
|
|
let(:thread_page) { PageObjects::Pages::ChatThread.new }
|
|
let(:drawer_page) { PageObjects::Pages::ChatDrawer.new }
|
|
|
|
fab!(:current_user) { Fabricate(:user) }
|
|
fab!(:channel_1) { Fabricate(:category_channel) }
|
|
fab!(:original_message) do
|
|
Fabricate(
|
|
:chat_message,
|
|
chat_channel: channel_1,
|
|
user: Fabricate(:user),
|
|
message: "This is a message to reply to!",
|
|
)
|
|
end
|
|
|
|
before do
|
|
SiteSetting.enable_experimental_chat_threaded_discussions = true
|
|
chat_system_bootstrap
|
|
channel_1.update!(threading_enabled: true)
|
|
channel_1.add(current_user)
|
|
sign_in(current_user)
|
|
end
|
|
|
|
context "when the message has not current thread" do
|
|
it "starts a thread" do
|
|
visit("/")
|
|
chat_page.open_from_header
|
|
drawer_page.open_channel(channel_1)
|
|
channel_page.reply_to(original_message)
|
|
|
|
expect(drawer_page).to have_open_thread
|
|
|
|
thread_page.send_message("reply to message")
|
|
|
|
expect(thread_page.messages).to have_message(text: "reply to message")
|
|
|
|
drawer_page.back
|
|
|
|
expect(channel_page).to have_thread_indicator(original_message)
|
|
end
|
|
end
|
|
|
|
context "when the message has an existing thread" do
|
|
fab!(:message_1) do
|
|
creator =
|
|
Chat::MessageCreator.new(
|
|
chat_channel: channel_1,
|
|
in_reply_to_id: original_message.id,
|
|
user: Fabricate(:user),
|
|
content: Faker::Lorem.paragraph,
|
|
)
|
|
creator.create
|
|
creator.chat_message
|
|
end
|
|
|
|
it "replies to the existing thread" do
|
|
visit("/")
|
|
chat_page.open_from_header
|
|
drawer_page.open_channel(channel_1)
|
|
|
|
expect(channel_page.message_thread_indicator(original_message)).to have_reply_count(1)
|
|
|
|
channel_page.reply_to(original_message)
|
|
|
|
expect(drawer_page).to have_open_thread
|
|
|
|
thread_page.send_message("reply to message")
|
|
|
|
expect(thread_page.messages).to have_message(text: message_1.message)
|
|
expect(thread_page.messages).to have_message(text: "reply to message")
|
|
|
|
drawer_page.back
|
|
|
|
expect(channel_page.message_thread_indicator(original_message)).to have_reply_count(2)
|
|
expect(channel_page.messages).to have_no_message(text: "reply to message")
|
|
end
|
|
end
|
|
|
|
context "with threading disabled" do
|
|
before { channel_1.update!(threading_enabled: false) }
|
|
|
|
it "makes a reply in the channel" do
|
|
visit("/")
|
|
chat_page.open_from_header
|
|
drawer_page.open_channel(channel_1)
|
|
channel_page.reply_to(original_message)
|
|
|
|
expect(page).to have_selector(
|
|
".chat-channel .chat-reply__excerpt",
|
|
text: original_message.excerpt,
|
|
)
|
|
|
|
channel_page.send_message("reply to message")
|
|
|
|
expect(channel_page.messages).to have_message(text: "reply to message")
|
|
end
|
|
end
|
|
end
|