diff options
Diffstat (limited to 'comm/mail/components/im/test/browser/browser_messagesMail.js')
-rw-r--r-- | comm/mail/components/im/test/browser/browser_messagesMail.js | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/comm/mail/components/im/test/browser/browser_messagesMail.js b/comm/mail/components/im/test/browser/browser_messagesMail.js new file mode 100644 index 0000000000..6bc73c723c --- /dev/null +++ b/comm/mail/components/im/test/browser/browser_messagesMail.js @@ -0,0 +1,235 @@ +/* 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 testCollapse() { + const account = IMServices.accounts.createAccount( + "testuser", + "prpl-mochitest" + ); + account.password = "this is a test"; + account.connect(); + + await openChatTab(); + ok(BrowserTestUtils.is_visible(document.getElementById("chatPanel"))); + + const conversation = account.prplAccount.wrappedJSObject.makeDM("collapse"); + const convNode = getConversationItem(conversation); + ok(convNode); + + await EventUtils.synthesizeMouseAtCenter(convNode, {}); + + const chatConv = getChatConversationElement(conversation); + ok(chatConv, "found conversation"); + ok(BrowserTestUtils.is_visible(chatConv), "conversation visible"); + const messageParent = await getChatMessageParent(chatConv); + + await addNotice(conversation, chatConv); + + is( + messageParent.querySelector(".event-row:nth-child(1) .body").textContent, + "test notice", + "notice added to conv" + ); + + await addNotice(conversation, chatConv); + await addNotice(conversation, chatConv); + await addNotice(conversation, chatConv); + await Promise.all([ + await addNotice(conversation, chatConv), + BrowserTestUtils.waitForMutationCondition( + messageParent, + { + subtree: true, + childList: true, + attributes: true, + attributeFilter: ["class"], + }, + () => messageParent.querySelector(".hide-children") + ), + ]); + + const hiddenGroup = messageParent.querySelector(".hide-children"); + const toggle = hiddenGroup.querySelector(".eventToggle"); + ok(toggle); + ok(hiddenGroup.querySelectorAll(".event-row").length >= 5); + + toggle.click(); + await BrowserTestUtils.waitForMutationCondition( + hiddenGroup, + { + attributes: true, + attributeFilter: ["class"], + }, + () => !hiddenGroup.classList.contains("hide-children") + ); + + conversation.close(); + account.disconnect(); + IMServices.accounts.deleteAccount(account.id); +}); + +add_task(async function testGrouping() { + const account = IMServices.accounts.createAccount( + "testuser", + "prpl-mochitest" + ); + account.password = "this is a test"; + account.connect(); + + await openChatTab(); + ok( + BrowserTestUtils.is_visible(document.getElementById("chatPanel")), + "Chat tab is visible" + ); + + const conversation = account.prplAccount.wrappedJSObject.makeDM("grouping"); + const convNode = getConversationItem(conversation); + ok(convNode, "Conversation is in contacts list"); + + await EventUtils.synthesizeMouseAtCenter(convNode, {}); + + const chatConv = getChatConversationElement(conversation); + ok(chatConv, "Found conversation element"); + ok(BrowserTestUtils.is_visible(chatConv), "conversation visible"); + const messageParent = await getChatMessageParent(chatConv); + + conversation.addMessages([ + { + who: "grouping", + content: "system message", + options: { + system: true, + incoming: true, + }, + }, + { + who: "grouping", + content: "normal message", + options: { + incoming: true, + }, + }, + { + who: "grouping", + content: "another system message", + options: { + system: true, + incoming: true, + }, + }, + ]); + // Wait for at least one event. + do { + await BrowserTestUtils.waitForEvent( + chatConv.convBrowser, + "MessagesDisplayed" + ); + } while (chatConv.convBrowser.getPendingMessagesCount() > 0); + + for (let child of messageParent.children) { + isnot(child.id, "insert", "Message element is not the insert point"); + } + is( + messageParent.childElementCount, + 3, + "All three messages are their own top level element" + ); + + conversation.close(); + account.disconnect(); + IMServices.accounts.deleteAccount(account.id); +}); + +add_task(async function testSystemMessageReplacement() { + const account = IMServices.accounts.createAccount( + "testuser", + "prpl-mochitest" + ); + account.password = "this is a test"; + account.connect(); + + await openChatTab(); + ok( + BrowserTestUtils.is_visible(document.getElementById("chatPanel")), + "Chat tab is visible" + ); + + const conversation = account.prplAccount.wrappedJSObject.makeDM("replacing"); + const convNode = getConversationItem(conversation); + ok(convNode, "Conversation is in contacts list"); + + await EventUtils.synthesizeMouseAtCenter(convNode, {}); + + const chatConv = getChatConversationElement(conversation); + ok(chatConv, "Found conversation element"); + ok(BrowserTestUtils.is_visible(chatConv), "conversation visible"); + const messageParent = await getChatMessageParent(chatConv); + + conversation.addMessages([ + { + who: "replacing", + content: "system message", + options: { + system: true, + incoming: true, + remoteId: "foo", + }, + }, + { + who: "replacing", + content: "another system message", + options: { + system: true, + incoming: true, + remoteId: "bar", + }, + }, + ]); + // Wait for at least one event. + do { + await BrowserTestUtils.waitForEvent( + chatConv.convBrowser, + "MessagesDisplayed" + ); + } while (chatConv.convBrowser.getPendingMessagesCount() > 0); + + const updateTextPromise = waitForNotification(conversation, "update-text"); + conversation.updateMessage("replacing", "better system message", { + system: true, + incoming: true, + remoteId: "foo", + }); + await updateTextPromise; + await TestUtils.waitForTick(); + + is(messageParent.childElementCount, 1, "Only one message group in browser"); + is( + messageParent.firstElementChild.childElementCount, + 3, + "Has two messages plus insert inside group" + ); + const firstMessage = messageParent.firstElementChild.firstElementChild; + ok( + firstMessage.classList.contains("event-row"), + "Replacement message is an event-row" + ); + is(firstMessage.dataset.remoteId, "foo"); + is( + firstMessage.querySelector(".body").textContent, + "better system message", + "Message content was updated" + ); + + conversation.close(); + account.disconnect(); + IMServices.accounts.deleteAccount(account.id); +}); + +function addNotice(conversation, uiConversation) { + conversation.addNotice(); + return BrowserTestUtils.waitForEvent( + uiConversation.convBrowser, + "MessagesDisplayed" + ); +} |