2022-11-02 22:53:36 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
require "rails_helper"
|
|
|
|
|
|
|
|
describe DirectMessage do
|
|
|
|
fab!(:user1) { Fabricate(:user, username: "chatdmfellow1") }
|
|
|
|
fab!(:user2) { Fabricate(:user, username: "chatdmuser") }
|
|
|
|
fab!(:chat_channel) { Fabricate(:direct_message_channel) }
|
|
|
|
|
|
|
|
it_behaves_like "a chatable model" do
|
|
|
|
fab!(:chatable) { Fabricate(:direct_message) }
|
|
|
|
let(:channel_class) { DirectMessageChannel }
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#chat_channel_title_for_user" do
|
|
|
|
it "returns a nicely formatted name if it's more than one user" do
|
|
|
|
user3 = Fabricate.build(:user, username: "chatdmregent")
|
|
|
|
direct_message = Fabricate(:direct_message, users: [user1, user2, user3])
|
|
|
|
|
|
|
|
expect(direct_message.chat_channel_title_for_user(chat_channel, user1)).to eq(
|
|
|
|
I18n.t(
|
|
|
|
"chat.channel.dm_title.multi_user",
|
2023-02-20 17:31:02 +08:00
|
|
|
comma_separated_usernames:
|
|
|
|
[user3, user2].map { |u| "@#{u.username}" }.join(I18n.t("word_connector.comma")),
|
2022-11-02 22:53:36 +08:00
|
|
|
),
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns a nicely formatted truncated name if it's more than 5 users" do
|
|
|
|
user3 = Fabricate.build(:user, username: "chatdmregent")
|
|
|
|
|
|
|
|
users = [user1, user2, user3].concat(
|
|
|
|
5.times.map.with_index { |i| Fabricate(:user, username: "chatdmuser#{i}") },
|
|
|
|
)
|
|
|
|
direct_message = Fabricate(:direct_message, users: users)
|
|
|
|
|
|
|
|
expect(direct_message.chat_channel_title_for_user(chat_channel, user1)).to eq(
|
|
|
|
I18n.t(
|
|
|
|
"chat.channel.dm_title.multi_user_truncated",
|
2023-02-20 17:31:02 +08:00
|
|
|
comma_separated_usernames:
|
|
|
|
users[1..5]
|
|
|
|
.sort_by(&:username)
|
|
|
|
.map { |u| "@#{u.username}" }
|
|
|
|
.join(I18n.t("word_connector.comma")),
|
|
|
|
count: 2,
|
2022-11-02 22:53:36 +08:00
|
|
|
),
|
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns the other user's username if it's a dm to that user" do
|
|
|
|
direct_message = Fabricate(:direct_message, users: [user1, user2])
|
|
|
|
|
|
|
|
expect(direct_message.chat_channel_title_for_user(chat_channel, user1)).to eq(
|
2023-02-20 17:31:02 +08:00
|
|
|
I18n.t("chat.channel.dm_title.single_user", username: "@#{user2.username}"),
|
2022-11-02 22:53:36 +08:00
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
it "returns the current user's username if it's a dm to self" do
|
|
|
|
direct_message = Fabricate(:direct_message, users: [user1])
|
|
|
|
|
|
|
|
expect(direct_message.chat_channel_title_for_user(chat_channel, user1)).to eq(
|
2023-02-20 17:31:02 +08:00
|
|
|
I18n.t("chat.channel.dm_title.single_user", username: "@#{user1.username}"),
|
2022-11-02 22:53:36 +08:00
|
|
|
)
|
|
|
|
end
|
|
|
|
|
|
|
|
context "when user is deleted" do
|
|
|
|
it "returns a placeholder username" do
|
|
|
|
direct_message = Fabricate(:direct_message, users: [user1, user2])
|
|
|
|
user2.destroy!
|
|
|
|
direct_message.reload
|
|
|
|
|
|
|
|
expect(direct_message.chat_channel_title_for_user(chat_channel, user1)).to eq(
|
|
|
|
"@#{I18n.t("chat.deleted_chat_username")}",
|
|
|
|
)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|