From e1ae32103d9efd09984578558c9357fb06d76043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guitaut?= Date: Thu, 24 Aug 2023 15:22:51 +0200 Subject: [PATCH] DEV: Refactor chat specs related to message creation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is extracted from #22390. This patch aims to ease the transition to the new message creation service. (in progress in #22390) Indeed, the new service patch is breaking some specs from `discourse-ai` and `discourse-templates` because these plugins are using either `Chat::MessageCreator` or the `chat_message` fabricator. This patch addresses theses issues by normalizing how we create a chat message in specs. To do so, the preferred way is to use `Fabricate(:chat_message)` with a new `:use_service` option allowing to call the service under the hood. While this patch will obviously call `Chat::MessageCreator`, the new service patch will now be able to simply change the call to `Chat::CreateMessage` without breaking any specs from other plugins. Another thing this patch does is to not create chat messages using the service for specs that aren’t system ones, thus speeding the execution time a bit in the process. --- .../components/chat/message_updater_spec.rb | 30 ++--- .../chat/spec/fabricators/chat_fabricator.rb | 46 +++++-- .../mark_all_channel_threads_read_spec.rb | 12 +- .../spec/lib/chat/channel_fetcher_spec.rb | 6 +- .../chat/spec/lib/chat/message_mover_spec.rb | 3 + .../spec/lib/chat/parsed_mentions_spec.rb | 12 +- .../spec/mailers/user_notifications_spec.rb | 7 + plugins/chat/spec/plugin_helper.rb | 5 +- plugins/chat/spec/plugin_spec.rb | 30 ++--- .../incoming_webhooks_controller_spec.rb | 8 +- ...channel_thread_messages_controller_spec.rb | 4 +- .../api/channel_threads_controller_spec.rb | 5 + ...r_notification_settings_controller_spec.rb | 1 + .../chat/api/reads_controller_spec.rb | 6 + .../chat/lookup_channel_threads_spec.rb | 17 ++- .../chat/mark_all_user_channels_read_spec.rb | 7 + .../services/chat/message_destroyer_spec.rb | 3 +- .../services/chat/restore_message_spec.rb | 10 +- .../spec/services/chat/trash_message_spec.rb | 12 +- ...pdate_thread_notification_settings_spec.rb | 2 + .../chat/spec/system/archive_channel_spec.rb | 16 ++- .../chat/composer/shortcuts/channel_spec.rb | 6 +- .../chat/composer/shortcuts/thread_spec.rb | 8 +- .../spec/system/chat/composer/thread_spec.rb | 6 +- .../spec/system/chat_message/thread_spec.rb | 4 +- .../system/message_thread_indicator_spec.rb | 5 +- plugins/chat/spec/system/navigation_spec.rb | 8 +- .../system/reply_to_message/drawer_spec.rb | 14 +- .../system/reply_to_message/full_page_spec.rb | 6 +- .../system/reply_to_message/mobile_spec.rb | 6 +- .../system/shortcuts/mark_all_read_spec.rb | 11 +- .../chat/spec/system/single_thread_spec.rb | 12 +- .../spec/system/thread_list/full_page_spec.rb | 6 +- .../system/thread_tracking/drawer_spec.rb | 10 +- .../system/thread_tracking/full_page_spec.rb | 16 +-- .../user_menu_notifications/sidebar_spec.rb | 123 ++++++++++-------- 36 files changed, 273 insertions(+), 210 deletions(-) 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