DEV: Dedicated route for current user notification counts (#26106)

Co-authored-by: Alan Guo Xiang Tan <gxtan1990@gmail.com>
This commit is contained in:
Penar Musaraj
2024-03-15 12:08:37 -04:00
committed by GitHub
parent ad7e3e04f3
commit 8cf2f909f5
11 changed files with 399 additions and 0 deletions

View File

@@ -415,6 +415,63 @@ describe Chat::ChannelFetcher do
end
end
describe ".unreads_total" do
it "returns correct totals for DMs and mentions" do
result = described_class.unreads_total(guardian)
expect(result).to eq(0)
Fabricate(
:user_chat_channel_membership_for_dm,
chat_channel: direct_message_channel1,
user: user1,
following: true,
)
Chat::DirectMessageUser.create!(direct_message: dm_channel1, user: user1)
Chat::DirectMessageUser.create!(direct_message: dm_channel1, user: user2)
Fabricate(
:user_chat_channel_membership_for_dm,
chat_channel: direct_message_channel2,
user: user1,
following: true,
)
Chat::DirectMessageUser.create!(direct_message: dm_channel2, user: user1)
Chat::DirectMessageUser.create!(direct_message: dm_channel2, user: user2)
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)
result = described_class.unreads_total(guardian)
expect(result).to eq(2)
membership =
Fabricate(:user_chat_channel_membership, chat_channel: category_channel, user: user1)
message =
Fabricate(:chat_message, chat_channel: category_channel, message: "bonjour", user: user2)
notification =
Notification.create!(
notification_type: Notification.types[:chat_mention],
user_id: user1.id,
data: { chat_message_id: message.id, chat_channel_id: category_channel.id }.to_json,
)
Chat::UserMention.create!(notifications: [notification], user: user1, chat_message: message)
result = described_class.unreads_total(guardian)
expect(result).to eq(3) # 2 DMs + 1 mention
# mark mention as read
membership.update!(last_read_message_id: message.id)
result = described_class.unreads_total(guardian)
expect(result).to eq(2) # only 2 DMs left unread
end
end
describe ".find_with_access_check" do
it "raises NotFound if the channel does not exist" do
category_channel.destroy!

View File

@@ -0,0 +1,59 @@
# frozen_string_literal: true
RSpec.describe NotificationsController do
context "when logged in" do
fab!(:chatters) { Fabricate(:group) }
fab!(:user) { Fabricate(:user, group_ids: [chatters.id]) }
fab!(:user2) { Fabricate(:user, group_ids: [chatters.id]) }
fab!(:dm1) { Fabricate(:direct_message) }
fab!(:direct_message_channel1) { Fabricate(:direct_message_channel, chatable: dm1) }
fab!(:dm2) { Fabricate(:direct_message) }
fab!(:direct_message_channel2) { Fabricate(:direct_message_channel, chatable: dm2) }
before do
Jobs.run_immediately!
SiteSetting.chat_enabled = true
SiteSetting.chat_allowed_groups = [chatters.id]
sign_in(user)
end
def create_dm(user, channel, dm)
Fabricate(
:user_chat_channel_membership_for_dm,
chat_channel: channel,
user: user,
following: true,
)
Chat::DirectMessageUser.create!(direct_message: dm, user: user)
msg = Fabricate(:chat_message, user: user, chat_channel: channel)
channel.update!(last_message: msg)
channel.last_message.update!(created_at: 1.day.ago)
end
describe "#totals" do
it "has a total of 0 chat notifications by default" do
get "/notifications/totals.json"
expect(response.status).to eq(200)
expect(response.parsed_body["chat_notifications"]).to eq(0)
end
it "returns the correct chat notifications count for unread DMs" do
create_dm(user, direct_message_channel1, dm1)
get "/notifications/totals.json"
expect(response.status).to eq(200)
expect(response.parsed_body["chat_notifications"]).to eq(1)
create_dm(user, direct_message_channel2, dm2)
get "/notifications/totals.json"
expect(response.parsed_body["chat_notifications"]).to eq(2)
end
end
end
end