summaryrefslogtreecommitdiffstats
path: root/comm/mail/components/im/test/browser/browser_messagesMail.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/components/im/test/browser/browser_messagesMail.js')
-rw-r--r--comm/mail/components/im/test/browser/browser_messagesMail.js235
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"
+ );
+}