diff --git a/plugins/chat/spec/components/chat/message_updater_spec.rb b/plugins/chat/spec/components/chat/message_updater_spec.rb index dd611f72d46..ba498506915 100644 --- a/plugins/chat/spec/components/chat/message_updater_spec.rb +++ b/plugins/chat/spec/components/chat/message_updater_spec.rb @@ -33,15 +33,13 @@ describe Chat::MessageUpdater do end def create_chat_message(user, message, channel, upload_ids: nil) - creator = - Chat::MessageCreator.create( - chat_channel: channel, - user: user, - in_reply_to_id: nil, - content: message, - upload_ids: upload_ids, - ) - creator.chat_message + Fabricate( + :chat_message, + chat_channel: channel, + user: user, + message: message, + upload_ids: upload_ids, + ) end it "errors when length is less than `chat_minimum_message_length`" do @@ -643,14 +641,14 @@ describe Chat::MessageUpdater do it "errors when a blocked word is present" do chat_message = create_chat_message(user1, "something", public_chat_channel) - creator = - Chat::MessageCreator.create( - chat_channel: public_chat_channel, - user: user1, - content: "bad word - #{watched_word.word}", + updater = + Chat::MessageUpdater.update( + guardian: guardian, + chat_message: chat_message, + new_content: "bad word - #{watched_word.word}", ) - expect(creator.failed?).to eq(true) - expect(creator.error.message).to match( + expect(updater.failed?).to eq(true) + expect(updater.error.message).to match( I18n.t("contains_blocked_word", { word: watched_word.word }), ) end diff --git a/plugins/chat/spec/fabricators/chat_fabricator.rb b/plugins/chat/spec/fabricators/chat_fabricator.rb index 359a813db6e..bc5ea694ad1 100644 --- a/plugins/chat/spec/fabricators/chat_fabricator.rb +++ b/plugins/chat/spec/fabricators/chat_fabricator.rb @@ -49,19 +49,36 @@ Fabricator(:direct_message_channel, from: :chat_channel) do end end -Fabricator(:chat_message, class_name: "Chat::MessageCreator") do - transient :chat_channel - transient :user - transient :message - transient :in_reply_to - transient :thread - transient :upload_ids +Fabricator(:chat_message, class_name: "Chat::Message") do + transient use_service: false + + initialize_with do |transients| + Fabricate( + transients[:use_service] ? :service_chat_message : :no_service_chat_message, + **to_params, + ) + end +end + +Fabricator(:no_service_chat_message, class_name: "Chat::Message") do + user + chat_channel + message { Faker::Lorem.paragraph_by_chars(number: 500) } + + after_build { |message, attrs| message.cook } + after_create { |message, attrs| message.create_mentions } +end + +Fabricator(:service_chat_message, class_name: "Chat::MessageCreator") do + transient :chat_channel, :user, :message, :in_reply_to, :thread, :upload_ids initialize_with do |transients| - user = transients[:user] || Fabricate(:user) channel = transients[:chat_channel] || transients[:thread]&.channel || transients[:in_reply_to]&.chat_channel || Fabricate(:chat_channel) + user = transients[:user] || Fabricate(:user) + Group.refresh_automatic_groups! + channel.add(user) resolved_class.create( chat_channel: channel, @@ -157,16 +174,14 @@ Fabricator(:chat_thread, class_name: "Chat::Thread") do thread.channel = original_message.chat_channel end - transient :with_replies - transient :channel - transient :original_message_user - transient :old_om + transient :with_replies, :channel, :original_message_user, :old_om, use_service: false original_message do |attrs| Fabricate( :chat_message, chat_channel: attrs[:channel] || Fabricate(:chat_channel), user: attrs[:original_message_user] || Fabricate(:user), + use_service: attrs[:use_service], ) end @@ -181,7 +196,12 @@ Fabricator(:chat_thread, class_name: "Chat::Thread") do thread.add(thread.original_message_user) if transients[:with_replies] - Fabricate.times(transients[:with_replies], :chat_message, thread: thread) + Fabricate.times( + transients[:with_replies], + :chat_message, + thread: thread, + use_service: transients[:use_service], + ) end end end diff --git a/plugins/chat/spec/jobs/regular/mark_all_channel_threads_read_spec.rb b/plugins/chat/spec/jobs/regular/mark_all_channel_threads_read_spec.rb index b98db58b589..6bfb6b0785f 100644 --- a/plugins/chat/spec/jobs/regular/mark_all_channel_threads_read_spec.rb +++ b/plugins/chat/spec/jobs/regular/mark_all_channel_threads_read_spec.rb @@ -6,17 +6,19 @@ RSpec.describe Jobs::Chat::MarkAllChannelThreadsRead do fab!(:thread_2) { Fabricate(:chat_thread, channel: channel) } fab!(:user_1) { Fabricate(:user) } fab!(:user_2) { Fabricate(:user) } - fab!(:thread_1_message_1) { Fabricate(:chat_message, thread: thread_1) } - fab!(:thread_1_message_2) { Fabricate(:chat_message, thread: thread_1) } - fab!(:thread_1_message_3) { Fabricate(:chat_message, thread: thread_1) } - fab!(:thread_2_message_1) { Fabricate(:chat_message, thread: thread_2) } - fab!(:thread_2_message_2) { Fabricate(:chat_message, thread: thread_2) } + fab!(:thread_1_message_1) { Fabricate(:chat_message, thread: thread_1, chat_channel: channel) } + fab!(:thread_1_message_2) { Fabricate(:chat_message, thread: thread_1, chat_channel: channel) } + fab!(:thread_1_message_3) { Fabricate(:chat_message, thread: thread_1, chat_channel: channel) } + fab!(:thread_2_message_1) { Fabricate(:chat_message, thread: thread_2, chat_channel: channel) } + fab!(:thread_2_message_2) { Fabricate(:chat_message, thread: thread_2, chat_channel: channel) } before do channel.add(user_1) channel.add(user_2) thread_1.add(user_1) + thread_1.update!(last_message: thread_1_message_3) thread_2.add(user_2) + thread_2.update!(last_message: thread_2_message_2) end def unread_count(user) diff --git a/plugins/chat/spec/lib/chat/channel_fetcher_spec.rb b/plugins/chat/spec/lib/chat/channel_fetcher_spec.rb index 82de60560e6..55ef6625fe3 100644 --- a/plugins/chat/spec/lib/chat/channel_fetcher_spec.rb +++ b/plugins/chat/spec/lib/chat/channel_fetcher_spec.rb @@ -359,10 +359,12 @@ describe Chat::ChannelFetcher do Chat::DirectMessageUser.create!(direct_message: dm_channel2, user: user1) Chat::DirectMessageUser.create!(direct_message: dm_channel2, user: user2) - Fabricate(:chat_message, user: user1, chat_channel: direct_message_channel1) - Fabricate(:chat_message, user: user1, chat_channel: direct_message_channel2) + dm_1 = Fabricate(:chat_message, user: user1, chat_channel: direct_message_channel1) + dm_2 = Fabricate(:chat_message, user: user1, chat_channel: direct_message_channel2) + direct_message_channel1.update!(last_message: dm_1) direct_message_channel1.last_message.update!(created_at: 1.day.ago) + direct_message_channel2.update!(last_message: dm_2) direct_message_channel2.last_message.update!(created_at: 1.hour.ago) expect(described_class.secured_direct_message_channels(user1.id, guardian).map(&:id)).to eq( diff --git a/plugins/chat/spec/lib/chat/message_mover_spec.rb b/plugins/chat/spec/lib/chat/message_mover_spec.rb index c458a7d749f..41a2f3e59d2 100644 --- a/plugins/chat/spec/lib/chat/message_mover_spec.rb +++ b/plugins/chat/spec/lib/chat/message_mover_spec.rb @@ -34,8 +34,11 @@ describe Chat::MessageMover do fab!(:message4) { Fabricate(:chat_message, chat_channel: destination_channel) } fab!(:message5) { Fabricate(:chat_message, chat_channel: destination_channel) } fab!(:message6) { Fabricate(:chat_message, chat_channel: destination_channel) } + let(:move_message_ids) { [message1.id, message2.id, message3.id] } + before { source_channel.update!(last_message: message3) } + describe "#move_to_channel" do def move!(move_message_ids = [message1.id, message2.id, message3.id]) described_class.new( diff --git a/plugins/chat/spec/lib/chat/parsed_mentions_spec.rb b/plugins/chat/spec/lib/chat/parsed_mentions_spec.rb index f03ca7850d0..7e33101c9aa 100644 --- a/plugins/chat/spec/lib/chat/parsed_mentions_spec.rb +++ b/plugins/chat/spec/lib/chat/parsed_mentions_spec.rb @@ -96,13 +96,7 @@ RSpec.describe Chat::ParsedMentions do end it "returns a user when self-mentioning" do - message = - Fabricate( - :chat_message, - chat_channel: chat_channel, - message: "Hey @#{channel_member_1.username}", - user: channel_member_1, - ) + message = create_message("Hey @#{channel_member_1.username}", user: channel_member_1) mentions = described_class.new(message) @@ -174,7 +168,7 @@ RSpec.describe Chat::ParsedMentions do end end - def create_message(text) - Fabricate(:chat_message, chat_channel: chat_channel, message: text) + def create_message(text, **extra_args) + Fabricate(:chat_message, chat_channel: chat_channel, message: text, **extra_args) end end diff --git a/plugins/chat/spec/mailers/user_notifications_spec.rb b/plugins/chat/spec/mailers/user_notifications_spec.rb index 734687c81c1..a20d12e0fdc 100644 --- a/plugins/chat/spec/mailers/user_notifications_spec.rb +++ b/plugins/chat/spec/mailers/user_notifications_spec.rb @@ -152,6 +152,11 @@ describe UserNotifications do ) end + before do + channel.add(sender) + channel.update!(last_message: chat_message) + end + it "doesn't return an email if there are no unread mentions" do email = described_class.chat_summary(user, {}) @@ -272,6 +277,7 @@ describe UserNotifications do chat_message: another_chat_message, notification: notification, ) + another_chat_channel.update!(last_message: another_chat_message) email = described_class.chat_summary(user, {}) @@ -311,6 +317,7 @@ describe UserNotifications do chat_message: another_chat_message, notification: notification, ) + another_chat_channel.update!(last_message: another_chat_message) end expected_subject = diff --git a/plugins/chat/spec/plugin_helper.rb b/plugins/chat/spec/plugin_helper.rb index 657646b905c..9ba3984e64a 100644 --- a/plugins/chat/spec/plugin_helper.rb +++ b/plugins/chat/spec/plugin_helper.rb @@ -24,17 +24,18 @@ module ChatSystemHelpers user.activate user.user_option.update!(chat_enabled: true) Group.refresh_automatic_group!("trust_level_#{user.trust_level}".to_sym) - Fabricate(:user_chat_channel_membership, chat_channel: channel, user: user) + channel.add(user) end def chat_thread_chain_bootstrap(channel:, users:, messages_count: 4, thread_attrs: {}) last_user = nil last_message = nil + users.each { |user| chat_system_user_bootstrap(user: user, channel: channel) } messages_count.times do |i| in_reply_to = i.zero? ? nil : last_message.id thread_id = i.zero? ? nil : last_message.thread_id - last_user = last_user.present? ? (users - [last_user]).sample : users.sample + last_user = ((users - [last_user]).presence || users).sample creator = Chat::MessageCreator.new( chat_channel: channel, diff --git a/plugins/chat/spec/plugin_spec.rb b/plugins/chat/spec/plugin_spec.rb index 67ba998b4e3..84be69df448 100644 --- a/plugins/chat/spec/plugin_spec.rb +++ b/plugins/chat/spec/plugin_spec.rb @@ -17,12 +17,12 @@ describe Chat do fab!(:unused_upload) { Fabricate(:upload, user: user, created_at: 1.month.ago) } let!(:chat_message) do - Chat::MessageCreator.create( + Fabricate( + :chat_message, chat_channel: chat_channel, user: user, - in_reply_to_id: nil, - content: "Hello world!", - upload_ids: [upload.id], + message: "Hello world!", + uploads: [upload], ) end @@ -43,15 +43,13 @@ describe Chat do fab!(:unused_upload) { Fabricate(:upload, user: user, created_at: 1.month.ago) } let!(:chat_message) do - Chat::MessageCreator.create( + Fabricate( + :chat_message, chat_channel: chat_channel, user: user, - in_reply_to_id: nil, - content: "Hello world! #{message_upload.sha1}", - upload_ids: [], + message: "Hello world! #{message_upload.sha1}", ) end - let!(:draft_message) do Chat::Draft.create!( user: user, @@ -135,17 +133,16 @@ describe Chat do fab!(:user_4) { Fabricate(:user, suspended_till: 3.weeks.from_now) } let!(:chat_message) do - Chat::MessageCreator.create( - chat_channel: chat_channel, - user: user, - in_reply_to_id: nil, - content: "Hello world!", - upload_ids: [], - ).chat_message + Fabricate(:chat_message, chat_channel: chat_channel, user: user, message: "Hello world!") end let(:chat_url) { "#{Discourse.base_url}/chat/c/-/#{chat_channel.id}" } + before do + chat_channel.update!(last_message: chat_message) + chat_channel.add(user) + end + context "when inline" do it "renders channel" do results = InlineOneboxer.new([chat_url], skip_cache: true).process @@ -166,7 +163,6 @@ describe Chat do context "when regular" do it "renders channel, excluding inactive, staged, and suspended users" do - user.user_chat_channel_memberships.create!(chat_channel: chat_channel, following: true) user_2.user_chat_channel_memberships.create!(chat_channel: chat_channel, following: true) user_3.user_chat_channel_memberships.create!(chat_channel: chat_channel, following: true) user_4.user_chat_channel_memberships.create!(chat_channel: chat_channel, following: true) diff --git a/plugins/chat/spec/requests/chat/admin/incoming_webhooks_controller_spec.rb b/plugins/chat/spec/requests/chat/admin/incoming_webhooks_controller_spec.rb index a67d99a77bc..7bde3a50753 100644 --- a/plugins/chat/spec/requests/chat/admin/incoming_webhooks_controller_spec.rb +++ b/plugins/chat/spec/requests/chat/admin/incoming_webhooks_controller_spec.rb @@ -119,6 +119,7 @@ RSpec.describe Chat::Admin::IncomingWebhooksController do describe "#delete" do fab!(:existing) { Fabricate(:incoming_chat_webhook, chat_channel: chat_channel1) } + fab!(:webhook_event) { Fabricate(:chat_webhook_event, incoming_chat_webhook: existing) } it "errors for non-staff" do sign_in(user) @@ -136,13 +137,6 @@ RSpec.describe Chat::Admin::IncomingWebhooksController do it "destroys webhook events records" do sign_in(admin) - Chat::MessageCreator.create( - chat_channel: existing.chat_channel, - user: Discourse.system_user, - content: "foo", - incoming_chat_webhook: existing, - ) - expect { delete "/admin/plugins/chat/hooks/#{existing.id}.json" }.to change { Chat::WebhookEvent.count }.by(-1) diff --git a/plugins/chat/spec/requests/chat/api/channel_thread_messages_controller_spec.rb b/plugins/chat/spec/requests/chat/api/channel_thread_messages_controller_spec.rb index 731a3a712be..d3f052fcc00 100644 --- a/plugins/chat/spec/requests/chat/api/channel_thread_messages_controller_spec.rb +++ b/plugins/chat/spec/requests/chat/api/channel_thread_messages_controller_spec.rb @@ -17,8 +17,8 @@ RSpec.describe Chat::Api::ChannelThreadMessagesController do describe "index" do describe "success" do - fab!(:message_1) { Fabricate(:chat_message, thread: thread) } - fab!(:message_2) { Fabricate(:chat_message) } + fab!(:message_1) { Fabricate(:chat_message, thread: thread, chat_channel: thread.channel) } + fab!(:message_2) { Fabricate(:chat_message, chat_channel: thread.channel) } it "works" do get "/chat/api/channels/#{thread.channel.id}/threads/#{thread.id}/messages" diff --git a/plugins/chat/spec/requests/chat/api/channel_threads_controller_spec.rb b/plugins/chat/spec/requests/chat/api/channel_threads_controller_spec.rb index f3e4f40a300..31ca9760f5a 100644 --- a/plugins/chat/spec/requests/chat/api/channel_threads_controller_spec.rb +++ b/plugins/chat/spec/requests/chat/api/channel_threads_controller_spec.rb @@ -106,6 +106,11 @@ RSpec.describe Chat::Api::ChannelThreadsController do ) end + before do + thread_1.add(current_user) + thread_3.add(current_user) + end + it "returns the threads the user has sent messages in for the channel" do get "/chat/api/channels/#{public_channel.id}/threads" expect(response.status).to eq(200) diff --git a/plugins/chat/spec/requests/chat/api/channel_threads_current_user_notification_settings_controller_spec.rb b/plugins/chat/spec/requests/chat/api/channel_threads_current_user_notification_settings_controller_spec.rb index 710040233c7..d29d7727145 100644 --- a/plugins/chat/spec/requests/chat/api/channel_threads_current_user_notification_settings_controller_spec.rb +++ b/plugins/chat/spec/requests/chat/api/channel_threads_current_user_notification_settings_controller_spec.rb @@ -10,6 +10,7 @@ RSpec.describe Chat::Api::ChannelThreadsCurrentUserNotificationsSettingsControll SiteSetting.chat_enabled = true SiteSetting.chat_allowed_groups = Group::AUTO_GROUPS[:everyone] sign_in(current_user) + thread.update!(last_message: last_reply) end describe "#update" do diff --git a/plugins/chat/spec/requests/chat/api/reads_controller_spec.rb b/plugins/chat/spec/requests/chat/api/reads_controller_spec.rb index 11a6a37f5cc..89fd02adcf6 100644 --- a/plugins/chat/spec/requests/chat/api/reads_controller_spec.rb +++ b/plugins/chat/spec/requests/chat/api/reads_controller_spec.rb @@ -133,6 +133,12 @@ RSpec.describe Chat::Api::ReadsController do ) end + before do + chat_channel_1.update!(last_message: message_2) + chat_channel_2.update!(last_message: message_4) + chat_channel_3.update!(last_message: message_6) + end + it "marks all messages as read across the user's channel memberships with the correct last_read_message_id" do put "/chat/api/channels/read.json" diff --git a/plugins/chat/spec/services/chat/lookup_channel_threads_spec.rb b/plugins/chat/spec/services/chat/lookup_channel_threads_spec.rb index f6f23576e3b..2a874918639 100644 --- a/plugins/chat/spec/services/chat/lookup_channel_threads_spec.rb +++ b/plugins/chat/spec/services/chat/lookup_channel_threads_spec.rb @@ -126,13 +126,15 @@ RSpec.describe ::Chat::LookupChannelThreads do [thread_2, 1.day.ago], [thread_3, 2.seconds.ago], ].each do |thread, created_at| - Fabricate( - :chat_message, - user: current_user, - chat_channel: channel_1, - thread: thread, - created_at: created_at, - ) + message = + Fabricate( + :chat_message, + user: current_user, + chat_channel: channel_1, + thread: thread, + created_at: created_at, + ) + thread.update!(last_message: message) end expect(result.threads.map(&:id)).to eq([thread_3.id, thread_1.id, thread_2.id]) @@ -141,6 +143,7 @@ RSpec.describe ::Chat::LookupChannelThreads do it "sorts by unread over recency" do unread_message = Fabricate(:chat_message, chat_channel: channel_1, thread: thread_2) unread_message.update!(created_at: 2.days.ago) + thread_2.update!(last_message: unread_message) expect(result.threads.map(&:id)).to eq([thread_2.id, thread_1.id, thread_3.id]) end diff --git a/plugins/chat/spec/services/chat/mark_all_user_channels_read_spec.rb b/plugins/chat/spec/services/chat/mark_all_user_channels_read_spec.rb index 4d1d0d32904..0ba3fb698bd 100644 --- a/plugins/chat/spec/services/chat/mark_all_user_channels_read_spec.rb +++ b/plugins/chat/spec/services/chat/mark_all_user_channels_read_spec.rb @@ -47,6 +47,12 @@ RSpec.describe Chat::MarkAllUserChannelsRead do ) end + before do + channel_1.update!(last_message: message_2) + channel_2.update!(last_message: message_4) + channel_3.update!(last_message: message_6) + end + context "when the user has no memberships" do let(:guardian) { Guardian.new(Fabricate(:user)) } @@ -170,6 +176,7 @@ RSpec.describe Chat::MarkAllUserChannelsRead do it "does use thread original messages for last_read_message_id" do new_om = Fabricate(:chat_message, chat_channel: channel_1, user: other_user) + channel_1.update!(last_message: new_om) thread.update!(original_message: new_om, original_message_user: other_user) result expect(membership_1.reload.last_read_message_id).to eq(new_om.id) diff --git a/plugins/chat/spec/services/chat/message_destroyer_spec.rb b/plugins/chat/spec/services/chat/message_destroyer_spec.rb index ec16a275a9f..1ea2527adc2 100644 --- a/plugins/chat/spec/services/chat/message_destroyer_spec.rb +++ b/plugins/chat/spec/services/chat/message_destroyer_spec.rb @@ -25,6 +25,7 @@ RSpec.describe Chat::MessageDestroyer do message_2 = Fabricate(:chat_message, chat_channel: message_1.chat_channel) message_3 = Fabricate(:chat_message, chat_channel: message_1.chat_channel) message_4 = Fabricate(:chat_message, chat_channel: message_1.chat_channel) + message_1.chat_channel.update(last_message: message_4) message_3.trash! membership = Chat::UserChatChannelMembership.create!( @@ -64,7 +65,7 @@ RSpec.describe Chat::MessageDestroyer do end it "sets the last_message_id for the channel if that message is deleted" do - expect(message_1.chat_channel.last_message_id).to eq(message_1.id) + message_1.chat_channel.update!(last_message: message_1) described_class.new.destroy_in_batches(Chat::Message.where(id: message_1.id)) expect(message_1.chat_channel.reload.last_message_id).to eq(nil) end diff --git a/plugins/chat/spec/services/chat/restore_message_spec.rb b/plugins/chat/spec/services/chat/restore_message_spec.rb index cd482b6ad38..3f71312212f 100644 --- a/plugins/chat/spec/services/chat/restore_message_spec.rb +++ b/plugins/chat/spec/services/chat/restore_message_spec.rb @@ -58,7 +58,7 @@ RSpec.describe Chat::RestoreMessage do it "does not update the channel last_message_id if the message is not the last one in the channel" do next_message = Fabricate(:chat_message, chat_channel: message.chat_channel) - expect(message.chat_channel.reload.last_message_id).to eq(next_message.id) + message.chat_channel.update!(last_message: next_message) result expect(message.chat_channel.reload.last_message_id).to eq(next_message.id) end @@ -97,10 +97,10 @@ RSpec.describe Chat::RestoreMessage do end it "does not update the thread last_message_id if the message is not the last one in the channel" do - next_message = Fabricate(:chat_message, thread: message.thread) - expect(message.thread.reload.last_message_id).to eq(next_message.id) - result - expect(message.thread.reload.last_message_id).to eq(next_message.id) + next_message = + Fabricate(:chat_message, thread: message.thread, chat_channel: message.chat_channel) + message.thread.update!(last_message: next_message) + expect { result }.not_to change { message.thread.reload.last_message } end end end diff --git a/plugins/chat/spec/services/chat/trash_message_spec.rb b/plugins/chat/spec/services/chat/trash_message_spec.rb index a57390ce177..cee1ebba4ce 100644 --- a/plugins/chat/spec/services/chat/trash_message_spec.rb +++ b/plugins/chat/spec/services/chat/trash_message_spec.rb @@ -124,7 +124,7 @@ RSpec.describe Chat::TrashMessage do next_message = Fabricate(:chat_message, chat_channel: message.chat_channel, user: current_user) params[:message_id] = next_message.id - expect(message.chat_channel.reload.last_message).to eq(next_message) + message.chat_channel.update!(last_message: next_message) result expect(message.chat_channel.reload.last_message).to eq(message) end @@ -174,9 +174,15 @@ RSpec.describe Chat::TrashMessage do end it "updates the thread last_message_id to the previous message in the thread" do - next_message = Fabricate(:chat_message, thread: thread, user: current_user) + next_message = + Fabricate( + :chat_message, + thread: thread, + user: current_user, + chat_channel: message.chat_channel, + ) params[:message_id] = next_message.id - expect(thread.reload.last_message).to eq(next_message) + thread.update!(last_message: next_message) result expect(thread.reload.last_message).to eq(message) end diff --git a/plugins/chat/spec/services/chat/update_thread_notification_settings_spec.rb b/plugins/chat/spec/services/chat/update_thread_notification_settings_spec.rb index 6d93564be85..671dd9d088b 100644 --- a/plugins/chat/spec/services/chat/update_thread_notification_settings_spec.rb +++ b/plugins/chat/spec/services/chat/update_thread_notification_settings_spec.rb @@ -26,6 +26,8 @@ RSpec.describe Chat::UpdateThreadNotificationSettings do } end + before { thread.update!(last_message: last_reply) } + context "when all steps pass" do it "sets the service result as successful" do expect(result).to be_a_success diff --git a/plugins/chat/spec/system/archive_channel_spec.rb b/plugins/chat/spec/system/archive_channel_spec.rb index 7d3c5105ee0..784a7f87cc7 100644 --- a/plugins/chat/spec/system/archive_channel_spec.rb +++ b/plugins/chat/spec/system/archive_channel_spec.rb @@ -65,19 +65,21 @@ RSpec.describe "Archive channel", type: :system do end context "when archived channels had unreads" do - before { channel_1.add(current_user) } + let(:other_user) { Fabricate(:user) } - it "clears unread indicators" do + before do Jobs.run_immediately! - - other_user = Fabricate(:user) - channel_1.add(other_user) - Chat::MessageCreator.create( + channel_1.add(current_user) + Fabricate( + :chat_message, chat_channel: channel_1, user: other_user, - content: "this is fine @#{current_user.username}", + message: "this is fine @#{current_user.username}", + use_service: true, ) + end + it "clears unread indicators" do visit("/") expect(page.find(".chat-channel-unread-indicator")).to have_content(1) diff --git a/plugins/chat/spec/system/chat/composer/shortcuts/channel_spec.rb b/plugins/chat/spec/system/chat/composer/shortcuts/channel_spec.rb index fcd2524f22c..68a6b797810 100644 --- a/plugins/chat/spec/system/chat/composer/shortcuts/channel_spec.rb +++ b/plugins/chat/spec/system/chat/composer/shortcuts/channel_spec.rb @@ -75,8 +75,10 @@ RSpec.describe "Chat | composer | shortcuts | channel", type: :system do end context "when using ArrowUp" do - fab!(:message_1) { Fabricate(:chat_message, chat_channel: channel_1, user: current_user) } - fab!(:message_2) { Fabricate(:chat_message, chat_channel: channel_1) } + fab!(:message_1) do + Fabricate(:chat_message, chat_channel: channel_1, user: current_user, use_service: true) + end + fab!(:message_2) { Fabricate(:chat_message, chat_channel: channel_1, use_service: true) } it "edits last editable message" do chat.visit_channel(channel_1) diff --git a/plugins/chat/spec/system/chat/composer/shortcuts/thread_spec.rb b/plugins/chat/spec/system/chat/composer/shortcuts/thread_spec.rb index 860d52063ae..7ba0dc37041 100644 --- a/plugins/chat/spec/system/chat/composer/shortcuts/thread_spec.rb +++ b/plugins/chat/spec/system/chat/composer/shortcuts/thread_spec.rb @@ -3,8 +3,10 @@ RSpec.describe "Chat | composer | shortcuts | thread", type: :system do fab!(:channel_1) { Fabricate(:chat_channel, threading_enabled: true) } fab!(:current_user) { Fabricate(:admin) } - fab!(:message_1) { Fabricate(:chat_message, chat_channel: channel_1) } - fab!(:thread_1) { Fabricate(:chat_message, user: current_user, in_reply_to: message_1).thread } + fab!(:message_1) { Fabricate(:chat_message, chat_channel: channel_1, use_service: true) } + fab!(:thread_1) do + Fabricate(:chat_message, user: current_user, in_reply_to: message_1, use_service: true).thread + end let(:chat_page) { PageObjects::Pages::Chat.new } let(:thread_page) { PageObjects::Pages::ChatThread.new } @@ -32,7 +34,7 @@ RSpec.describe "Chat | composer | shortcuts | thread", type: :system do let(:last_thread_message) { thread_1.replies.last } context "when there are editable messages" do - before { Fabricate(:chat_message, user: current_user, thread: thread_1) } + before { Fabricate(:chat_message, user: current_user, thread: thread_1, use_service: true) } it "starts editing the last editable message" do chat_page.visit_thread(thread_1) diff --git a/plugins/chat/spec/system/chat/composer/thread_spec.rb b/plugins/chat/spec/system/chat/composer/thread_spec.rb index 708fb5e221f..c1c396efc36 100644 --- a/plugins/chat/spec/system/chat/composer/thread_spec.rb +++ b/plugins/chat/spec/system/chat/composer/thread_spec.rb @@ -3,9 +3,11 @@ RSpec.describe "Chat | composer | thread", type: :system, js: true do fab!(:channel_1) { Fabricate(:chat_channel, threading_enabled: true) } fab!(:current_user) { Fabricate(:admin) } - fab!(:message_1) { Fabricate(:chat_message, chat_channel: channel_1, user: current_user) } + fab!(:message_1) do + Fabricate(:chat_message, chat_channel: channel_1, user: current_user, use_service: true) + end fab!(:message_2) do - Fabricate(:chat_message, chat_channel: channel_1, user: current_user, in_reply_to: message_1) + Fabricate(:chat_message, user: current_user, in_reply_to: message_1, use_service: true) end let(:chat_page) { PageObjects::Pages::Chat.new } diff --git a/plugins/chat/spec/system/chat_message/thread_spec.rb b/plugins/chat/spec/system/chat_message/thread_spec.rb index 0d11eb9156b..4fc2ab9c6ad 100644 --- a/plugins/chat/spec/system/chat_message/thread_spec.rb +++ b/plugins/chat/spec/system/chat_message/thread_spec.rb @@ -4,8 +4,8 @@ RSpec.describe "Chat message - thread", type: :system do fab!(:current_user) { Fabricate(:user) } fab!(:channel_1) { Fabricate(:chat_channel, threading_enabled: true) } fab!(:thread_message_1) do - message_1 = Fabricate(:chat_message, chat_channel: channel_1) - Fabricate(:chat_message, chat_channel: channel_1, in_reply_to: message_1) + message_1 = Fabricate(:chat_message, chat_channel: channel_1, use_service: true) + Fabricate(:chat_message, in_reply_to: message_1, use_service: true) end let(:chat_page) { PageObjects::Pages::Chat.new } diff --git a/plugins/chat/spec/system/message_thread_indicator_spec.rb b/plugins/chat/spec/system/message_thread_indicator_spec.rb index ab3af576cb3..ab909012426 100644 --- a/plugins/chat/spec/system/message_thread_indicator_spec.rb +++ b/plugins/chat/spec/system/message_thread_indicator_spec.rb @@ -59,9 +59,8 @@ describe "Thread indicator for chat messages", type: :system do it "it shows the reply count but no participant avatars when there is only one participant" do single_user_thread = - Fabricate(:chat_thread, channel: channel, original_message_user: current_user) - Fabricate(:chat_message, thread: single_user_thread, user: current_user) - Fabricate(:chat_message, thread: single_user_thread, user: current_user) + chat_thread_chain_bootstrap(channel: channel, users: [current_user], messages_count: 3) + chat_page.visit_channel(channel) expect( channel_page.message_thread_indicator(single_user_thread.original_message), diff --git a/plugins/chat/spec/system/navigation_spec.rb b/plugins/chat/spec/system/navigation_spec.rb index ec28288fa71..b80cd4fe881 100644 --- a/plugins/chat/spec/system/navigation_spec.rb +++ b/plugins/chat/spec/system/navigation_spec.rb @@ -122,11 +122,11 @@ RSpec.describe "Navigation", type: :system do end context "when opening a thread" do - fab!(:thread) { Fabricate(:chat_thread, channel: category_channel) } + fab!(:thread) { Fabricate(:chat_thread, channel: category_channel, use_service: true) } before do category_channel.update!(threading_enabled: true) - Fabricate(:chat_message, thread: thread, chat_channel: thread.channel) + Fabricate(:chat_message, thread: thread, use_service: true) thread.add(current_user) end @@ -335,7 +335,7 @@ RSpec.describe "Navigation", type: :system do it "activates the channel in the sidebar" do visit("/") chat_page.open_from_header - sidebar_component.click_link(category_channel.name) + sidebar_component.click_section_link(category_channel.name) expect(sidebar_component).to have_section_link(category_channel.name, active: true) end @@ -346,7 +346,7 @@ RSpec.describe "Navigation", type: :system do visit("/") chat_page.open_from_header - sidebar_component.click_link(category_channel.name) + sidebar_component.click_section_link(category_channel.name) chat_drawer_page.close expect(sidebar_component).to have_no_section_link(category_channel.name, active: true) diff --git a/plugins/chat/spec/system/reply_to_message/drawer_spec.rb b/plugins/chat/spec/system/reply_to_message/drawer_spec.rb index 7d327511cf2..bae9841734a 100644 --- a/plugins/chat/spec/system/reply_to_message/drawer_spec.rb +++ b/plugins/chat/spec/system/reply_to_message/drawer_spec.rb @@ -12,8 +12,8 @@ RSpec.describe "Reply to message - channel - drawer", type: :system do Fabricate( :chat_message, chat_channel: channel_1, - user: Fabricate(:user), message: "This is a message to reply to!", + use_service: true, ) end @@ -44,17 +44,7 @@ RSpec.describe "Reply to message - channel - drawer", type: :system do 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 + fab!(:message_1) { Fabricate(:chat_message, in_reply_to: original_message, use_service: true) } it "replies to the existing thread" do visit("/") diff --git a/plugins/chat/spec/system/reply_to_message/full_page_spec.rb b/plugins/chat/spec/system/reply_to_message/full_page_spec.rb index d2043ec914a..55886cbea35 100644 --- a/plugins/chat/spec/system/reply_to_message/full_page_spec.rb +++ b/plugins/chat/spec/system/reply_to_message/full_page_spec.rb @@ -12,8 +12,8 @@ RSpec.describe "Reply to message - channel - full page", type: :system do Fabricate( :chat_message, chat_channel: channel_1, - user: Fabricate(:user), message: "This is a message to reply to!", + use_service: true, ) end @@ -56,9 +56,7 @@ RSpec.describe "Reply to message - channel - full page", type: :system do end context "when the message has an existing thread" do - fab!(:message_1) do - Fabricate(:chat_message, chat_channel: channel_1, in_reply_to: original_message) - end + fab!(:message_1) { Fabricate(:chat_message, in_reply_to: original_message, use_service: true) } before { original_message.thread.add(current_user) } diff --git a/plugins/chat/spec/system/reply_to_message/mobile_spec.rb b/plugins/chat/spec/system/reply_to_message/mobile_spec.rb index b425cb363aa..37ed1743e20 100644 --- a/plugins/chat/spec/system/reply_to_message/mobile_spec.rb +++ b/plugins/chat/spec/system/reply_to_message/mobile_spec.rb @@ -12,8 +12,8 @@ RSpec.describe "Reply to message - channel - mobile", type: :system, mobile: tru Fabricate( :chat_message, chat_channel: channel_1, - user: Fabricate(:user), message: "This is a message to reply to!", + use_service: true, ) end @@ -56,9 +56,7 @@ RSpec.describe "Reply to message - channel - mobile", type: :system, mobile: tru end context "when the message has an existing thread" do - fab!(:message_1) do - Fabricate(:chat_message, chat_channel: channel_1, in_reply_to: original_message) - end + fab!(:message_1) { Fabricate(:chat_message, in_reply_to: original_message, use_service: true) } it "replies to the existing thread" do chat_page.visit_channel(channel_1) diff --git a/plugins/chat/spec/system/shortcuts/mark_all_read_spec.rb b/plugins/chat/spec/system/shortcuts/mark_all_read_spec.rb index d232f294589..858ac8ffd02 100644 --- a/plugins/chat/spec/system/shortcuts/mark_all_read_spec.rb +++ b/plugins/chat/spec/system/shortcuts/mark_all_read_spec.rb @@ -14,10 +14,15 @@ RSpec.describe "Shortcuts | mark all read", type: :system do SiteSetting.navigation_menu = "sidebar" chat_system_bootstrap(user_1, [channel_1, channel_2, channel_3]) sign_in(user_1) - Fabricate(:chat_message, chat_channel: channel_1) - Fabricate(:chat_message, chat_channel: channel_1) + Fabricate(:chat_message, chat_channel: channel_1, use_service: true) + Fabricate(:chat_message, chat_channel: channel_1, use_service: true) 10.times do |i| - Fabricate(:chat_message, chat_channel: channel_2, message: "all read message #{i}") + Fabricate( + :chat_message, + chat_channel: channel_2, + message: "all read message #{i}", + use_service: true, + ) end end diff --git a/plugins/chat/spec/system/single_thread_spec.rb b/plugins/chat/spec/system/single_thread_spec.rb index 11311e30ddf..5bf51077d9e 100644 --- a/plugins/chat/spec/system/single_thread_spec.rb +++ b/plugins/chat/spec/system/single_thread_spec.rb @@ -17,6 +17,7 @@ describe "Single thread in side panel", type: :system do context "when threading_enabled is false for the channel" do fab!(:channel) { Fabricate(:chat_channel) } + before { channel.update!(threading_enabled: false) } it "does not open the side panel for a single thread" do @@ -116,7 +117,7 @@ describe "Single thread in side panel", type: :system do end it "changes the tracking bell to be Tracking level in the thread panel" do - new_thread = Fabricate(:chat_thread, channel: channel, with_replies: 1) + new_thread = Fabricate(:chat_thread, channel: channel, with_replies: 1, use_service: true) chat_page.visit_channel(channel) channel_page.message_thread_indicator(new_thread.original_message).click expect(side_panel).to have_open_thread(new_thread) @@ -171,11 +172,12 @@ describe "Single thread in side panel", type: :system do it "does not mark the channel unread if another user sends a message in the thread" do other_user = Fabricate(:user) chat_system_user_bootstrap(user: other_user, channel: channel) - Chat::MessageCreator.create( - chat_channel: channel, + Fabricate( + :chat_message, + thread: thread, user: other_user, - content: "Hello world!", - thread_id: thread.id, + message: "Hello world!", + use_service: true, ) sign_in(current_user) chat_page.visit_channel(channel) diff --git a/plugins/chat/spec/system/thread_list/full_page_spec.rb b/plugins/chat/spec/system/thread_list/full_page_spec.rb index 07d4d0504f8..95c0feaafd4 100644 --- a/plugins/chat/spec/system/thread_list/full_page_spec.rb +++ b/plugins/chat/spec/system/thread_list/full_page_spec.rb @@ -26,12 +26,12 @@ describe "Thread list in side panel | full page", type: :system do end context "for threads the user is not a participant in" do - fab!(:thread_om) { Fabricate(:chat_message, chat_channel: channel) } + fab!(:thread_om) { Fabricate(:chat_message, chat_channel: channel, use_service: true) } before { chat_system_user_bootstrap(user: other_user, channel: channel) } it "does not show existing threads in the channel if the user is not tracking them" do - Fabricate(:chat_thread, original_message: thread_om, channel: channel) + Fabricate(:chat_thread, original_message: thread_om, channel: channel, use_service: true) chat_page.visit_channel(channel) channel_page.open_thread_list expect(page).to have_content(I18n.t("js.chat.threads.none")) @@ -118,7 +118,7 @@ describe "Thread list in side panel | full page", type: :system do it "shows the last reply date of the thread" do freeze_time - last_reply = Fabricate(:chat_message, chat_channel: thread_1.channel, thread: thread_1) + last_reply = Fabricate(:chat_message, thread: thread_1, use_service: true) chat_page.visit_channel(channel) channel_page.open_thread_list expect(thread_list_page.item_by_id(thread_1.id)).to have_css( diff --git a/plugins/chat/spec/system/thread_tracking/drawer_spec.rb b/plugins/chat/spec/system/thread_tracking/drawer_spec.rb index c545b73118b..19388d71c98 100644 --- a/plugins/chat/spec/system/thread_tracking/drawer_spec.rb +++ b/plugins/chat/spec/system/thread_tracking/drawer_spec.rb @@ -23,9 +23,9 @@ describe "Thread tracking state | drawer", type: :system do context "when the user has unread messages for a thread" do fab!(:message_1) do - Fabricate(:chat_message, chat_channel: channel, thread: thread, user: current_user) + Fabricate(:chat_message, thread: thread, user: current_user, use_service: true) end - fab!(:message_2) { Fabricate(:chat_message, chat_channel: channel, thread: thread) } + fab!(:message_2) { Fabricate(:chat_message, thread: thread, use_service: true) } it "shows the count of threads with unread messages on the thread list button" do visit("/") @@ -63,7 +63,7 @@ describe "Thread tracking state | drawer", type: :system do expect(drawer_page).to have_no_unread_thread_indicator expect(thread_list_page).to have_no_unread_item(thread.id) travel_to(1.minute.from_now) - Fabricate(:chat_message, chat_channel: channel, thread: thread, user: other_user) + Fabricate(:chat_message, thread: thread, user: other_user, use_service: true) expect(drawer_page).to have_unread_thread_indicator(count: 1) expect(thread_list_page).to have_unread_item(thread.id) end @@ -100,7 +100,7 @@ describe "Thread tracking state | drawer", type: :system do chat_page.open_from_header expect(drawer_page).to have_unread_channel(channel) drawer_page.open_channel(channel) - Fabricate(:chat_message, thread: thread, user: other_user) + Fabricate(:chat_message, thread: thread, user: other_user, use_service: true) drawer_page.back expect(drawer_page).to have_no_unread_channel(channel) end @@ -112,7 +112,7 @@ describe "Thread tracking state | drawer", type: :system do drawer_page.back expect(drawer_page).to have_no_unread_channel(channel) travel_to(1.minute.from_now) - Fabricate(:chat_message, thread: thread, user: other_user) + Fabricate(:chat_message, thread: thread, user: other_user, use_service: true) expect(drawer_page).to have_unread_channel(channel) end end diff --git a/plugins/chat/spec/system/thread_tracking/full_page_spec.rb b/plugins/chat/spec/system/thread_tracking/full_page_spec.rb index 9f284d4a336..e07c756c6ea 100644 --- a/plugins/chat/spec/system/thread_tracking/full_page_spec.rb +++ b/plugins/chat/spec/system/thread_tracking/full_page_spec.rb @@ -20,9 +20,9 @@ describe "Thread tracking state | full page", type: :system do context "when the user has unread messages for a thread" do fab!(:message_1) do - Fabricate(:chat_message, chat_channel: channel, thread: thread, user: current_user) + Fabricate(:chat_message, thread: thread, user: current_user, use_service: true) end - fab!(:message_2) { Fabricate(:chat_message, chat_channel: channel, thread: thread) } + fab!(:message_2) { Fabricate(:chat_message, thread: thread, use_service: true) } it "shows the count of threads with unread messages on the thread list button" do chat_page.visit_channel(channel) @@ -55,7 +55,7 @@ describe "Thread tracking state | full page", type: :system do chat_page.visit_channel(channel) channel_page.open_thread_list expect(thread_list_page).to have_no_unread_item(thread.id) - Fabricate(:chat_message, chat_channel: channel, thread: thread) + Fabricate(:chat_message, thread: thread, use_service: true) expect(thread_list_page).to have_unread_item(thread.id) end @@ -63,7 +63,7 @@ describe "Thread tracking state | full page", type: :system do thread.remove(current_user) chat_page.visit_channel(channel) expect(channel_page).to have_no_unread_thread_indicator - Fabricate(:chat_message, chat_channel: channel, thread: thread) + Fabricate(:chat_message, thread: thread, use_service: true) expect(channel_page).to have_no_unread_thread_indicator channel_page.open_thread_list expect(thread_list_page).to have_no_unread_item(thread.id) @@ -76,8 +76,8 @@ describe "Thread tracking state | full page", type: :system do end it "allows the user to start tracking a thread they have not replied to" do - new_thread = Fabricate(:chat_thread, channel: channel) - Fabricate(:chat_message, chat_channel: channel, thread: new_thread) + new_thread = Fabricate(:chat_thread, channel: channel, use_service: true) + Fabricate(:chat_message, thread: new_thread, use_service: true) chat_page.visit_thread(new_thread) thread_page.notification_level = :tracking expect(thread_page).to have_notification_level("tracking") @@ -114,7 +114,7 @@ describe "Thread tracking state | full page", type: :system do it "does not show an unread indicator for the channel sidebar if a new thread message arrives while the user is looking at the channel" do chat_page.visit_channel(channel) expect(sidebar_page).to have_no_unread_channel(channel) - Fabricate(:chat_message, thread: thread) + Fabricate(:chat_message, thread: thread, use_service: true) expect(sidebar_page).to have_no_unread_channel(channel) end @@ -122,7 +122,7 @@ describe "Thread tracking state | full page", type: :system do chat_page.visit_channel(channel) expect(sidebar_page).to have_no_unread_channel(channel) chat_page.visit_channel(other_channel) - Fabricate(:chat_message, thread: thread) + Fabricate(:chat_message, thread: thread, use_service: true) expect(sidebar_page).to have_unread_channel(channel) end end diff --git a/plugins/chat/spec/system/user_menu_notifications/sidebar_spec.rb b/plugins/chat/spec/system/user_menu_notifications/sidebar_spec.rb index 725fd015efa..158e284ab12 100644 --- a/plugins/chat/spec/system/user_menu_notifications/sidebar_spec.rb +++ b/plugins/chat/spec/system/user_menu_notifications/sidebar_spec.rb @@ -39,17 +39,20 @@ RSpec.describe "User menu notifications | sidebar", type: :system do context "when dm channel" do fab!(:dm_channel_1) { Fabricate(:direct_message_channel, users: [current_user, other_user]) } + before { Jobs.run_immediately! } + context "when @username" do + let!(:message) do + Fabricate( + :chat_message, + chat_channel: dm_channel_1, + user: other_user, + message: "this is fine @#{current_user.username}", + use_service: true, + ) + end + it "shows a mention notification" do - Jobs.run_immediately! - - message = - Chat::MessageCreator.create( - chat_channel: dm_channel_1, - user: other_user, - content: "this is fine @#{current_user.username}", - ).chat_message - visit("/") find(".header-dropdown-toggle.current-user").click @@ -69,24 +72,30 @@ RSpec.describe "User menu notifications | sidebar", type: :system do fab!(:channel_1) { Fabricate(:chat_channel) } before do + Jobs.run_immediately! channel_1.add(current_user) channel_1.add(other_user) - # Jobs.run_immediately! end context "when group mention" do fab!(:group) { Fabricate(:group, mentionable_level: Group::ALIAS_LEVELS[:everyone]) } - before { group.add(current_user) } + let(:message) do + Fabricate( + :chat_message, + chat_channel: channel_1, + user: other_user, + message: "this is fine @#{group.name}", + use_service: true, + ) + end - xit "shows a group mention notification" do - message = - Chat::MessageCreator.create( - chat_channel: channel_1, - user: other_user, - content: "this is fine @#{group.name}", - ).chat_message + before do + group.add(current_user) + message + end + it "shows a group mention notification" do visit("/") find(".header-dropdown-toggle.current-user").click @@ -106,16 +115,17 @@ RSpec.describe "User menu notifications | sidebar", type: :system do end context "when @username" do + let!(:message) do + Fabricate( + :chat_message, + chat_channel: channel_1, + user: other_user, + message: "this is fine @#{current_user.username}", + use_service: true, + ) + end + it "shows a mention notification" do - Jobs.run_immediately! - - message = - Chat::MessageCreator.create( - chat_channel: channel_1, - user: other_user, - content: "this is fine @#{current_user.username}", - ).chat_message - visit("/") find(".header-dropdown-toggle.current-user").click @@ -130,41 +140,46 @@ RSpec.describe "User menu notifications | sidebar", type: :system do ) end - it "shows a mention notification when the message is in a thread" do - Jobs.run_immediately! - - message = - Chat::MessageCreator.create( - chat_channel: channel_1, + context "when the message is in a thread" do + let!(:message) do + Fabricate( + :chat_message, + thread: Fabricate(:chat_thread, channel: channel_1), user: other_user, - content: "this is fine @#{current_user.username}", - thread_id: Fabricate(:chat_thread, channel: channel_1).id, - ).chat_message - - visit("/") - - find(".header-dropdown-toggle.current-user").click - within("#user-menu-button-chat-notifications") do |panel| - expect(panel).to have_content(1) - panel.click + message: "this is fine @#{current_user.username}", + use_service: true, + ) end - expect(find("#quick-access-chat-notifications")).to have_link( - I18n.t("js.notifications.popup.chat_mention.direct", channel: channel_1.name), - href: "/chat/c/#{channel_1.slug}/#{channel_1.id}/t/#{message.thread_id}", - ) + it "shows a mention notification when the message is in a thread" do + visit("/") + + find(".header-dropdown-toggle.current-user").click + within("#user-menu-button-chat-notifications") do |panel| + expect(panel).to have_content(1) + panel.click + end + + expect(find("#quick-access-chat-notifications")).to have_link( + I18n.t("js.notifications.popup.chat_mention.direct", channel: channel_1.name), + href: "/chat/c/#{channel_1.slug}/#{channel_1.id}/t/#{message.thread_id}", + ) + end end end context "when @all" do - xit "shows a mention notification" do - message = - Chat::MessageCreator.create( - chat_channel: channel_1, - user: other_user, - content: "this is fine @all", - ).chat_message + let!(:message) do + Fabricate( + :chat_message, + chat_channel: channel_1, + user: other_user, + message: "this is fine @all", + use_service: true, + ) + end + it "shows a mention notification" do visit("/") find(".header-dropdown-toggle.current-user").click