diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /comm/mailnews/compose/test/unit/test_createAndSendMessage.js | |
parent | Initial commit. (diff) | |
download | thunderbird-upstream.tar.xz thunderbird-upstream.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'comm/mailnews/compose/test/unit/test_createAndSendMessage.js')
-rw-r--r-- | comm/mailnews/compose/test/unit/test_createAndSendMessage.js | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/comm/mailnews/compose/test/unit/test_createAndSendMessage.js b/comm/mailnews/compose/test/unit/test_createAndSendMessage.js new file mode 100644 index 0000000000..41daecf2cc --- /dev/null +++ b/comm/mailnews/compose/test/unit/test_createAndSendMessage.js @@ -0,0 +1,170 @@ +/* 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/. */ + +/** + * Test createAndSendMessage creates a mail file when not using the editor. + */ + +var server; +var sentFolder; +const originalData = "createAndSendMessage utf-8 test åäöÅÄÖ"; +// This is the originalData converted to a byte string. +const expectedData = "createAndSendMessage utf-8 test åäöÃ\x85Ã\x84Ã\x96"; +const expectedContentTypeHeaders = + "Content-Type: text/plain; charset=UTF-8; format=flowed\r\nContent-Transfer-Encoding: 8bit\r\n\r\n"; +var finished = false; + +var kSender = "from@foo.invalid"; +var kTo = "to@foo.invalid"; + +function checkData(msgData) { + // Skip the headers etc that mailnews adds + var pos = msgData.indexOf("Content-Type:"); + Assert.notEqual(pos, -1); + + msgData = msgData.substr(pos); + + Assert.equal(msgData, expectedContentTypeHeaders + expectedData + "\r\n"); +} + +function MessageListener() {} + +MessageListener.prototype = { + // nsIMsgSendListener + onStartSending(aMsgID, aMsgSize) {}, + onProgress(aMsgID, aProgress, aProgressMax) {}, + onStatus(aMsgID, aMsg) {}, + onStopSending(aMsgID, aStatus, aMsg, aReturnFile) { + try { + Assert.equal(aStatus, 0); + + // Compare data file to what the server received + checkData(server._daemon.post); + } catch (e) { + do_throw(e); + } finally { + server.stop(); + + var thread = gThreadManager.currentThread; + while (thread.hasPendingEvents()) { + thread.processNextEvent(false); + } + } + }, + onGetDraftFolderURI(aMsgID, aFolderURI) {}, + onSendNotPerformed(aMsgID, aStatus) {}, + onTransportSecurityError(msgID, status, secInfo, location) {}, + + // nsIMsgCopyServiceListener + OnStartCopy() {}, + OnProgress(aProgress, aProgressMax) {}, + SetMessageKey(aKey) {}, + GetMessageId(aMessageId) {}, + OnStopCopy(aStatus) { + Assert.equal(aStatus, 0); + try { + // Now do a comparison of what is in the sent mail folder + let msgData = mailTestUtils.loadMessageToString( + sentFolder, + mailTestUtils.firstMsgHdr(sentFolder) + ); + + checkData(msgData); + } catch (e) { + do_throw(e); + } finally { + finished = true; + do_test_finished(); + } + }, + + // QueryInterface + QueryInterface: ChromeUtils.generateQI([ + "nsIMsgSendListener", + "nsIMsgCopyServiceListener", + ]), +}; + +/** + * Call createAndSendMessage, expect onStopSending to be called. + */ +add_task(async function testCreateAndSendMessage() { + server = setupServerDaemon(); + + // Ensure we have at least one mail account + localAccountUtils.loadLocalMailAccount(); + + MailServices.accounts.setSpecialFolders(); + + server.start(); + var smtpServer = getBasicSmtpServer(server.port); + var identity = getSmtpIdentity(kSender, smtpServer); + + sentFolder = localAccountUtils.rootFolder.createLocalSubfolder("Sent"); + + Assert.equal(identity.doFcc, true); + + var msgSend = Cc["@mozilla.org/messengercompose/send;1"].createInstance( + Ci.nsIMsgSend + ); + + // Handle the server in a try/catch/finally loop so that we always will stop + // the server if something fails. + try { + // A test to check that we are sending files correctly, including checking + // what the server receives and what we output. + test = "sendMessageFile"; + + // Msg Comp Fields + + var compFields = Cc[ + "@mozilla.org/messengercompose/composefields;1" + ].createInstance(Ci.nsIMsgCompFields); + + compFields.from = identity.email; + compFields.to = kTo; + + var messageListener = new MessageListener(); + + msgSend.createAndSendMessage( + null, + identity, + "", + compFields, + false, + false, + Ci.nsIMsgSend.nsMsgDeliverNow, + null, + "text/plain", + // The following parameter is the message body, test that utf-8 is handled + // correctly. + originalData, + null, + null, + messageListener, + null, + null, + Ci.nsIMsgCompType.New + ); + + server.performTest(); + + do_timeout(10000, function () { + if (!finished) { + do_throw("Notifications of message send/copy not received"); + } + }); + + do_test_pending(); + } catch (e) { + do_throw(e); + } finally { + server.stop(); + + var thread = gThreadManager.currentThread; + while (thread.hasPendingEvents()) { + thread.processNextEvent(true); + } + } +}); |