mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Dedicated route for current user notification counts (#26106)
Co-authored-by: Alan Guo Xiang Tan <gxtan1990@gmail.com>
This commit is contained in:
@@ -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!
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user