discourse/plugins/chat/spec/system/bookmark_message_spec.rb
Régis Hanol 906f48694c FIX: deep linking to a message in a thread
Whenever you get a bookmark notification, a mention notification, or click on a bookmark on a message in a long thread, we should ensure we always highlight and show the proper message.

Before this fix, we would correctly load the thread, but would always start at the bottom.

Internal ref. t/128103
2024-05-15 09:42:12 +02:00

85 lines
2.6 KiB
Ruby

# frozen_string_literal: true
RSpec.describe "Bookmark message", type: :system do
fab!(:current_user) { Fabricate(:user) }
let(:chat_page) { PageObjects::Pages::Chat.new }
let(:channel_page) { PageObjects::Pages::ChatChannel.new }
let(:thread_page) { PageObjects::Pages::ChatThread.new }
let(:bookmark_modal) { PageObjects::Modals::Bookmark.new }
fab!(:category_channel_1) { Fabricate(:category_channel) }
fab!(:message_1) { Fabricate(:chat_message, chat_channel: category_channel_1) }
before do
chat_system_bootstrap
category_channel_1.add(current_user)
sign_in(current_user)
end
context "when desktop" do
it "allows to bookmark a message" do
chat_page.visit_channel(category_channel_1)
channel_page.bookmark_message(message_1)
bookmark_modal.fill_name("Check this out later")
bookmark_modal.select_preset_reminder(:next_month)
expect(channel_page).to have_bookmarked_message(message_1)
end
it "supports linking to a bookmark in a long thread" do
category_channel_1.update!(threading_enabled: true)
category_channel_1.add(current_user)
thread =
chat_thread_chain_bootstrap(
channel: category_channel_1,
users: [current_user, Fabricate(:user)],
messages_count: Chat::MessagesQuery::MAX_PAGE_SIZE + 1,
)
first_message = thread.replies.first
bookmark = Bookmark.create!(bookmarkable: first_message, user: current_user)
visit bookmark.bookmarkable.url
expect(thread_page).to have_bookmarked_message(first_message)
end
context "when the user has a bookmark auto_delete_preference" do
before do
current_user.user_option.update!(
bookmark_auto_delete_preference: Bookmark.auto_delete_preferences[:on_owner_reply],
)
end
it "is respected when the user creates a new bookmark" do
chat_page.visit_channel(category_channel_1)
channel_page.bookmark_message(message_1)
bookmark_modal.save
expect(channel_page).to have_bookmarked_message(message_1)
bookmark = Bookmark.find_by(bookmarkable: message_1, user: current_user)
expect(bookmark.auto_delete_preference).to eq(
Bookmark.auto_delete_preferences[:on_owner_reply],
)
end
end
end
context "when mobile", mobile: true do
it "allows to bookmark a message" do
chat_page.visit_channel(category_channel_1)
channel_page.bookmark_message(message_1)
bookmark_modal.fill_name("Check this out later")
bookmark_modal.select_preset_reminder(:next_month)
expect(channel_page).to have_bookmarked_message(message_1)
end
end
end