mirror of
https://github.com/discourse/discourse.git
synced 2025-03-09 14:34:35 +00:00
DEV: do not fabricate a Notification when fabricating a ChatMention (#20450)
Initially, the chat_mention db table was created to support notifications. So when creating a `chat_mention` record we were always creating a related `notification` record. So did the ChatMention fabricator. Now we want to use the chat_mention db table in other scenarios. So we started decoupling mentions from notification in 75b81b68. This removes fabrication of Notifications from the ChatMention fabricator. We need to be able to fabricate a ChatMention without a Notification.
This commit is contained in:
parent
e82b8c2b06
commit
69c7df2e56
@ -40,7 +40,10 @@ describe Chat::ChatMailer do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe "for chat mentions" do
|
describe "for chat mentions" do
|
||||||
fab!(:mention) { Fabricate(:chat_mention, user: user_1, chat_message: chat_message) }
|
fab!(:notification) { Fabricate(:notification) }
|
||||||
|
fab!(:mention) do
|
||||||
|
Fabricate(:chat_mention, user: user_1, chat_message: chat_message, notification: notification)
|
||||||
|
end
|
||||||
|
|
||||||
it "skips users without chat access" do
|
it "skips users without chat access" do
|
||||||
chatters_group.remove(user_1)
|
chatters_group.remove(user_1)
|
||||||
@ -151,7 +154,13 @@ describe Chat::ChatMailer do
|
|||||||
last_unread_mention_when_emailed_id: chat_message.id,
|
last_unread_mention_when_emailed_id: chat_message.id,
|
||||||
)
|
)
|
||||||
unread_message = Fabricate(:chat_message, chat_channel: chat_channel, user: sender)
|
unread_message = Fabricate(:chat_message, chat_channel: chat_channel, user: sender)
|
||||||
Fabricate(:chat_mention, user: user_1, chat_message: unread_message)
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(
|
||||||
|
:chat_mention,
|
||||||
|
user: user_1,
|
||||||
|
chat_message: unread_message,
|
||||||
|
notification: notification,
|
||||||
|
)
|
||||||
|
|
||||||
described_class.send_unread_mentions_summary
|
described_class.send_unread_mentions_summary
|
||||||
|
|
||||||
@ -178,7 +187,8 @@ describe Chat::ChatMailer do
|
|||||||
last_read_message_id: nil,
|
last_read_message_id: nil,
|
||||||
)
|
)
|
||||||
new_message = Fabricate(:chat_message, chat_channel: chat_channel, user: sender)
|
new_message = Fabricate(:chat_message, chat_channel: chat_channel, user: sender)
|
||||||
Fabricate(:chat_mention, user: user_2, chat_message: new_message)
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(:chat_mention, user: user_2, chat_message: new_message, notification: notification)
|
||||||
|
|
||||||
described_class.send_unread_mentions_summary
|
described_class.send_unread_mentions_summary
|
||||||
|
|
||||||
@ -217,7 +227,13 @@ describe Chat::ChatMailer do
|
|||||||
)
|
)
|
||||||
|
|
||||||
another_channel_message = Fabricate(:chat_message, chat_channel: chat_channel, user: sender)
|
another_channel_message = Fabricate(:chat_message, chat_channel: chat_channel, user: sender)
|
||||||
Fabricate(:chat_mention, user: user_1, chat_message: another_channel_message)
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(
|
||||||
|
:chat_mention,
|
||||||
|
user: user_1,
|
||||||
|
chat_message: another_channel_message,
|
||||||
|
notification: notification,
|
||||||
|
)
|
||||||
|
|
||||||
expect { described_class.send_unread_mentions_summary }.not_to change(
|
expect { described_class.send_unread_mentions_summary }.not_to change(
|
||||||
Jobs::UserEmail.jobs,
|
Jobs::UserEmail.jobs,
|
||||||
@ -229,7 +245,13 @@ describe Chat::ChatMailer do
|
|||||||
another_channel = Fabricate(:category_channel)
|
another_channel = Fabricate(:category_channel)
|
||||||
another_channel_message =
|
another_channel_message =
|
||||||
Fabricate(:chat_message, chat_channel: another_channel, user: sender)
|
Fabricate(:chat_message, chat_channel: another_channel, user: sender)
|
||||||
Fabricate(:chat_mention, user: user_1, chat_message: another_channel_message)
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(
|
||||||
|
:chat_mention,
|
||||||
|
user: user_1,
|
||||||
|
chat_message: another_channel_message,
|
||||||
|
notification: notification,
|
||||||
|
)
|
||||||
another_channel_membership =
|
another_channel_membership =
|
||||||
Fabricate(
|
Fabricate(
|
||||||
:user_chat_channel_membership,
|
:user_chat_channel_membership,
|
||||||
@ -259,7 +281,8 @@ describe Chat::ChatMailer do
|
|||||||
end
|
end
|
||||||
|
|
||||||
it "only queues the job once when the user has mentions and private messages" do
|
it "only queues the job once when the user has mentions and private messages" do
|
||||||
Fabricate(:chat_mention, user: user_1, chat_message: chat_message)
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(:chat_mention, user: user_1, chat_message: chat_message, notification: notification)
|
||||||
|
|
||||||
described_class.send_unread_mentions_summary
|
described_class.send_unread_mentions_summary
|
||||||
|
|
||||||
@ -275,7 +298,8 @@ describe Chat::ChatMailer do
|
|||||||
chat_channel: chat_channel,
|
chat_channel: chat_channel,
|
||||||
last_read_message_id: chat_message.id,
|
last_read_message_id: chat_message.id,
|
||||||
)
|
)
|
||||||
Fabricate(:chat_mention, user: user_2, chat_message: chat_message)
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(:chat_mention, user: user_2, chat_message: chat_message, notification: notification)
|
||||||
|
|
||||||
described_class.send_unread_mentions_summary
|
described_class.send_unread_mentions_summary
|
||||||
|
|
||||||
|
@ -65,44 +65,6 @@ Fabricator(:chat_mention) do
|
|||||||
|
|
||||||
user { Fabricate(:user) }
|
user { Fabricate(:user) }
|
||||||
chat_message { Fabricate(:chat_message) }
|
chat_message { Fabricate(:chat_message) }
|
||||||
notification do |attrs|
|
|
||||||
# All this setup should be in a service we could just call here
|
|
||||||
# At the moment the logic is all split in a job
|
|
||||||
channel = attrs[:chat_message].chat_channel
|
|
||||||
|
|
||||||
payload = {
|
|
||||||
is_direct_message_channel: channel.direct_message_channel?,
|
|
||||||
mentioned_by_username: attrs[:chat_message].user.username,
|
|
||||||
chat_channel_id: channel.id,
|
|
||||||
chat_message_id: attrs[:chat_message].id,
|
|
||||||
}
|
|
||||||
|
|
||||||
if channel.direct_message_channel?
|
|
||||||
payload[:chat_channel_title] = channel.title(membership.user)
|
|
||||||
payload[:chat_channel_slug] = channel.slug
|
|
||||||
end
|
|
||||||
|
|
||||||
unless attrs[:identifier] == :direct_mentions
|
|
||||||
case attrs[:identifier]
|
|
||||||
when :here_mentions
|
|
||||||
payload[:identifier] = "here"
|
|
||||||
when :global_mentions
|
|
||||||
payload[:identifier] = "all"
|
|
||||||
else
|
|
||||||
payload[:identifier] = attrs[:identifier] if attrs[:identifier]
|
|
||||||
payload[:is_group_mention] = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
Fabricate(
|
|
||||||
:notification,
|
|
||||||
notification_type: Notification.types[:chat_mention],
|
|
||||||
user: attrs[:user],
|
|
||||||
data: payload.to_json,
|
|
||||||
read: attrs[:read],
|
|
||||||
high_priority: attrs[:high_priority],
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
Fabricator(:chat_message_reaction) do
|
Fabricator(:chat_message_reaction) do
|
||||||
|
@ -109,7 +109,14 @@ describe Chat::MessageMover do
|
|||||||
it "updates references for reactions, uploads, revisions, mentions, etc." do
|
it "updates references for reactions, uploads, revisions, mentions, etc." do
|
||||||
reaction = Fabricate(:chat_message_reaction, chat_message: message1)
|
reaction = Fabricate(:chat_message_reaction, chat_message: message1)
|
||||||
upload = Fabricate(:upload_reference, target: message1)
|
upload = Fabricate(:upload_reference, target: message1)
|
||||||
mention = Fabricate(:chat_mention, chat_message: message2, user: acting_user)
|
notification = Fabricate(:notification)
|
||||||
|
mention =
|
||||||
|
Fabricate(
|
||||||
|
:chat_mention,
|
||||||
|
chat_message: message2,
|
||||||
|
user: acting_user,
|
||||||
|
notification: notification,
|
||||||
|
)
|
||||||
revision = Fabricate(:chat_message_revision, chat_message: message3)
|
revision = Fabricate(:chat_message_revision, chat_message: message3)
|
||||||
webhook_event = Fabricate(:chat_webhook_event, chat_message: message3)
|
webhook_event = Fabricate(:chat_webhook_event, chat_message: message3)
|
||||||
move!
|
move!
|
||||||
|
@ -163,7 +163,15 @@ describe UserNotifications do
|
|||||||
|
|
||||||
describe "email subject" do
|
describe "email subject" do
|
||||||
context "with regular mentions" do
|
context "with regular mentions" do
|
||||||
before { Fabricate(:chat_mention, user: user, chat_message: chat_message) }
|
before do
|
||||||
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(
|
||||||
|
:chat_mention,
|
||||||
|
user: user,
|
||||||
|
chat_message: chat_message,
|
||||||
|
notification: notification,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
it "includes the sender username in the subject" do
|
it "includes the sender username in the subject" do
|
||||||
expected_subject =
|
expected_subject =
|
||||||
@ -194,7 +202,13 @@ describe UserNotifications do
|
|||||||
user: user,
|
user: user,
|
||||||
last_read_message_id: another_chat_message.id - 2,
|
last_read_message_id: another_chat_message.id - 2,
|
||||||
)
|
)
|
||||||
Fabricate(:chat_mention, user: user, chat_message: another_chat_message)
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(
|
||||||
|
:chat_mention,
|
||||||
|
user: user,
|
||||||
|
chat_message: another_chat_message,
|
||||||
|
notification: notification,
|
||||||
|
)
|
||||||
|
|
||||||
email = described_class.chat_summary(user, {})
|
email = described_class.chat_summary(user, {})
|
||||||
|
|
||||||
@ -227,7 +241,13 @@ describe UserNotifications do
|
|||||||
user: user,
|
user: user,
|
||||||
last_read_message_id: another_chat_message.id - 2,
|
last_read_message_id: another_chat_message.id - 2,
|
||||||
)
|
)
|
||||||
Fabricate(:chat_mention, user: user, chat_message: another_chat_message)
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(
|
||||||
|
:chat_mention,
|
||||||
|
user: user,
|
||||||
|
chat_message: another_chat_message,
|
||||||
|
notification: notification,
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
expected_subject =
|
expected_subject =
|
||||||
@ -253,7 +273,13 @@ describe UserNotifications do
|
|||||||
target_users: [sender, user],
|
target_users: [sender, user],
|
||||||
)
|
)
|
||||||
Fabricate(:chat_message, user: sender, chat_channel: channel)
|
Fabricate(:chat_message, user: sender, chat_channel: channel)
|
||||||
Fabricate(:chat_mention, user: user, chat_message: chat_message)
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(
|
||||||
|
:chat_mention,
|
||||||
|
user: user,
|
||||||
|
chat_message: chat_message,
|
||||||
|
notification: notification,
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "always includes the DM second" do
|
it "always includes the DM second" do
|
||||||
@ -273,7 +299,15 @@ describe UserNotifications do
|
|||||||
end
|
end
|
||||||
|
|
||||||
describe "When there are mentions" do
|
describe "When there are mentions" do
|
||||||
before { Fabricate(:chat_mention, user: user, chat_message: chat_message) }
|
before do
|
||||||
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(
|
||||||
|
:chat_mention,
|
||||||
|
user: user,
|
||||||
|
chat_message: chat_message,
|
||||||
|
notification: notification,
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
describe "selecting mentions" do
|
describe "selecting mentions" do
|
||||||
it "doesn't return an email if the user can't see chat" do
|
it "doesn't return an email if the user can't see chat" do
|
||||||
@ -377,7 +411,13 @@ describe UserNotifications do
|
|||||||
)
|
)
|
||||||
|
|
||||||
new_message = Fabricate(:chat_message, user: sender, chat_channel: channel)
|
new_message = Fabricate(:chat_message, user: sender, chat_channel: channel)
|
||||||
Fabricate(:chat_mention, user: user, chat_message: new_message)
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(
|
||||||
|
:chat_mention,
|
||||||
|
user: user,
|
||||||
|
chat_message: new_message,
|
||||||
|
notification: notification,
|
||||||
|
)
|
||||||
|
|
||||||
email = described_class.chat_summary(user, {})
|
email = described_class.chat_summary(user, {})
|
||||||
|
|
||||||
@ -478,7 +518,8 @@ describe UserNotifications do
|
|||||||
it "includes a view more link when there are more than two mentions" do
|
it "includes a view more link when there are more than two mentions" do
|
||||||
2.times do
|
2.times do
|
||||||
msg = Fabricate(:chat_message, user: sender, chat_channel: channel)
|
msg = Fabricate(:chat_message, user: sender, chat_channel: channel)
|
||||||
Fabricate(:chat_mention, user: user, chat_message: msg)
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(:chat_mention, user: user, chat_message: msg, notification: notification)
|
||||||
end
|
end
|
||||||
|
|
||||||
email = described_class.chat_summary(user, {})
|
email = described_class.chat_summary(user, {})
|
||||||
@ -499,7 +540,13 @@ describe UserNotifications do
|
|||||||
|
|
||||||
new_message =
|
new_message =
|
||||||
Fabricate(:chat_message, user: sender, chat_channel: channel, cooked: "New message")
|
Fabricate(:chat_message, user: sender, chat_channel: channel, cooked: "New message")
|
||||||
Fabricate(:chat_mention, user: user, chat_message: new_message)
|
notification = Fabricate(:notification)
|
||||||
|
Fabricate(
|
||||||
|
:chat_mention,
|
||||||
|
user: user,
|
||||||
|
chat_message: new_message,
|
||||||
|
notification: notification,
|
||||||
|
)
|
||||||
|
|
||||||
email = described_class.chat_summary(user, {})
|
email = described_class.chat_summary(user, {})
|
||||||
body = email.html_part.body.to_s
|
body = email.html_part.body.to_s
|
||||||
|
@ -465,7 +465,8 @@ describe ChatMessage do
|
|||||||
|
|
||||||
it "destroys chat_mention" do
|
it "destroys chat_mention" do
|
||||||
message_1 = Fabricate(:chat_message)
|
message_1 = Fabricate(:chat_message)
|
||||||
mention_1 = Fabricate(:chat_mention, chat_message: message_1)
|
notification = Fabricate(:notification)
|
||||||
|
mention_1 = Fabricate(:chat_mention, chat_message: message_1, notification: notification)
|
||||||
|
|
||||||
message_1.destroy!
|
message_1.destroy!
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user