123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- <?php
- /**
- * 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 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 Email */
- private $symfonyEmail;
- /** @var Message */
- private $message;
- /**
- * @return array
- */
- public function mailAddressProvider() {
- return [
- [
- ['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')]
- ],
- ];
- }
- /**
- * @return array
- */
- public function getMailAddressProvider() {
- return [
- [[], []],
- [['lukas@owncloud.com' => 'Lukas Reschke'], ['lukas@owncloud.com' => 'Lukas Reschke']],
- ];
- }
- protected function setUp(): void {
- parent::setUp();
- $this->symfonyEmail = $this->getMockBuilder(Email::class)
- ->disableOriginalConstructor()->getMock();
- $this->message = new Message($this->symfonyEmail, false);
- }
- /**
- * @dataProvider mailAddressProvider
- *
- * @param string $unconverted
- * @param string $expected
- */
- public function testConvertAddresses($unconverted, $expected): void {
- $this->assertEquals($expected, self::invokePrivate($this->message, 'convertAddresses', [$unconverted]));
- }
- 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('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'];
- $message = $this->message->setTo(['pierres-general-store@stardewvalley.com' => 'Pierres General Store']);
- $this->assertEquals($expected, $message->getTo());
- }
- public function testSetRecipientsException(): void {
- $message = $this->message->setTo(['lewis-tent@~~~~.com' => "Lewis' Tent Life"]);
- $this->symfonyEmail
- ->expects($this->once())
- ->method('to')
- ->willThrowException(new RfcComplianceException());
- $this->expectException(RfcComplianceException::class);
- $message->setRecipients();
- }
- public function testSetRecipientsEmptyValues(): void {
- $message = $this->message->setTo([]);
- $this->symfonyEmail
- ->expects($this->once())
- ->method('to');
- $message->setRecipients();
- }
- public function testSetGetFrom(): void {
- $expected = ['pierres-general-store@stardewvalley.com' => 'Pierres General Store'];
- $message = $this->message->setFrom(['pierres-general-store@stardewvalley.com' => 'Pierres General Store']);
- $this->assertEquals($expected, $message->getFrom());
- }
- public function testSetGetTo(): void {
- $expected = ['lewis-tent@stardewvalley.com' => "Lewis' Tent Life"];
- $message = $this->message->setTo(['lewis-tent@stardewvalley.com' => "Lewis' Tent Life"]);
- $this->assertEquals($expected, $message->getTo());
- }
- public function testSetGetReplyTo(): void {
- $expected = ['penny@stardewvalley-library.co.edu' => 'Penny'];
- $message = $this->message->setReplyTo(['penny@stardewvalley-library.co.edu' => 'Penny']);
- $this->assertEquals($expected, $message->getReplyTo());
- }
- public function testSetGetCC(): void {
- $expected = ['gunther@stardewvalley-library.co.edu' => 'Gunther'];
- $message = $this->message->setCc(['gunther@stardewvalley-library.co.edu' => 'Gunther']);
- $this->assertEquals($expected, $message->getCc());
- }
- public function testSetGetBCC(): void {
- $expected = ['pam@stardewvalley-bus.com' => 'Pam'];
- $message = $this->message->setBcc(['pam@stardewvalley-bus.com' => 'Pam']);
- $this->assertEquals($expected, $message->getBcc());
- }
- public function testSetPlainBody(): void {
- $this->symfonyEmail
- ->expects($this->once())
- ->method('text')
- ->with('Fancy Body');
- $this->message->setPlainBody('Fancy Body');
- }
- public function testGetPlainBody(): void {
- $this->symfonyEmail
- ->expects($this->once())
- ->method('getTextBody')
- ->willReturn('Fancy Body');
- $this->assertSame('Fancy Body', $this->message->getPlainBody());
- }
- public function testSetHtmlBody(): void {
- $this->symfonyEmail
- ->expects($this->once())
- ->method('html')
- ->with('<blink>Fancy Body</blink>', 'utf-8');
- $this->message->setHtmlBody('<blink>Fancy Body</blink>');
- }
- public function testPlainTextRenderOption(): void {
- /** @var MockObject|Email $symfonyEmail */
- $symfonyEmail = $this->getMockBuilder(Email::class)
- ->disableOriginalConstructor()->getMock();
- /** @var MockObject|IEMailTemplate $template */
- $template = $this->getMockBuilder(IEMailTemplate::class)
- ->disableOriginalConstructor()->getMock();
- $message = new Message($symfonyEmail, true);
- $template
- ->expects($this->never())
- ->method('renderHTML');
- $template
- ->expects($this->once())
- ->method('renderText');
- $template
- ->expects($this->once())
- ->method('renderSubject');
- $message->useTemplate($template);
- }
- public function testBothRenderingOptions(): void {
- /** @var MockObject|Email $symfonyEmail */
- $symfonyEmail = $this->getMockBuilder(Email::class)
- ->disableOriginalConstructor()->getMock();
- /** @var MockObject|IEMailTemplate $template */
- $template = $this->getMockBuilder(IEMailTemplate::class)
- ->disableOriginalConstructor()->getMock();
- $message = new Message($symfonyEmail, false);
- $template
- ->expects($this->once())
- ->method('renderHTML');
- $template
- ->expects($this->once())
- ->method('renderText');
- $template
- ->expects($this->once())
- ->method('renderSubject');
- $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());
- }
- }
|