diff options
Diffstat (limited to '')
-rw-r--r-- | comm/mailnews/compose/test/unit/test_sendMessageLater3.js | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/comm/mailnews/compose/test/unit/test_sendMessageLater3.js b/comm/mailnews/compose/test/unit/test_sendMessageLater3.js new file mode 100644 index 0000000000..08e32481c6 --- /dev/null +++ b/comm/mailnews/compose/test/unit/test_sendMessageLater3.js @@ -0,0 +1,188 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/** + * Protocol tests for SMTP. + * + * For trying to send a message later with no server connected, this test + * verifies: + * - A correct status response. + * - A correct state at the end of attempting to send. + */ + +/* import-globals-from ../../../test/resources/alertTestUtils.js */ +load("../../../resources/alertTestUtils.js"); + +var { MailServices } = ChromeUtils.import( + "resource:///modules/MailServices.jsm" +); + +var originalData; +var identity = null; +var testFile = do_get_file("data/429891_testcase.eml"); + +var kSender = "from@foo.invalid"; +var kTo = "to@foo.invalid"; + +var msgSendLater = Cc["@mozilla.org/messengercompose/sendlater;1"].getService( + Ci.nsIMsgSendLater +); + +// for alertTestUtils.js +function alertPS(parent, aDialogTitle, aText) { + dump("Hiding Alert {\n" + aText + "\n} End Alert\n"); +} + +// This listener handles the post-sending of the actual message and checks the +// sequence and ensures the data is correct. +function msll() {} + +msll.prototype = { + _initialTotal: 0, + _errorRaised: false, + + // nsIMsgSendLaterListener + onStartSending(aTotal) { + this._initialTotal = 1; + Assert.equal(msgSendLater.sendingMessages, true); + }, + onMessageStartSending( + aCurrentMessage, + aTotalMessageCount, + aMessageHeader, + aIdentity + ) {}, + onMessageSendProgress( + aCurrentMessage, + aTotalMessageCount, + aMessageSendPercent, + aMessageCopyPercent + ) {}, + onMessageSendError(aCurrentMessage, aMessageHeader, aStatus, aMsg) { + this._errorRaised = true; + }, + onStopSending(aStatus, aMsg, aTotal, aSuccessful) { + print("msll onStopSending\n"); + + // NS_ERROR_SMTP_SEND_FAILED_REFUSED is 2153066798 + Assert.equal(aStatus, 2153066798); + Assert.equal(aTotal, 1); + Assert.equal(aSuccessful, 0); + Assert.equal(this._initialTotal, 1); + Assert.equal(this._errorRaised, true); + Assert.equal(msgSendLater.sendingMessages, false); + // Check that the send later service still thinks we have messages to send. + Assert.equal(msgSendLater.hasUnsentMessages(identity), true); + + do_test_finished(); + }, +}; + +/* exported OnStopCopy */ +// for head_compose.js +function OnStopCopy(aStatus) { + Assert.equal(aStatus, 0); + + // Check this is false before we start sending + Assert.equal(msgSendLater.sendingMessages, false); + + let folder = msgSendLater.getUnsentMessagesFolder(identity); + + // Check that the send later service thinks we have messages to send. + Assert.equal(msgSendLater.hasUnsentMessages(identity), true); + + // Check we have a message in the unsent message folder + Assert.equal(folder.getTotalMessages(false), 1); + + // Now do a comparison of what is in the unsent mail folder + let msgData = mailTestUtils.loadMessageToString( + folder, + mailTestUtils.firstMsgHdr(folder) + ); + + // Skip the headers etc that mailnews adds + var pos = msgData.indexOf("From:"); + Assert.notEqual(pos, -1); + + msgData = msgData.substr(pos); + + // Check the data is matching. + Assert.equal(originalData, msgData); + + do_timeout(0, sendMessageLater); +} + +// This function does the actual send later +function sendMessageLater() { + // No server for this test, just attempt to send unsent and wait. + var messageListener = new msll(); + + msgSendLater.addListener(messageListener); + + // Send the unsent message + msgSendLater.sendUnsentMessages(identity); +} + +add_task(async function run_the_test() { + registerAlertTestUtils(); + + // Test file - for bug 429891 + originalData = await IOUtils.readUTF8(testFile.path); + + // Ensure we have a local mail account, an normal account and appropriate + // servers and identities. + localAccountUtils.loadLocalMailAccount(); + + // Check that the send later service thinks we don't have messages to send. + Assert.equal(msgSendLater.hasUnsentMessages(identity), false); + + MailServices.accounts.setSpecialFolders(); + + let account = MailServices.accounts.createAccount(); + let incomingServer = MailServices.accounts.createIncomingServer( + "test", + "localhost", + "pop3" + ); + + var smtpServer = getBasicSmtpServer(); + identity = getSmtpIdentity(kSender, smtpServer); + + account.addIdentity(identity); + account.defaultIdentity = identity; + account.incomingServer = incomingServer; + MailServices.accounts.defaultAccount = account; + + localAccountUtils.rootFolder.createLocalSubfolder("Sent"); + + identity.doFcc = false; + + // Now prepare to actually "send" the message later, i.e. dump it in the + // unsent messages folder. + + var compFields = Cc[ + "@mozilla.org/messengercompose/composefields;1" + ].createInstance(Ci.nsIMsgCompFields); + + compFields.from = identity.email; + compFields.to = kTo; + + var msgSend = Cc["@mozilla.org/messengercompose/send;1"].createInstance( + Ci.nsIMsgSend + ); + + msgSend.sendMessageFile( + identity, + "", + compFields, + testFile, + false, + false, + Ci.nsIMsgSend.nsMsgQueueForLater, + null, + copyListener, + null, + null + ); + + // Now we wait till we get copy notification of completion. + do_test_pending(); +}); |