From 51ce7d54b359abf7767530b46b8f2f3e48f3921d Mon Sep 17 00:00:00 2001 From: jrfnl Date: Sun, 11 Jul 2021 01:32:14 +0200 Subject: [PATCH] Tests/reorganize: move (get|set|clear)ReplyTo tests to own file Note: this doesn't move the complete tests from the original test file, just select parts of the test methods. --- test/PHPMailer/PHPMailerTest.php | 36 ------- test/PHPMailer/ReplyToGetSetClearTest.php | 121 ++++++++++++++++++++++ 2 files changed, 121 insertions(+), 36 deletions(-) create mode 100644 test/PHPMailer/ReplyToGetSetClearTest.php diff --git a/test/PHPMailer/PHPMailerTest.php b/test/PHPMailer/PHPMailerTest.php index ac9bdfca..52d9c3d8 100644 --- a/test/PHPMailer/PHPMailerTest.php +++ b/test/PHPMailer/PHPMailerTest.php @@ -32,7 +32,6 @@ final class PHPMailerTest extends SendTestCase $this->Mail->Body = 'Here is the main body. There should be ' . 'a reply to address in this message.'; $this->Mail->Subject .= ': Low Priority'; - $this->Mail->addReplyTo('nobody@nobody.com', 'Nobody (Unit Test)'); $this->buildBody(); self::assertTrue($this->Mail->send(), $this->Mail->ErrorInfo); @@ -753,11 +752,8 @@ EOT; self::assertTrue($this->Mail->addBCC('c@example.com'), 'BCC addressing failed'); self::assertFalse($this->Mail->addBCC('c@example.com'), 'BCC duplicate addressing failed'); self::assertFalse($this->Mail->addBCC('a@example.com'), 'BCC duplicate addressing failed (2)'); - self::assertTrue($this->Mail->addReplyTo('a@example.com'), 'Replyto Addressing failed'); - self::assertFalse($this->Mail->addReplyTo('a@example..com'), 'Invalid Replyto address accepted'); $this->Mail->clearCCs(); $this->Mail->clearBCCs(); - $this->Mail->clearReplyTos(); } /** @@ -1109,7 +1105,6 @@ EOT; } $this->Mail->clearAllRecipients(); - $this->Mail->clearReplyTos(); //This file is UTF-8 encoded. Create a domain encoded in "iso-8859-1". $letter = html_entity_decode('ç', ENT_COMPAT, PHPMailer::CHARSET_ISO88591); @@ -1117,13 +1112,11 @@ EOT; $this->Mail->addAddress('test' . $domain); $this->Mail->addCC('test+cc' . $domain); $this->Mail->addBCC('test+bcc' . $domain); - $this->Mail->addReplyTo('test+replyto' . $domain); //Queued addresses are not returned by get*Addresses() before send() call. self::assertEmpty($this->Mail->getToAddresses(), 'Bad "to" recipients'); self::assertEmpty($this->Mail->getCcAddresses(), 'Bad "cc" recipients'); self::assertEmpty($this->Mail->getBccAddresses(), 'Bad "bcc" recipients'); - self::assertEmpty($this->Mail->getReplyToAddresses(), 'Bad "reply-to" recipients'); //Clear queued BCC recipient. $this->Mail->clearBCCs(); @@ -1144,11 +1137,6 @@ EOT; 'Bad "cc" recipients' ); self::assertEmpty($this->Mail->getBccAddresses(), 'Bad "bcc" recipients'); - self::assertSame( - ['test+replyto' . $domain => ['test+replyto' . $domain, '']], - $this->Mail->getReplyToAddresses(), - 'Bad "reply-to" addresses' - ); } /** @@ -1161,7 +1149,6 @@ EOT; } $this->Mail->clearAllRecipients(); - $this->Mail->clearReplyTos(); $this->Mail->CharSet = PHPMailer::CHARSET_UTF8; @@ -1173,14 +1160,6 @@ EOT; self::assertFalse($this->Mail->addAddress('test@xn--franois-xxa.ch')); self::assertFalse($this->Mail->addAddress('test@XN--FRANOIS-XXA.CH')); - self::assertTrue($this->Mail->addReplyTo('test+replyto@françois.ch')); - self::assertFalse($this->Mail->addReplyTo('test+replyto@françois.ch')); - self::assertTrue($this->Mail->addReplyTo('test+replyto@FRANÇOIS.CH')); - self::assertFalse($this->Mail->addReplyTo('test+replyto@FRANÇOIS.CH')); - self::assertTrue($this->Mail->addReplyTo('test+replyto@xn--franois-xxa.ch')); - self::assertFalse($this->Mail->addReplyTo('test+replyto@xn--franois-xxa.ch')); - self::assertFalse($this->Mail->addReplyTo('test+replyto@XN--FRANOIS-XXA.CH')); - $this->buildBody(); self::assertTrue($this->Mail->send(), $this->Mail->ErrorInfo); @@ -1190,11 +1169,6 @@ EOT; $this->Mail->getToAddresses(), 'Bad count of "to" recipients' ); - self::assertCount( - 1, - $this->Mail->getReplyToAddresses(), - 'Bad count of "reply-to" addresses' - ); } /** @@ -1247,16 +1221,6 @@ EOT; $this->assertTrue($this->Mail->addAddress('test@françois.ch')); } - public function testGivenIdnAddress_addReplyTo_returns_true() - { - if (file_exists(\PHPMAILER_INCLUDE_DIR . '/test/fakefunctions.php') === false) { - $this->markTestSkipped('/test/fakefunctions.php file not found'); - } - - include \PHPMAILER_INCLUDE_DIR . '/test/fakefunctions.php'; - $this->assertTrue($this->Mail->addReplyTo('test@françois.ch')); - } - public function testErroneousAddress_addAddress_returns_false() { $this->assertFalse($this->Mail->addAddress('mehome.com')); diff --git a/test/PHPMailer/ReplyToGetSetClearTest.php b/test/PHPMailer/ReplyToGetSetClearTest.php new file mode 100644 index 00000000..00864f6c --- /dev/null +++ b/test/PHPMailer/ReplyToGetSetClearTest.php @@ -0,0 +1,121 @@ + + * @author Andy Prevost + * @copyright 2012 - 2020 Marcus Bointon + * @copyright 2004 - 2009 Andy Prevost + * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License + */ + +namespace PHPMailer\Test\PHPMailer; + +use PHPMailer\PHPMailer\PHPMailer; +use PHPMailer\Test\SendTestCase; + +/** + * Test reply-to address setting, getting and clearing functionality. + */ +final class ReplyToGetSetClearTest extends SendTestCase +{ + + /** + * Test low priority. + */ + public function testLowPriority() + { + $this->Mail->Body = 'Here is the main body. There should be ' . + 'a reply to address in this message.'; + $this->Mail->Subject .= ': Low Priority'; + $this->Mail->addReplyTo('nobody@nobody.com', 'Nobody (Unit Test)'); + + $this->buildBody(); + self::assertTrue($this->Mail->send(), $this->Mail->ErrorInfo); + } + + /** + * Test addressing. + */ + public function testAddressing() + { + self::assertTrue($this->Mail->addReplyTo('a@example.com'), 'Replyto Addressing failed'); + self::assertFalse($this->Mail->addReplyTo('a@example..com'), 'Invalid Replyto address accepted'); + $this->Mail->clearReplyTos(); + } + + /** + * Tests CharSet and Unicode -> ASCII conversions for addresses with IDN. + */ + public function testConvertEncoding() + { + if (!PHPMailer::idnSupported()) { + self::markTestSkipped('intl and/or mbstring extensions are not available'); + } + + $this->Mail->clearReplyTos(); + + //This file is UTF-8 encoded. Create a domain encoded in "iso-8859-1". + $letter = html_entity_decode('ç', ENT_COMPAT, PHPMailer::CHARSET_ISO88591); + $domain = '@' . 'fran' . $letter . 'ois.ch'; + $this->Mail->addReplyTo('test+replyto' . $domain); + + //Queued addresses are not returned by get*Addresses() before send() call. + self::assertEmpty($this->Mail->getReplyToAddresses(), 'Bad "reply-to" recipients'); + + $this->buildBody(); + self::assertTrue($this->Mail->send(), $this->Mail->ErrorInfo); + + //Addresses with IDN are returned by get*Addresses() after send() call. + $domain = $this->Mail->punyencodeAddress($domain); + self::assertSame( + ['test+replyto' . $domain => ['test+replyto' . $domain, '']], + $this->Mail->getReplyToAddresses(), + 'Bad "reply-to" addresses' + ); + } + + /** + * Tests removal of duplicate recipients and reply-tos. + */ + public function testDuplicateIDNRemoved() + { + if (!PHPMailer::idnSupported()) { + self::markTestSkipped('intl and/or mbstring extensions are not available'); + } + + $this->Mail->clearReplyTos(); + + $this->Mail->CharSet = PHPMailer::CHARSET_UTF8; + + self::assertTrue($this->Mail->addReplyTo('test+replyto@françois.ch')); + self::assertFalse($this->Mail->addReplyTo('test+replyto@françois.ch')); + self::assertTrue($this->Mail->addReplyTo('test+replyto@FRANÇOIS.CH')); + self::assertFalse($this->Mail->addReplyTo('test+replyto@FRANÇOIS.CH')); + self::assertTrue($this->Mail->addReplyTo('test+replyto@xn--franois-xxa.ch')); + self::assertFalse($this->Mail->addReplyTo('test+replyto@xn--franois-xxa.ch')); + self::assertFalse($this->Mail->addReplyTo('test+replyto@XN--FRANOIS-XXA.CH')); + + $this->buildBody(); + self::assertTrue($this->Mail->send(), $this->Mail->ErrorInfo); + + //There should be only one "Reply-To" address. + self::assertCount( + 1, + $this->Mail->getReplyToAddresses(), + 'Bad count of "reply-to" addresses' + ); + } + + public function testGivenIdnAddress_addReplyTo_returns_true() + { + if (file_exists(\PHPMAILER_INCLUDE_DIR . '/test/fakefunctions.php') === false) { + $this->markTestSkipped('/test/fakefunctions.php file not found'); + } + + include \PHPMAILER_INCLUDE_DIR . '/test/fakefunctions.php'; + $this->assertTrue($this->Mail->addReplyTo('test@françois.ch')); + } +}