# frozen_string_literal: true RSpec.describe "User menu notifications | sidebar", type: :system, js: true do fab!(:current_user) { Fabricate(:user) } let(:chat) { PageObjects::Pages::Chat.new } let(:channel) { PageObjects::Pages::ChatChannel.new } before do SiteSetting.navigation_menu = "sidebar" chat_system_bootstrap sign_in(current_user) end shared_examples "chat not available" do it "doesn’t show the chat tab" do visit("/") find(".header-dropdown-toggle.current-user").click expect(page).to have_no_css("#user-menu-button-chat-notifications") end end context "when chat is disabled" do before { SiteSetting.chat_enabled = false } include_examples "chat not available" end context "when user has chat disabled" do before { current_user.user_option.update!(chat_enabled: false) } include_examples "chat not available" end context "when mentioning" do fab!(:other_user) { Fabricate(:user) } context "when dm channel" do fab!(:dm_channel_1) { Fabricate(:direct_message_channel, users: [current_user, other_user]) } context "when @username" do it "shows a mention notification" do Jobs.run_immediately! message = Chat::ChatMessageCreator.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 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.direct_message_chat_mention.direct"), href: "/chat/c/#{other_user.username}/#{dm_channel_1.id}/#{message.id}", ) end end end context "when category channel" do fab!(:channel_1) { Fabricate(:chat_channel) } before do 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) } xit "shows a group mention notification" do message = Chat::ChatMessageCreator.create( chat_channel: channel_1, user: other_user, content: "this is fine @#{group.name}", ).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 end expect(find("#quick-access-chat-notifications")).to have_link( I18n.t( "js.notifications.popup.chat_mention.other_plain", identifier: "@#{group.name}", channel: channel_1.name, ), href: "/chat/c/#{channel_1.slug}/#{channel_1.id}/#{message.id}", ) end end context "when @username" do it "shows a mention notification" do Jobs.run_immediately! message = Chat::ChatMessageCreator.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 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}/#{message.id}", ) end end context "when @all" do xit "shows a mention notification" do message = Chat::ChatMessageCreator.create( chat_channel: channel_1, user: other_user, content: "this is fine @all", ).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 end expect(find("#quick-access-chat-notifications")).to have_link( I18n.t( "js.notifications.popup.chat_mention.other_plain", identifier: "@all", channel: channel_1.name, ), href: "/chat/c/#{channel_1.slug}/#{channel_1.id}/#{message.id}", ) end end end end context "when inviting a user" do fab!(:channel_1) { Fabricate(:chat_channel) } fab!(:other_user) { Fabricate(:user) } before { channel_1.add(current_user) } xit "shows an invitation notification" do Jobs.run_immediately! chat.visit_channel(channel_1) channel.send_message("this is fine @#{other_user.username}") find(".invite-link", wait: 5).click using_session(:user_1) do sign_in(other_user) visit("/") find(".header-dropdown-toggle.current-user").click expect(find("#user-menu-button-chat-notifications")).to have_content(1) expect(find("#quick-access-all-notifications")).to have_css(".chat-invitation.unread") end end end end