Revision control
Copy as Markdown
Other Tools
/* 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,
var { EwsServer, RemoteFolder } = ChromeUtils.importESModule(
);
var { localAccountUtils } = ChromeUtils.importESModule(
);
var { MessageGenerator } = ChromeUtils.importESModule(
);
var { TestUtils } = ChromeUtils.importESModule(
);
var incomingServer;
var ewsServer;
const generator = new MessageGenerator();
add_setup(async function () {
[ewsServer, incomingServer] = setupBasicEwsTestServer({
version: "Exchange2010",
});
});
/**
* Tests that marking messages as junk works when the server does not support
* the `MarkAsJunk` operation.
*
* This means marking as junk should result in a `MoveItem` operation from the
* original folder to the junk folder, and unmarking as junk should result in a
* `MoveItem` operation from the junk folder to the inbox folder.
*/
add_task(async function test_mark_as_junk() {
// Create a new folder for our test on the server.
const originalFolderName = "markAsJunkLegacy";
ewsServer.appendRemoteFolder(
new RemoteFolder(originalFolderName, "root", originalFolderName, null)
);
const rootFolder = incomingServer.rootFolder;
await syncFolder(incomingServer, rootFolder);
const inboxFolder = rootFolder.getChildNamed("Inbox");
Assert.ok(!!inboxFolder, "Inbox folder should exist.");
const junkFolder = rootFolder.getChildNamed("Junk");
Assert.ok(!!junkFolder, "Junk folder should exist");
const originalFolder = rootFolder.getChildNamed(originalFolderName);
Assert.ok(!!junkFolder, `the ${originalFolderName} folder should exist`);
// Add messages to the inbox.
const junkMessages = generator.makeMessages({ count: 2 });
ewsServer.addNewItemOrMoveItemToFolder(
"junk_message_1",
originalFolderName,
junkMessages[0]
);
ewsServer.addNewItemOrMoveItemToFolder(
"junk_message_2",
originalFolderName,
junkMessages[1]
);
// Ensure we have the right amount of messages to start with.
await syncFolder(incomingServer, inboxFolder);
await syncFolder(incomingServer, junkFolder);
await syncFolder(incomingServer, originalFolder);
Assert.equal(
originalFolder.getTotalMessages(false),
2,
"Should start with two messages in the source folder."
);
Assert.equal(
inboxFolder.getTotalMessages(false),
0,
"Should start with two messages in the inbox folder."
);
Assert.equal(
junkFolder.getTotalMessages(false),
0,
"Should start with two messages in the junk folder."
);
const findJunkMessages = folder => {
const messages = [...folder.messages];
return messages.filter(header =>
header.getStringProperty("ewsId").startsWith("junk_message_")
);
};
// Identify the messages for our test, and mark them as junk. Since we're on a
// version older than Exchange Server 2013, this will result in a `MoveItem`
// operation (from the inbox to the junk folder) rather than `MarkAsJunk`.
const junkMessageKeys = findJunkMessages(originalFolder).map(
header => header.messageKey
);
Assert.equal(
junkMessageKeys.length,
2,
"Should have found two junk messages."
);
const junkListener = new PromiseTestUtils.PromiseCopyListener();
originalFolder.handleViewCommand(
Ci.nsMsgViewCommandType.junk,
junkMessageKeys,
null,
junkListener
);
await junkListener.promise;
await TestUtils.waitForCondition(() => {
return findJunkMessages(originalFolder).length == 0;
}, "Waiting for inbox to empty.");
await TestUtils.waitForCondition(() => {
return findJunkMessages(junkFolder).length == 2;
}, "Waiting for junk messages to appear in junk folder.");
// Unjunk the first message and make sure it moved back to the inbox.
const newMessageKeys = findJunkMessages(junkFolder).map(m => m.messageKey);
const unjunkListener = new PromiseTestUtils.PromiseCopyListener();
junkFolder.handleViewCommand(
Ci.nsMsgViewCommandType.unjunk,
[newMessageKeys[0]],
null,
unjunkListener
);
await unjunkListener.promise;
await TestUtils.waitForCondition(() => {
return findJunkMessages(inboxFolder).length == 1;
}, "Waiting for unjunked message to appear in inbox.");
await TestUtils.waitForCondition(() => {
return findJunkMessages(junkFolder).length == 1;
}, "Waiting for unjunked message to disappear from junk folder.");
});