diff options
Diffstat (limited to 'tests/lib/Mail/MessageTest.php')
-rw-r--r-- | tests/lib/Mail/MessageTest.php | 297 |
1 files changed, 168 insertions, 129 deletions
diff --git a/tests/lib/Mail/MessageTest.php b/tests/lib/Mail/MessageTest.php index f30630824fc..18ef9793b5b 100644 --- a/tests/lib/Mail/MessageTest.php +++ b/tests/lib/Mail/MessageTest.php @@ -1,33 +1,55 @@ <?php + /** - * Copyright (c) 2014 Lukas Reschke <lukas@owncloud.com> - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. + * SPDX-FileCopyrightText: 2018-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later */ namespace Test\Mail; use OC\Mail\Message; +use OCP\Mail\Headers\AutoSubmitted; use OCP\Mail\IEMailTemplate; -use Swift_Message; +use PHPUnit\Framework\MockObject\MockObject; +use Symfony\Component\Mime\Address; +use Symfony\Component\Mime\Email; +use Symfony\Component\Mime\Exception\RfcComplianceException; +use Symfony\Component\Mime\Header\HeaderInterface; +use Symfony\Component\Mime\Header\Headers; use Test\TestCase; class MessageTest extends TestCase { - /** @var Swift_Message */ - private $swiftMessage; + /** @var Email */ + private $symfonyEmail; /** @var Message */ private $message; /** * @return array */ - public function mailAddressProvider() { + public static function mailAddressProvider(): array { return [ - [['lukas@owncloud.com' => 'Lukas Reschke'], ['lukas@owncloud.com' => 'Lukas Reschke']], - [['lukas@owncloud.com' => 'Lukas Reschke', 'lukas@öwnclöüd.com', 'lukäs@owncloud.örg' => 'Lükäs Réschke'], - ['lukas@owncloud.com' => 'Lukas Reschke', 'lukas@xn--wncld-iuae2c.com', 'lukäs@owncloud.xn--rg-eka' => 'Lükäs Réschke']], - [['lukas@öwnclöüd.com'], ['lukas@xn--wncld-iuae2c.com']], + [ + ['lukas@owncloud.com' => 'Lukas Reschke'], + [new Address('lukas@owncloud.com', 'Lukas Reschke')] + ], + [ + [ + 'lukas@owncloud.com' => 'Lukas Reschke', + 'lukas@öwnclöüd.com', + 'lukäs@owncloud.örg' => 'Lükäs Réschke' + ], + [ + new Address('lukas@owncloud.com', 'Lukas Reschke'), + new Address('lukas@öwnclöüd.com'), + new Address('lukäs@owncloud.örg', 'Lükäs Réschke') + ] + ], + [ + ['lukas@öwnclöüd.com'], + [new Address('lukas@öwnclöüd.com')] + ], ]; } @@ -36,7 +58,7 @@ class MessageTest extends TestCase { */ public function getMailAddressProvider() { return [ - [null, []], + [[], []], [['lukas@owncloud.com' => 'Lukas Reschke'], ['lukas@owncloud.com' => 'Lukas Reschke']], ]; } @@ -44,178 +66,157 @@ class MessageTest extends TestCase { protected function setUp(): void { parent::setUp(); - $this->swiftMessage = $this->getMockBuilder('\Swift_Message') - ->disableOriginalConstructor()->getMock(); + $this->symfonyEmail = $this->createMock(Email::class); - $this->message = new Message($this->swiftMessage, false); + $this->message = new Message($this->symfonyEmail, false); } /** - * @requires function idn_to_ascii - * @dataProvider mailAddressProvider * * @param string $unconverted * @param string $expected */ - public function testConvertAddresses($unconverted, $expected) { - $this->assertSame($expected, self::invokePrivate($this->message, 'convertAddresses', [$unconverted])); + #[\PHPUnit\Framework\Attributes\DataProvider('mailAddressProvider')] + public function testConvertAddresses($unconverted, $expected): void { + $this->assertEquals($expected, self::invokePrivate($this->message, 'convertAddresses', [$unconverted])); } - public function testSetFrom() { - $this->swiftMessage + public function testSetRecipients(): void { + $this->message = $this->message->setFrom(['pierres-general-store@stardewvalley.com' => 'Pierres General Store']); + $this->message = $this->message->setTo(['lewis-tent@stardewvalley.com' => "Lewis' Tent Life"]); + $this->message = $this->message->setReplyTo(['penny@stardewvalley-library.co.edu' => 'Penny']); + $this->message = $this->message->setCc(['gunther@stardewvalley-library.co.edu' => 'Gunther']); + $this->message = $this->message->setBcc(['pam@stardewvalley-bus.com' => 'Pam']); + + $this->symfonyEmail + ->expects($this->once()) + ->method('from') + ->with(new Address('pierres-general-store@stardewvalley.com', 'Pierres General Store')); + $this->symfonyEmail + ->expects($this->once()) + ->method('to') + ->with(new Address('lewis-tent@stardewvalley.com', "Lewis' Tent Life")); + $this->symfonyEmail ->expects($this->once()) - ->method('setFrom') - ->with(['lukas@owncloud.com']); - $this->message->setFrom(['lukas@owncloud.com']); + ->method('replyTo') + ->with(new Address('penny@stardewvalley-library.co.edu', 'Penny')); + $this->symfonyEmail + ->expects($this->once()) + ->method('cc') + ->with(new Address('gunther@stardewvalley-library.co.edu', 'Gunther')); + $this->symfonyEmail + ->expects($this->once()) + ->method('bcc') + ->with(new Address('pam@stardewvalley-bus.com', 'Pam')); + + $this->message->setRecipients(); } + public function testSetTo(): void { + $expected = ['pierres-general-store@stardewvalley.com' => 'Pierres General Store']; - /** - * @dataProvider getMailAddressProvider - * - * @param $swiftresult - * @param $return - */ - public function testGetFrom($swiftresult, $return) { - $this->swiftMessage - ->expects($this->once()) - ->method('getFrom') - ->willReturn($swiftresult); + $message = $this->message->setTo(['pierres-general-store@stardewvalley.com' => 'Pierres General Store']); - $this->assertSame($return, $this->message->getFrom()); + $this->assertEquals($expected, $message->getTo()); } + public function testSetRecipientsException(): void { + $message = $this->message->setTo(['lewis-tent@~~~~.com' => "Lewis' Tent Life"]); - public function testSetReplyTo() { - $this->swiftMessage + $this->symfonyEmail ->expects($this->once()) - ->method('setReplyTo') - ->with(['lukas@owncloud.com']); - $this->message->setReplyTo(['lukas@owncloud.com']); + ->method('to') + ->willThrowException(new RfcComplianceException()); + + $this->expectException(RfcComplianceException::class); + $message->setRecipients(); } - public function testGetReplyTo() { - $this->swiftMessage + public function testSetRecipientsEmptyValues(): void { + $message = $this->message->setTo([]); + + $this->symfonyEmail ->expects($this->once()) - ->method('getReplyTo') - ->willReturn('lukas@owncloud.com'); + ->method('to'); - $this->assertSame('lukas@owncloud.com', $this->message->getReplyTo()); + $message->setRecipients(); } - public function testSetTo() { - $this->swiftMessage - ->expects($this->once()) - ->method('setTo') - ->with(['lukas@owncloud.com']); - $this->message->setTo(['lukas@owncloud.com']); - } + public function testSetGetFrom(): void { + $expected = ['pierres-general-store@stardewvalley.com' => 'Pierres General Store']; - /** - * @dataProvider getMailAddressProvider - */ - public function testGetTo($swiftresult, $return) { - $this->swiftMessage - ->expects($this->once()) - ->method('getTo') - ->willReturn($swiftresult); + $message = $this->message->setFrom(['pierres-general-store@stardewvalley.com' => 'Pierres General Store']); - $this->assertSame($return, $this->message->getTo()); + $this->assertEquals($expected, $message->getFrom()); } - public function testSetCc() { - $this->swiftMessage - ->expects($this->once()) - ->method('setCc') - ->with(['lukas@owncloud.com']); - $this->message->setCc(['lukas@owncloud.com']); - } + public function testSetGetTo(): void { + $expected = ['lewis-tent@stardewvalley.com' => "Lewis' Tent Life"]; - /** - * @dataProvider getMailAddressProvider - */ - public function testGetCc($swiftresult, $return) { - $this->swiftMessage - ->expects($this->once()) - ->method('getCc') - ->willReturn($swiftresult); + $message = $this->message->setTo(['lewis-tent@stardewvalley.com' => "Lewis' Tent Life"]); - $this->assertSame($return, $this->message->getCc()); + $this->assertEquals($expected, $message->getTo()); } - public function testSetBcc() { - $this->swiftMessage - ->expects($this->once()) - ->method('setBcc') - ->with(['lukas@owncloud.com']); - $this->message->setBcc(['lukas@owncloud.com']); - } + public function testSetGetReplyTo(): void { + $expected = ['penny@stardewvalley-library.co.edu' => 'Penny']; - /** - * @dataProvider getMailAddressProvider - */ - public function testGetBcc($swiftresult, $return) { - $this->swiftMessage - ->expects($this->once()) - ->method('getBcc') - ->willReturn($swiftresult); + $message = $this->message->setReplyTo(['penny@stardewvalley-library.co.edu' => 'Penny']); - $this->assertSame($return, $this->message->getBcc()); + $this->assertEquals($expected, $message->getReplyTo()); } - public function testSetSubject() { - $this->swiftMessage - ->expects($this->once()) - ->method('setSubject') - ->with('Fancy Subject'); + public function testSetGetCC(): void { + $expected = ['gunther@stardewvalley-library.co.edu' => 'Gunther']; + + $message = $this->message->setCc(['gunther@stardewvalley-library.co.edu' => 'Gunther']); - $this->message->setSubject('Fancy Subject'); + $this->assertEquals($expected, $message->getCc()); } - public function testGetSubject() { - $this->swiftMessage - ->expects($this->once()) - ->method('getSubject') - ->willReturn('Fancy Subject'); + public function testSetGetBCC(): void { + $expected = ['pam@stardewvalley-bus.com' => 'Pam']; + + $message = $this->message->setBcc(['pam@stardewvalley-bus.com' => 'Pam']); - $this->assertSame('Fancy Subject', $this->message->getSubject()); + $this->assertEquals($expected, $message->getBcc()); } - public function testSetPlainBody() { - $this->swiftMessage + public function testSetPlainBody(): void { + $this->symfonyEmail ->expects($this->once()) - ->method('setBody') + ->method('text') ->with('Fancy Body'); $this->message->setPlainBody('Fancy Body'); } - public function testGetPlainBody() { - $this->swiftMessage + public function testGetPlainBody(): void { + $this->symfonyEmail ->expects($this->once()) - ->method('getBody') + ->method('getTextBody') ->willReturn('Fancy Body'); $this->assertSame('Fancy Body', $this->message->getPlainBody()); } - public function testSetHtmlBody() { - $this->swiftMessage + public function testSetHtmlBody(): void { + $this->symfonyEmail ->expects($this->once()) - ->method('addPart') - ->with('<blink>Fancy Body</blink>', 'text/html'); + ->method('html') + ->with('<blink>Fancy Body</blink>', 'utf-8'); $this->message->setHtmlBody('<blink>Fancy Body</blink>'); } - public function testPlainTextRenderOption() { - /** @var \PHPUnit\Framework\MockObject\MockObject|Swift_Message $swiftMessage */ - $swiftMessage = $this->getMockBuilder('\Swift_Message') + public function testPlainTextRenderOption(): void { + /** @var MockObject|Email $symfonyEmail */ + $symfonyEmail = $this->getMockBuilder(Email::class) ->disableOriginalConstructor()->getMock(); - /** @var \PHPUnit\Framework\MockObject\MockObject|IEMailTemplate $template */ - $template = $this->getMockBuilder('\OCP\Mail\IEMailTemplate') + /** @var MockObject|IEMailTemplate $template */ + $template = $this->getMockBuilder(IEMailTemplate::class) ->disableOriginalConstructor()->getMock(); - $message = new Message($swiftMessage, true); + $message = new Message($symfonyEmail, true); $template ->expects($this->never()) @@ -230,15 +231,15 @@ class MessageTest extends TestCase { $message->useTemplate($template); } - public function testBothRenderingOptions() { - /** @var \PHPUnit\Framework\MockObject\MockObject|Swift_Message $swiftMessage */ - $swiftMessage = $this->getMockBuilder('\Swift_Message') + public function testBothRenderingOptions(): void { + /** @var MockObject|Email $symfonyEmail */ + $symfonyEmail = $this->getMockBuilder(Email::class) ->disableOriginalConstructor()->getMock(); - /** @var \PHPUnit\Framework\MockObject\MockObject|IEMailTemplate $template */ - $template = $this->getMockBuilder('\OCP\Mail\IEMailTemplate') + /** @var MockObject|IEMailTemplate $template */ + $template = $this->getMockBuilder(IEMailTemplate::class) ->disableOriginalConstructor()->getMock(); - $message = new Message($swiftMessage, false); + $message = new Message($symfonyEmail, false); $template ->expects($this->once()) @@ -252,4 +253,42 @@ class MessageTest extends TestCase { $message->useTemplate($template); } + + public function testSetAutoSubmitted1(): void { + $headers = new Headers($this->createMock(HeaderInterface::class)); + $headers->addTextHeader(AutoSubmitted::HEADER, 'yes'); + $symfonyEmail = $this->createMock(Email::class); + + $symfonyEmail->method('getHeaders') + ->willReturn($headers); + + $message = new Message($symfonyEmail, false); + $message->setAutoSubmitted(AutoSubmitted::VALUE_AUTO_GENERATED); + $this->assertNotSame('no', $message->getAutoSubmitted()); + } + + public function testSetAutoSubmitted2(): void { + $headers = new Headers($this->createMock(HeaderInterface::class)); + $headers->addTextHeader(AutoSubmitted::HEADER, 'no'); + $symfonyEmail = $this->createMock(Email::class); + + $symfonyEmail->method('getHeaders') + ->willReturn($headers); + + $message = new Message($symfonyEmail, false); + $message->setAutoSubmitted(AutoSubmitted::VALUE_AUTO_GENERATED); + $this->assertSame('auto-generated', $message->getAutoSubmitted()); + } + + public function testGetAutoSubmitted(): void { + $headers = new Headers($this->createMock(HeaderInterface::class)); + $headers->addTextHeader(AutoSubmitted::HEADER, 'no'); + $symfonyEmail = $this->createMock(Email::class); + + $symfonyEmail->method('getHeaders') + ->willReturn($headers); + + $message = new Message($symfonyEmail, false); + $this->assertSame('no', $message->getAutoSubmitted()); + } } |