diff options
Diffstat (limited to 'comm/mail/components/im/test/browser/browser_spacesToolbarChat.js')
-rw-r--r-- | comm/mail/components/im/test/browser/browser_spacesToolbarChat.js | 255 |
1 files changed, 255 insertions, 0 deletions
diff --git a/comm/mail/components/im/test/browser/browser_spacesToolbarChat.js b/comm/mail/components/im/test/browser/browser_spacesToolbarChat.js new file mode 100644 index 0000000000..d95b5e48c0 --- /dev/null +++ b/comm/mail/components/im/test/browser/browser_spacesToolbarChat.js @@ -0,0 +1,255 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at http://mozilla.org/MPL/2.0/. */ + +add_task(async function test_spacesToolbarChatBadgeMUC() { + window.gSpacesToolbar.toggleToolbar(false); + const account = IMServices.accounts.createAccount( + "testuser", + "prpl-mochitest" + ); + account.password = "this is a test"; + account.connect(); + + if (window.chatHandler._chatButtonUpdatePending) { + await TestUtils.waitForTick(); + } + + const chatButton = document.getElementById("chatButton"); + + ok( + !chatButton.classList.contains("has-badge"), + "Initially no unread chat messages" + ); + + // Send a new message in a MUC that is not currently open. + const conversation = + account.prplAccount.wrappedJSObject.makeMUC("noSpaceBadge"); + const messagePromise = waitForNotification(conversation, "new-text"); + conversation.writeMessage("spaceBadge", "just a normal message", { + incoming: true, + }); + await messagePromise; + // Make sure nothing else was waiting to happen. + await TestUtils.waitForTick(); + + ok( + !chatButton.classList.contains("has-badge"), + "Untargeted MUC message doesn't change badge" + ); + + // Send a new targeted message in the conversation. + const unreadContainer = chatButton.querySelector(".spaces-badge-container"); + const unreadContainerText = unreadContainer.textContent; + const unreadCountChanged = TestUtils.topicObserved("unread-im-count-changed"); + conversation.writeMessage("spaceBadge", "new direct message", { + incoming: true, + containsNick: true, + }); + await unreadCountChanged; + ok(chatButton.classList.contains("has-badge"), "Unread badge is shown"); + + // Fluent doesn't immediately apply the translation, wait for it. + await TestUtils.waitForCondition( + () => unreadContainer.textContent !== unreadContainerText + ); + + is(unreadContainer.textContent, "1", "Unread count is in badge"); + ok(unreadContainer.title); + + conversation.close(); + account.disconnect(); + IMServices.accounts.deleteAccount(account.id); +}); + +add_task(async function test_spacesToolbarChatBadgeDM() { + window.gSpacesToolbar.toggleToolbar(false); + const account = IMServices.accounts.createAccount( + "testuser", + "prpl-mochitest" + ); + account.password = "this is a test"; + account.connect(); + + if (window.chatHandler._chatButtonUpdatePending) { + await TestUtils.waitForTick(); + } + + const chatButton = document.getElementById("chatButton"); + + ok( + !chatButton.classList.contains("has-badge"), + "Initially no unread chat messages" + ); + + const unreadContainer = chatButton.querySelector(".spaces-badge-container"); + if (unreadContainer.textContent !== "0") { + await BrowserTestUtils.waitForMutationCondition( + unreadContainer, + { + subtree: true, + childList: true, + characterData: true, + }, + () => unreadContainer.textContent === "0" + ); + } + + // Send a new message in a DM conversation that is not currently open. + const unreadContainerText = unreadContainer.textContent; + let unreadCountChanged = TestUtils.topicObserved("unread-im-count-changed"); + const conversation = account.prplAccount.wrappedJSObject.makeDM("spaceBadge"); + conversation.writeMessage("spaceBadge", "new direct message", { + incoming: true, + }); + await unreadCountChanged; + ok(chatButton.classList.contains("has-badge"), "Unread badge is shown"); + + // Fluent doesn't immediately apply the translation, wait for it. + await TestUtils.waitForCondition( + () => unreadContainer.textContent !== unreadContainerText + ); + + is(unreadContainer.textContent, "1", "Unread count is in badge"); + ok(unreadContainer.title); + + // Display the DM conversation. + unreadCountChanged = TestUtils.topicObserved("unread-im-count-changed"); + await openChatTab(); + const convNode = getConversationItem(conversation); + ok(convNode); + await EventUtils.synthesizeMouseAtCenter(convNode, {}); + const chatConv = getChatConversationElement(conversation); + ok(chatConv); + ok(BrowserTestUtils.is_visible(chatConv)); + await unreadCountChanged; + + ok( + !chatButton.classList.contains("has-badge"), + "Unread badge is hidden again" + ); + + conversation.close(); + account.disconnect(); + IMServices.accounts.deleteAccount(account.id); +}); + +add_task(async function test_spacesToolbarPinnedChatBadgeMUC() { + window.gSpacesToolbar.toggleToolbar(true); + const account = IMServices.accounts.createAccount( + "testuser", + "prpl-mochitest" + ); + account.password = "this is a test"; + account.connect(); + + if (window.chatHandler._chatButtonUpdatePending) { + await TestUtils.waitForTick(); + } + + const spacesPopupButtonChat = document.getElementById( + "spacesPopupButtonChat" + ); + + ok( + !spacesPopupButtonChat.classList.contains("has-badge"), + "Initially no unread chat messages" + ); + + // Send a new message in a MUC that is not currently open. + const conversation = + account.prplAccount.wrappedJSObject.makeMUC("noSpaceBadge"); + const messagePromise = waitForNotification(conversation, "new-text"); + conversation.writeMessage("spaceBadge", "just a normal message", { + incoming: true, + }); + await messagePromise; + // Make sure nothing else was waiting to happen. + await TestUtils.waitForTick(); + + ok( + !spacesPopupButtonChat.classList.contains("has-badge"), + "Untargeted MUC message doesn't change badge" + ); + + // Send a new targeted message in the conversation. + const unreadCountChanged = TestUtils.topicObserved("unread-im-count-changed"); + conversation.writeMessage("spaceBadge", "new direct message", { + incoming: true, + containsNick: true, + }); + await unreadCountChanged; + ok( + spacesPopupButtonChat.classList.contains("has-badge"), + "Unread badge is shown" + ); + ok( + document + .getElementById("spacesPinnedButton") + .classList.contains("has-badge"), + "Unread state is propagated to pinned menu button" + ); + + conversation.close(); + account.disconnect(); + IMServices.accounts.deleteAccount(account.id); +}); + +add_task(async function test_spacesToolbarPinnedChatBadgeDM() { + window.gSpacesToolbar.toggleToolbar(true); + const account = IMServices.accounts.createAccount( + "testuser", + "prpl-mochitest" + ); + account.password = "this is a test"; + account.connect(); + + if (window.chatHandler._chatButtonUpdatePending) { + await TestUtils.waitForTick(); + } + + const spacesPopupButtonChat = document.getElementById( + "spacesPopupButtonChat" + ); + const spacesPinnedButton = document.getElementById("spacesPinnedButton"); + + ok( + !spacesPopupButtonChat.classList.contains("has-badge"), + "Initially no unread chat messages" + ); + ok(!spacesPinnedButton.classList.contains("has-badge")); + + // Send a new message in a DM conversation that is not currently open. + let unreadCountChanged = TestUtils.topicObserved("unread-im-count-changed"); + const conversation = account.prplAccount.wrappedJSObject.makeDM("spaceBadge"); + conversation.writeMessage("spaceBadge", "new direct message", { + incoming: true, + }); + await unreadCountChanged; + ok( + spacesPopupButtonChat.classList.contains("has-badge"), + "Unread badge is shown" + ); + ok(spacesPinnedButton.classList.contains("has-badge")); + + // Display the DM conversation. + unreadCountChanged = TestUtils.topicObserved("unread-im-count-changed"); + await openChatTab(); + const convNode = getConversationItem(conversation); + ok(convNode); + await EventUtils.synthesizeMouseAtCenter(convNode, {}); + const chatConv = getChatConversationElement(conversation); + ok(chatConv); + ok(BrowserTestUtils.is_visible(chatConv)); + await unreadCountChanged; + + ok( + !spacesPopupButtonChat.classList.contains("has-badge"), + "Unread badge is hidden again" + ); + ok(!spacesPinnedButton.classList.contains("has-badge")); + + conversation.close(); + account.disconnect(); + IMServices.accounts.deleteAccount(account.id); +}); |