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 { MessageGenerator } = ChromeUtils.importESModule(
);
/**
* @type {EwsServer}
*/
var ewsServer;
/**
* @type {nsIMsgIncomingServer}
*/
var incomingEwsServer;
/**
* @type {GraphServer}
*/
var graphServer;
/**
* @type {nsIMsgIncomingServer}
*/
var incomingGraphServer;
/**
* @type {IExchangeClient}
*/
var ewsClient;
/**
* @type {IExchangeClient}
*/
var graphClient;
add_setup(async () => {
[ewsServer, incomingEwsServer] = setupBasicEwsTestServer({});
[graphServer, incomingGraphServer] = setupBasicGraphTestServer();
await syncFolder(incomingEwsServer, incomingEwsServer.rootFolder);
await syncFolder(incomingGraphServer, incomingGraphServer.rootFolder);
ewsClient = Cc["@mozilla.org/messenger/ews-client;1"].createInstance(
Ci.IExchangeClient
);
ewsClient.initialize(
incomingEwsServer.getStringValue("ews_url"),
incomingEwsServer,
false,
"",
"",
"",
"",
""
);
graphClient = Cc["@mozilla.org/messenger/graph-client;1"].createInstance(
Ci.IExchangeClient
);
graphClient.initialize(
incomingGraphServer.getStringValue("ews_url"),
incomingGraphServer,
false,
"",
"",
"",
"",
""
);
});
add_task(async function test_getEwsMessage() {
await getMessageTest(ewsServer, ewsClient, incomingEwsServer);
});
add_task(async function test_getGraphMessage() {
await getMessageTest(graphServer, graphClient, incomingGraphServer);
});
async function getMessageTest(mockServer, client, incomingServer) {
const generator = new MessageGenerator();
const messages = generator.makeMessages({ count: 2 });
mockServer.addMessages("inbox", messages);
const inboxFolder = incomingServer.rootFolder.getChildNamed("Inbox");
await syncFolder(incomingServer, inboxFolder);
Assert.equal(
inboxFolder.getTotalMessages(false),
2,
"Inbox should have two messages."
);
for (let i = 0; i < 2; i++) {
const first = [...inboxFolder.messages][i];
const listener = new MessageFetchListener();
client.getMessage(listener, first.getStringProperty("ewsId"));
const data = await listener.promise;
Assert.equal(data, messages[i].toMessageString());
}
}
class MessageFetchListener {
QueryInterface = ChromeUtils.generateQI(["IExchangeMessageFetchListener"]);
constructor() {
this.promise = new Promise((resolve, reject) => {
this._resolve = resolve;
this._reject = reject;
});
this.scriptableStream = Cc[
"@mozilla.org/scriptableinputstream;1"
].createInstance(Ci.nsIScriptableInputStream);
}
onFetchStart() {}
onFetchedDataAvailable(inputStream) {
const count = inputStream.available();
this.scriptableStream.init(inputStream);
this._data = this.scriptableStream.read(count);
}
onFetchStop(status) {
if (status == Cr.NS_OK) {
this._resolve(this._data);
} else {
this._reject(status);
}
}
}