summaryrefslogtreecommitdiffstats
path: root/comm/mailnews/local/test/unit/test_pop3Filters.js
diff options
context:
space:
mode:
Diffstat (limited to 'comm/mailnews/local/test/unit/test_pop3Filters.js')
-rw-r--r--comm/mailnews/local/test/unit/test_pop3Filters.js114
1 files changed, 114 insertions, 0 deletions
diff --git a/comm/mailnews/local/test/unit/test_pop3Filters.js b/comm/mailnews/local/test/unit/test_pop3Filters.js
new file mode 100644
index 0000000000..53ef182a6d
--- /dev/null
+++ b/comm/mailnews/local/test/unit/test_pop3Filters.js
@@ -0,0 +1,114 @@
+/* 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/. */
+
+var { PromiseTestUtils } = ChromeUtils.import(
+ "resource://testing-common/mailnews/PromiseTestUtils.jsm"
+);
+
+let [daemon, server, handler] = setupServerDaemon();
+server.start();
+registerCleanupFunction(() => {
+ server.stop();
+});
+
+let incomingServer = createPop3ServerAndLocalFolders(server.port);
+
+/**
+ * Inject a message to the server and do a GetNewMail for the incomingServer.
+ */
+async function getNewMail() {
+ daemon.setMessages(["message1.eml", "message3.eml"]);
+ let urlListener = new PromiseTestUtils.PromiseUrlListener();
+ MailServices.pop3.GetNewMail(
+ null,
+ urlListener,
+ localAccountUtils.inboxFolder,
+ incomingServer
+ );
+ return urlListener.promise;
+}
+
+/**
+ * Test DeleteFromPop3Server filter should send DELE for matched message.
+ */
+add_task(async function testDeleteFromPop3Server() {
+ // Turn on leaveMessagesOnServer, so that DELE would not be sent normally.
+ incomingServer.leaveMessagesOnServer = true;
+
+ // Create a DeleteFromPop3Server filter.
+ let filterList = incomingServer.getFilterList(null);
+ let filter = filterList.createFilter("deleteFromServer");
+
+ let searchTerm = filter.createTerm();
+ searchTerm.attrib = Ci.nsMsgSearchAttrib.Subject;
+ searchTerm.op = Ci.nsMsgSearchOp.Contains;
+ let value = searchTerm.value;
+ value.str = "mail 2";
+ searchTerm.value = value;
+ filter.appendTerm(searchTerm);
+
+ let action = filter.createAction();
+ action.type = Ci.nsMsgFilterAction.DeleteFromPop3Server;
+ filter.appendAction(action);
+
+ filter.enabled = true;
+ filterList.insertFilterAt(0, filter);
+
+ await getNewMail();
+ do_check_transaction(server.playTransaction(), [
+ "CAPA",
+ "AUTH PLAIN",
+ "STAT",
+ "LIST",
+ "UIDL",
+ "RETR 1", // message1.eml doesn't match the filter, no DELE.
+ "RETR 2",
+ "DELE 2", // message3.eml matches the filter, DELE was sent.
+ ]);
+
+ // MailServices.accounts.removeIncomingServer(incomingServer, false);
+ filterList.removeFilterAt(0);
+});
+
+/**
+ * Test FetchBodyFromPop3Server filter should send RETR for matched message.
+ */
+add_task(async function testFetchBodyFromPop3Server() {
+ incomingServer.leaveMessagesOnServer = true;
+ // Turn on leaveMessagesOnServer, so that RETR would not be sent normally.
+ incomingServer.headersOnly = true;
+
+ // Create a FetchBodyFromPop3Server filter.
+ let filterList = incomingServer.getFilterList(null);
+ let filter = filterList.createFilter("fetchBodyFromServer");
+
+ let searchTerm = filter.createTerm();
+ searchTerm.attrib = Ci.nsMsgSearchAttrib.Subject;
+ searchTerm.op = Ci.nsMsgSearchOp.Contains;
+ let value = searchTerm.value;
+ value.str = "mail 2";
+ searchTerm.value = value;
+ filter.appendTerm(searchTerm);
+
+ let action = filter.createAction();
+ action.type = Ci.nsMsgFilterAction.FetchBodyFromPop3Server;
+ filter.appendAction(action);
+
+ filter.enabled = true;
+ filterList.insertFilterAt(0, filter);
+
+ await getNewMail();
+ do_check_transaction(server.playTransaction(), [
+ "CAPA",
+ "AUTH PLAIN",
+ "STAT",
+ "LIST",
+ "UIDL",
+ "TOP 1 0", // message1.eml doesn't match the filter, no RETR.
+ "TOP 2 0",
+ "RETR 2", // message3.eml matches the filter, RETR was sent.
+ ]);
+
+ filterList.removeFilterAt(0);
+});