summaryrefslogtreecommitdiffstats
path: root/comm/mail/components/im/test/browser/browser_requestNotifications.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mail/components/im/test/browser/browser_requestNotifications.js')
-rw-r--r--comm/mail/components/im/test/browser/browser_requestNotifications.js350
1 files changed, 350 insertions, 0 deletions
diff --git a/comm/mail/components/im/test/browser/browser_requestNotifications.js b/comm/mail/components/im/test/browser/browser_requestNotifications.js
new file mode 100644
index 0000000000..62128add8b
--- /dev/null
+++ b/comm/mail/components/im/test/browser/browser_requestNotifications.js
@@ -0,0 +1,350 @@
+/* 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 testGrantingBuddyRequest() {
+ const account = IMServices.accounts.createAccount(
+ "testuser",
+ "prpl-mochitest"
+ );
+ const prplAccount = account.prplAccount.wrappedJSObject;
+ account.password = "this is a test";
+ account.connect();
+
+ await openChatTab();
+ ok(BrowserTestUtils.is_visible(document.getElementById("chatPanel")));
+
+ const notificationTopic = TestUtils.topicObserved(
+ "buddy-authorization-request"
+ );
+ const requestPromise = new Promise((resolve, reject) => {
+ prplAccount.addBuddyRequest("test-user", resolve, reject);
+ });
+ const [request] = await notificationTopic;
+ is(request.userName, "test-user");
+ is(request.account.id, account.id);
+ await TestUtils.waitForTick();
+
+ const notificationBox = window.chatHandler.msgNotificationBar;
+ const value = "buddy-auth-request-" + request.account.id + request.userName;
+ const notification = notificationBox.getNotificationWithValue(value);
+ ok(notification, "notification shown");
+ ok(
+ BrowserTestUtils.is_hidden(notification.closeButton),
+ "Can't dismiss without interacting"
+ );
+ const closePromise = new Promise(resolve => {
+ notification.eventCallback = event => {
+ resolve();
+ };
+ });
+
+ EventUtils.synthesizeMouseAtCenter(
+ notification.buttonContainer.firstElementChild,
+ {}
+ );
+ await requestPromise;
+
+ await closePromise;
+ ok(!notificationBox.getNotificationWithValue(value), "notification closed");
+
+ account.disconnect();
+ IMServices.accounts.deleteAccount(account.id);
+});
+
+add_task(async function testCancellingBuddyRequest() {
+ const account = IMServices.accounts.createAccount(
+ "testuser",
+ "prpl-mochitest"
+ );
+ const prplAccount = account.prplAccount.wrappedJSObject;
+ account.password = "this is a test";
+ account.connect();
+
+ await openChatTab();
+ ok(BrowserTestUtils.is_visible(document.getElementById("chatPanel")));
+
+ const notificationTopic = TestUtils.topicObserved(
+ "buddy-authorization-request"
+ );
+ prplAccount.addBuddyRequest(
+ "test-user",
+ () => {
+ ok(false, "request was granted");
+ },
+ () => {
+ ok(false, "request was denied");
+ }
+ );
+ const [request] = await notificationTopic;
+ is(request.userName, "test-user");
+ is(request.account.id, account.id);
+
+ const notificationBox = window.chatHandler.msgNotificationBar;
+ const value = "buddy-auth-request-" + request.account.id + request.userName;
+ const notification = notificationBox.getNotificationWithValue(value);
+ ok(notification, "notification shown");
+ const closePromise = new Promise(resolve => {
+ notification.eventCallback = event => {
+ resolve();
+ };
+ });
+
+ const cancelTopic = TestUtils.topicObserved(
+ "buddy-authorization-request-canceled"
+ );
+ prplAccount.cancelBuddyRequest("test-user");
+ const [canceledRequest] = await cancelTopic;
+ is(canceledRequest.userName, request.userName);
+ is(canceledRequest.account.id, request.account.id);
+
+ await closePromise;
+ ok(!notificationBox.getNotificationWithValue(value), "notification closed");
+
+ account.disconnect();
+ IMServices.accounts.deleteAccount(account.id);
+});
+
+add_task(async function testDenyingBuddyRequest() {
+ const account = IMServices.accounts.createAccount(
+ "testuser",
+ "prpl-mochitest"
+ );
+ const prplAccount = account.prplAccount.wrappedJSObject;
+ account.password = "this is a test";
+ account.connect();
+
+ await openChatTab();
+ ok(BrowserTestUtils.is_visible(document.getElementById("chatPanel")));
+
+ const notificationTopic = TestUtils.topicObserved(
+ "buddy-authorization-request"
+ );
+ const requestPromise = new Promise((resolve, reject) => {
+ prplAccount.addBuddyRequest("test-user", reject, resolve);
+ });
+ const [request] = await notificationTopic;
+ is(request.userName, "test-user");
+ is(request.account.id, account.id);
+
+ const notificationBox = window.chatHandler.msgNotificationBar;
+ const value = "buddy-auth-request-" + request.account.id + request.userName;
+ const notification = notificationBox.getNotificationWithValue(value);
+ ok(notification, "notification shown");
+ const closePromise = new Promise(resolve => {
+ notification.eventCallback = event => {
+ resolve();
+ };
+ });
+
+ EventUtils.synthesizeMouseAtCenter(
+ notification.buttonContainer.lastElementChild,
+ {}
+ );
+ await requestPromise;
+
+ await closePromise;
+ ok(!notificationBox.getNotificationWithValue(value), "notification closed");
+
+ account.disconnect();
+ IMServices.accounts.deleteAccount(account.id);
+});
+
+add_task(async function testGrantingChatRequest() {
+ const account = IMServices.accounts.createAccount(
+ "testuser",
+ "prpl-mochitest"
+ );
+ const prplAccount = account.prplAccount.wrappedJSObject;
+ account.password = "this is a test";
+ account.connect();
+
+ await openChatTab();
+ ok(BrowserTestUtils.is_visible(document.getElementById("chatPanel")));
+
+ const requestTopic = TestUtils.topicObserved("conv-authorization-request");
+ const requestPromise = new Promise((resolve, reject) => {
+ prplAccount.addChatRequest("test-chat", resolve, reject);
+ });
+ const [request] = await requestTopic;
+ is(request.conversationName, "test-chat");
+ is(request.account.id, account.id);
+
+ const notificationBox = window.chatHandler.msgNotificationBar;
+ const value =
+ "conv-auth-request-" + request.account.id + request.conversationName;
+ const notification = notificationBox.getNotificationWithValue(value);
+ ok(notification, "notification shown");
+ ok(
+ BrowserTestUtils.is_hidden(notification.closeButton),
+ "Can't dismiss without interacting"
+ );
+ const closePromise = new Promise(resolve => {
+ notification.eventCallback = event => {
+ resolve();
+ };
+ });
+
+ EventUtils.synthesizeMouseAtCenter(
+ notification.buttonContainer.firstElementChild,
+ {}
+ );
+ await requestPromise;
+ const result = await request.completePromise;
+ ok(result);
+
+ await closePromise;
+ ok(!notificationBox.getNotificationWithValue(value), "notification closed");
+
+ account.disconnect();
+ IMServices.accounts.deleteAccount(account.id);
+});
+
+add_task(async function testCancellingChatRequest() {
+ const account = IMServices.accounts.createAccount(
+ "testuser",
+ "prpl-mochitest"
+ );
+ const prplAccount = account.prplAccount.wrappedJSObject;
+ account.password = "this is a test";
+ account.connect();
+
+ await openChatTab();
+ ok(
+ BrowserTestUtils.is_visible(document.getElementById("chatPanel")),
+ "chat tab visible"
+ );
+
+ const requestTopic = TestUtils.topicObserved("conv-authorization-request");
+ prplAccount.addChatRequest(
+ "test-chat",
+ () => {
+ ok(false, "chat request was granted");
+ },
+ () => {
+ ok(false, "chat request was denied");
+ }
+ );
+ const [request] = await requestTopic;
+ is(request.conversationName, "test-chat", "conversation name matches");
+ is(request.account.id, account.id, "account id matches");
+
+ const notificationBox = window.chatHandler.msgNotificationBar;
+ const value =
+ "conv-auth-request-" + request.account.id + request.conversationName;
+ const notification = notificationBox.getNotificationWithValue(value);
+ ok(notification, "notification shown");
+ const closePromise = new Promise(resolve => {
+ notification.eventCallback = event => {
+ resolve();
+ };
+ });
+
+ prplAccount.cancelChatRequest("test-chat");
+ await Assert.rejects(
+ request.completePromise,
+ /Cancelled/,
+ "completePromise is rejected to indicate cancellation"
+ );
+
+ await closePromise;
+ ok(!notificationBox.getNotificationWithValue(value), "notification closed");
+
+ account.disconnect();
+ IMServices.accounts.deleteAccount(account.id);
+});
+
+add_task(async function testDenyingChatRequest() {
+ const account = IMServices.accounts.createAccount(
+ "testuser",
+ "prpl-mochitest"
+ );
+ const prplAccount = account.prplAccount.wrappedJSObject;
+ account.password = "this is a test";
+ account.connect();
+
+ await openChatTab();
+ ok(BrowserTestUtils.is_visible(document.getElementById("chatPanel")));
+
+ const requestTopic = TestUtils.topicObserved("conv-authorization-request");
+ const requestPromise = new Promise((resolve, reject) => {
+ prplAccount.addChatRequest("test-chat", reject, resolve);
+ });
+ const [request] = await requestTopic;
+ is(request.conversationName, "test-chat");
+ is(request.account.id, account.id);
+ ok(request.canDeny);
+
+ const notificationBox = window.chatHandler.msgNotificationBar;
+ const value =
+ "conv-auth-request-" + request.account.id + request.conversationName;
+ const notification = notificationBox.getNotificationWithValue(value);
+ ok(notification, "notification shown");
+ const closePromise = new Promise(resolve => {
+ notification.eventCallback = event => {
+ resolve();
+ };
+ });
+
+ EventUtils.synthesizeMouseAtCenter(
+ notification.buttonContainer.lastElementChild,
+ {}
+ );
+ await requestPromise;
+ const result = await request.completePromise;
+ ok(!result);
+
+ await closePromise;
+ ok(!notificationBox.getNotificationWithValue(value), "notification closed");
+
+ account.disconnect();
+ IMServices.accounts.deleteAccount(account.id);
+});
+
+add_task(async function testUndenyableChatRequest() {
+ const account = IMServices.accounts.createAccount(
+ "testuser",
+ "prpl-mochitest"
+ );
+ const prplAccount = account.prplAccount.wrappedJSObject;
+ account.password = "this is a test";
+ account.connect();
+
+ await openChatTab();
+ ok(BrowserTestUtils.is_visible(document.getElementById("chatPanel")));
+
+ const requestTopic = TestUtils.topicObserved("conv-authorization-request");
+ const requestPromise = new Promise(resolve => {
+ prplAccount.addChatRequest("test-chat", resolve);
+ });
+ const [request] = await requestTopic;
+ is(request.conversationName, "test-chat");
+ is(request.account.id, account.id);
+ ok(!request.canDeny);
+
+ const notificationBox = window.chatHandler.msgNotificationBar;
+ const value =
+ "conv-auth-request-" + request.account.id + request.conversationName;
+ const notification = notificationBox.getNotificationWithValue(value);
+ ok(notification, "notification shown");
+ const closePromise = new Promise(resolve => {
+ notification.eventCallback = event => {
+ resolve();
+ };
+ });
+ is(notification.buttonContainer.children.length, 1);
+
+ EventUtils.synthesizeMouseAtCenter(
+ notification.buttonContainer.firstElementChild,
+ {}
+ );
+ await requestPromise;
+ const result = await request.completePromise;
+ ok(result);
+
+ await closePromise;
+ ok(!notificationBox.getNotificationWithValue(value), "notification closed");
+
+ account.disconnect();
+ IMServices.accounts.deleteAccount(account.id);
+});