From c1c6d215c74a8246183510b7a4e94aa07e5b82d4 Mon Sep 17 00:00:00 2001 From: Bennet Becker Date: Fri, 23 Dec 2022 12:46:15 +0100 Subject: fix getAutoSubmitted return type and adding unit tests Signed-off-by: Bennet Becker --- tests/lib/Mail/MessageTest.php | 142 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) (limited to 'tests/lib/Mail/MessageTest.php') diff --git a/tests/lib/Mail/MessageTest.php b/tests/lib/Mail/MessageTest.php index bec70d1c78a..aae25497876 100644 --- a/tests/lib/Mail/MessageTest.php +++ b/tests/lib/Mail/MessageTest.php @@ -8,7 +8,9 @@ namespace Test\Mail; +use Egulias\EmailValidator\EmailValidator; use OC\Mail\Message; +use OCP\Mail\AutoSubmittedValue; use OCP\Mail\IEMailTemplate; use Swift_Message; use Test\TestCase; @@ -263,4 +265,144 @@ class MessageTest extends TestCase { $message->useTemplate($template); } + + public function testSetAutoSubmitted1() { + + $swiftMimeSimpleHeaderSet = $this->getMockBuilder('\Swift_Mime_SimpleHeaderSet') + ->disableOriginalConstructor() + ->getMock(); + + $swiftMessage = $this->getMockBuilder('\Swift_Message') + ->disableOriginalConstructor() + ->disableOriginalClone() + ->disableArgumentCloning() + ->disallowMockingUnknownTypes() + ->getMock(); + + + $swiftMessage->method('getHeaders')->willReturn($swiftMimeSimpleHeaderSet); + + $swiftMimeSimpleHeaderSet->expects($this->once()) + ->method('has') + ->with('Auto-Submitted'); + + $swiftMimeSimpleHeaderSet->expects($this->never()) + ->method('get'); + + $swiftMimeSimpleHeaderSet->expects($this->once()) + ->method('addTextHeader') + ->with('Auto-Submitted', AutoSubmittedValue::AUTO_GENERATED); + + $message = new Message($swiftMessage, false); + + $message->setAutoSubmitted(AutoSubmittedValue::AUTO_GENERATED); + + } + + public function testSetAutoSubmitted2() { + + $swiftMimeHeader = $this->getMockBuilder('\Swift_Mime_Header') + ->disableOriginalConstructor() + ->addMethods(['setValue']) + ->getMockForAbstractClass(); + + $swiftMimeSimpleHeaderSet = $this->getMockBuilder('\Swift_Mime_SimpleHeaderSet') + ->disableOriginalConstructor() + ->getMock(); + + $swiftMessage = $this->getMockBuilder('\Swift_Message') + ->disableOriginalConstructor() + ->disableOriginalClone() + ->disableArgumentCloning() + ->disallowMockingUnknownTypes() + ->getMock(); + + + $swiftMessage->method('getHeaders')->willReturn($swiftMimeSimpleHeaderSet); + $swiftMimeSimpleHeaderSet->method('get')->with("Auto-Submitted")->willReturn($swiftMimeHeader); + + + $swiftMimeSimpleHeaderSet->expects($this->once()) + ->method('has') + ->with('Auto-Submitted') + ->willReturn(true); + + $swiftMimeSimpleHeaderSet->expects($this->once()) + ->method('get'); + + $swiftMimeSimpleHeaderSet->expects($this->never()) + ->method('addTextHeader') + ->with('Auto-Submitted', AutoSubmittedValue::AUTO_GENERATED); + + $swiftMimeHeader->expects($this->once()) + ->method('setValue') + ->with(AutoSubmittedValue::AUTO_GENERATED); + + $message = new Message($swiftMessage, false); + + $message->setAutoSubmitted(AutoSubmittedValue::AUTO_GENERATED); + } + + public function testGetAutoSubmitted1() { + + $swiftMimeSimpleHeaderSet = $this->getMockBuilder('\Swift_Mime_SimpleHeaderSet') + ->disableOriginalConstructor() + ->getMock(); + + $swiftMessage = $this->getMockBuilder('\Swift_Message') + ->disableOriginalConstructor() + ->disableOriginalClone() + ->disableArgumentCloning() + ->disallowMockingUnknownTypes() + ->getMock(); + + + $swiftMessage->method('getHeaders')->willReturn($swiftMimeSimpleHeaderSet); + + $swiftMimeSimpleHeaderSet->expects($this->once()) + ->method('has') + ->with('Auto-Submitted'); + + $swiftMimeSimpleHeaderSet->expects($this->never()) + ->method('get'); + + $message = new Message($swiftMessage, false); + + $this->assertSame("no", $message->getAutoSubmitted()); + } + public function testGetAutoSubmitted2() { + + $swiftMimeHeader = $this->getMockBuilder('\Swift_Mime_Header') + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + + $swiftMimeSimpleHeaderSet = $this->getMockBuilder('\Swift_Mime_SimpleHeaderSet') + ->disableOriginalConstructor() + ->getMock(); + + $swiftMessage = $this->getMockBuilder('\Swift_Message') + ->disableOriginalConstructor() + ->disableOriginalClone() + ->disableArgumentCloning() + ->disallowMockingUnknownTypes() + ->getMock(); + + + $swiftMessage->method('getHeaders')->willReturn($swiftMimeSimpleHeaderSet); + $swiftMimeHeader->method('toString')->willReturn(AutoSubmittedValue::AUTO_GENERATED); + + $swiftMimeSimpleHeaderSet->expects($this->once()) + ->method('has') + ->with('Auto-Submitted') + ->willReturn(true); + + $swiftMimeSimpleHeaderSet->expects($this->once()) + ->method('get') + ->willReturn($swiftMimeHeader); + + $message = new Message($swiftMessage, false); + + $this->assertSame(AutoSubmittedValue::AUTO_GENERATED, $message->getAutoSubmitted()); + + } } -- cgit v1.2.3 From 411467af57cf94eb2ee6a90538017640a76d0dcb Mon Sep 17 00:00:00 2001 From: Bennet Becker Date: Fri, 23 Dec 2022 21:48:52 +0100 Subject: fix static-analysis error and formatting code Signed-off-by: Bennet Becker --- lib/private/Mail/Message.php | 17 +++++++++++------ tests/lib/Mail/MessageTest.php | 43 ++++-------------------------------------- 2 files changed, 15 insertions(+), 45 deletions(-) (limited to 'tests/lib/Mail/MessageTest.php') diff --git a/lib/private/Mail/Message.php b/lib/private/Mail/Message.php index d074befcae4..417b64d0f3a 100644 --- a/lib/private/Mail/Message.php +++ b/lib/private/Mail/Message.php @@ -307,18 +307,23 @@ class Message implements IMessage { * Add the Auto-Submitted header to the email, preventing most automated * responses to automated messages. * - * @param string $value (one of AutoSubmittedValue::NO, AutoSubmittedValue::AUTO_GENERATED, AutoSubmittedValue::AUTO_REPLIED) + * @param AutoSubmittedValue::* $value (one of AutoSubmittedValue::NO, AutoSubmittedValue::AUTO_GENERATED, AutoSubmittedValue::AUTO_REPLIED) * @return $this */ public function setAutoSubmitted(string $value): IMessage { $headers = $this->swiftMessage->getHeaders(); - if($headers->has('Auto-Submitted')) { - $auto_submitted = $headers->get('Auto-Submitted'); - $auto_submitted->setValue($value); - } else { - $headers->addTextHeader('Auto-Submitted', $value); + + if ($headers->has('Auto-Submitted')) { + // if the header already exsists, remove it. + // the value can be modified with some implementations + // of the interface \Swift_Mime_Header, however the + // interface doesn't, and this makes the static-code + // analysis unhappy. + $headers->remove('Auto-Submitted'); } + $headers->addTextHeader('Auto-Submitted', $value); + return $this; } diff --git a/tests/lib/Mail/MessageTest.php b/tests/lib/Mail/MessageTest.php index aae25497876..cf9a48e29f2 100644 --- a/tests/lib/Mail/MessageTest.php +++ b/tests/lib/Mail/MessageTest.php @@ -8,7 +8,6 @@ namespace Test\Mail; -use Egulias\EmailValidator\EmailValidator; use OC\Mail\Message; use OCP\Mail\AutoSubmittedValue; use OCP\Mail\IEMailTemplate; @@ -267,11 +266,9 @@ class MessageTest extends TestCase { } public function testSetAutoSubmitted1() { - $swiftMimeSimpleHeaderSet = $this->getMockBuilder('\Swift_Mime_SimpleHeaderSet') ->disableOriginalConstructor() ->getMock(); - $swiftMessage = $this->getMockBuilder('\Swift_Message') ->disableOriginalConstructor() ->disableOriginalClone() @@ -279,37 +276,25 @@ class MessageTest extends TestCase { ->disallowMockingUnknownTypes() ->getMock(); - $swiftMessage->method('getHeaders')->willReturn($swiftMimeSimpleHeaderSet); $swiftMimeSimpleHeaderSet->expects($this->once()) ->method('has') ->with('Auto-Submitted'); - $swiftMimeSimpleHeaderSet->expects($this->never()) - ->method('get'); - + ->method('remove'); $swiftMimeSimpleHeaderSet->expects($this->once()) ->method('addTextHeader') ->with('Auto-Submitted', AutoSubmittedValue::AUTO_GENERATED); $message = new Message($swiftMessage, false); - $message->setAutoSubmitted(AutoSubmittedValue::AUTO_GENERATED); - } public function testSetAutoSubmitted2() { - - $swiftMimeHeader = $this->getMockBuilder('\Swift_Mime_Header') - ->disableOriginalConstructor() - ->addMethods(['setValue']) - ->getMockForAbstractClass(); - $swiftMimeSimpleHeaderSet = $this->getMockBuilder('\Swift_Mime_SimpleHeaderSet') ->disableOriginalConstructor() ->getMock(); - $swiftMessage = $this->getMockBuilder('\Swift_Message') ->disableOriginalConstructor() ->disableOriginalClone() @@ -317,38 +302,27 @@ class MessageTest extends TestCase { ->disallowMockingUnknownTypes() ->getMock(); - $swiftMessage->method('getHeaders')->willReturn($swiftMimeSimpleHeaderSet); - $swiftMimeSimpleHeaderSet->method('get')->with("Auto-Submitted")->willReturn($swiftMimeHeader); - $swiftMimeSimpleHeaderSet->expects($this->once()) ->method('has') ->with('Auto-Submitted') ->willReturn(true); - $swiftMimeSimpleHeaderSet->expects($this->once()) - ->method('get'); - - $swiftMimeSimpleHeaderSet->expects($this->never()) + ->method('remove') + ->with('Auto-Submitted'); + $swiftMimeSimpleHeaderSet->expects($this->once()) ->method('addTextHeader') ->with('Auto-Submitted', AutoSubmittedValue::AUTO_GENERATED); - $swiftMimeHeader->expects($this->once()) - ->method('setValue') - ->with(AutoSubmittedValue::AUTO_GENERATED); - $message = new Message($swiftMessage, false); - $message->setAutoSubmitted(AutoSubmittedValue::AUTO_GENERATED); } public function testGetAutoSubmitted1() { - $swiftMimeSimpleHeaderSet = $this->getMockBuilder('\Swift_Mime_SimpleHeaderSet') ->disableOriginalConstructor() ->getMock(); - $swiftMessage = $this->getMockBuilder('\Swift_Message') ->disableOriginalConstructor() ->disableOriginalClone() @@ -356,30 +330,24 @@ class MessageTest extends TestCase { ->disallowMockingUnknownTypes() ->getMock(); - $swiftMessage->method('getHeaders')->willReturn($swiftMimeSimpleHeaderSet); $swiftMimeSimpleHeaderSet->expects($this->once()) ->method('has') ->with('Auto-Submitted'); - $swiftMimeSimpleHeaderSet->expects($this->never()) ->method('get'); $message = new Message($swiftMessage, false); - $this->assertSame("no", $message->getAutoSubmitted()); } public function testGetAutoSubmitted2() { - $swiftMimeHeader = $this->getMockBuilder('\Swift_Mime_Header') ->disableOriginalConstructor() ->getMockForAbstractClass(); - $swiftMimeSimpleHeaderSet = $this->getMockBuilder('\Swift_Mime_SimpleHeaderSet') ->disableOriginalConstructor() ->getMock(); - $swiftMessage = $this->getMockBuilder('\Swift_Message') ->disableOriginalConstructor() ->disableOriginalClone() @@ -395,14 +363,11 @@ class MessageTest extends TestCase { ->method('has') ->with('Auto-Submitted') ->willReturn(true); - $swiftMimeSimpleHeaderSet->expects($this->once()) ->method('get') ->willReturn($swiftMimeHeader); $message = new Message($swiftMessage, false); - $this->assertSame(AutoSubmittedValue::AUTO_GENERATED, $message->getAutoSubmitted()); - } } -- cgit v1.2.3 From 4dc09571648634d23880cc04f958d4ff3d1ace68 Mon Sep 17 00:00:00 2001 From: Bennet Becker Date: Tue, 3 Jan 2023 15:03:40 +0100 Subject: refactor AutoSubmittedValue to Headers\AutoSubmitted and adding header name to constants Signed-off-by: Bennet Becker --- lib/private/Mail/Message.php | 14 +++--- lib/public/Mail/AutoSubmittedValue.php | 66 --------------------------- lib/public/Mail/Headers/AutoSubmitted.php | 75 +++++++++++++++++++++++++++++++ lib/public/Mail/IMessage.php | 2 +- tests/lib/Mail/MessageTest.php | 14 +++--- 5 files changed, 90 insertions(+), 81 deletions(-) delete mode 100644 lib/public/Mail/AutoSubmittedValue.php create mode 100644 lib/public/Mail/Headers/AutoSubmitted.php (limited to 'tests/lib/Mail/MessageTest.php') diff --git a/lib/private/Mail/Message.php b/lib/private/Mail/Message.php index cf69d9cb3ef..3313b39e2e2 100644 --- a/lib/private/Mail/Message.php +++ b/lib/private/Mail/Message.php @@ -31,7 +31,7 @@ declare(strict_types=1); */ namespace OC\Mail; -use OCP\Mail\AutoSubmittedValue; +use OCP\Mail\Headers\AutoSubmitted; use OCP\Mail\IAttachment; use OCP\Mail\IEMailTemplate; use OCP\Mail\IMessage; @@ -307,22 +307,22 @@ class Message implements IMessage { * Add the Auto-Submitted header to the email, preventing most automated * responses to automated messages. * - * @param AutoSubmittedValue::* $value (one of AutoSubmittedValue::NO, AutoSubmittedValue::AUTO_GENERATED, AutoSubmittedValue::AUTO_REPLIED) + * @param AutoSubmitted::VALUE_* $value (one of AutoSubmitted::VALUE_NO, AutoSubmitted::VALUE_AUTO_GENERATED, AutoSubmitted::VALUE_AUTO_REPLIED) * @return $this */ public function setAutoSubmitted(string $value): IMessage { $headers = $this->swiftMessage->getHeaders(); - if ($headers->has('Auto-Submitted')) { + if ($headers->has(AutoSubmitted::HEADER)) { // if the header already exsists, remove it. // the value can be modified with some implementations // of the interface \Swift_Mime_Header, however the // interface doesn't, and this makes the static-code // analysis unhappy. - $headers->remove('Auto-Submitted'); + $headers->remove(AutoSubmitted::HEADER); } - $headers->addTextHeader('Auto-Submitted', $value); + $headers->addTextHeader(AutoSubmitted::HEADER, $value); return $this; } @@ -336,7 +336,7 @@ class Message implements IMessage { public function getAutoSubmitted(): string { $headers = $this->swiftMessage->getHeaders(); - return $headers->has('Auto-Submitted') ? - $headers->get('Auto-Submitted')->toString() : AutoSubmittedValue::NO; + return $headers->has(AutoSubmitted::HEADER) ? + $headers->get(AutoSubmitted::HEADER)->toString() : AutoSubmitted::VALUE_NO; } } diff --git a/lib/public/Mail/AutoSubmittedValue.php b/lib/public/Mail/AutoSubmittedValue.php deleted file mode 100644 index 3cf669d00f7..00000000000 --- a/lib/public/Mail/AutoSubmittedValue.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * @author Bennet Becker - * - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - * - */ -namespace OCP\Mail; - -/** - * Keyword values for the Auto-Submitted email header, as per RFC 3834. - * - * The value "auto-notified" as per RFC 5436 is deliberately omitted as it is - * meant of notification of the sieve system. - * - * @link https://www.iana.org/assignments/auto-submitted-keywords/auto-submitted-keywords.xhtml - * - * @since 26.0.0 - */ -final class AutoSubmittedValue { - /** - * Indicates that a message was NOT automatically generated, but was - * created by a human (or following human interaction). It is the equivalent - * to the absence of an Auto-Submitted header altogether. - * - * @var string - * @since 26.0.0 - */ - public const NO = 'no'; - - /** - * Indicates that a message was generated by an automatic process, and is - * not a direct response to another message - * - * @var string - * @since 26.0.0 - */ - public const AUTO_GENERATED = 'auto-generated'; - - /** - * Indicates that a message was automatically generated as a direct response - * to another message. - * - * @var string - * @since 26.0.0 - */ - public const AUTO_REPLIED = 'auto-replied'; -} diff --git a/lib/public/Mail/Headers/AutoSubmitted.php b/lib/public/Mail/Headers/AutoSubmitted.php new file mode 100644 index 00000000000..73bd35e129e --- /dev/null +++ b/lib/public/Mail/Headers/AutoSubmitted.php @@ -0,0 +1,75 @@ + + * + * @author Bennet Becker + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ +namespace OCP\Mail\Headers; + +/** + * Keyword values for the Auto-Submitted email header, as per RFC 3834. + * + * The value "auto-notified" as per RFC 5436 is deliberately omitted as it is + * meant of notification of the sieve system. + * + * @link https://www.iana.org/assignments/auto-submitted-keywords/auto-submitted-keywords.xhtml + * + * @since 26.0.0 + */ +final class AutoSubmitted { + + /** + * Name of the Header as used in the final message later + * + * @var string + * @since 26.0.0 + */ + public const HEADER = 'Auto-Submitted'; + + /** + * Indicates that a message was NOT automatically generated, but was + * created by a human (or following human interaction). It is the equivalent + * to the absence of an Auto-Submitted header altogether. + * + * @var string + * @since 26.0.0 + */ + public const VALUE_NO = 'no'; + + /** + * Indicates that a message was generated by an automatic process, and is + * not a direct response to another message + * + * @var string + * @since 26.0.0 + */ + public const VALUE_AUTO_GENERATED = 'auto-generated'; + + /** + * Indicates that a message was automatically generated as a direct response + * to another message. + * + * @var string + * @since 26.0.0 + */ + public const VALUE_AUTO_REPLIED = 'auto-replied'; +} diff --git a/lib/public/Mail/IMessage.php b/lib/public/Mail/IMessage.php index 352c47022fd..c53ab12bbb7 100644 --- a/lib/public/Mail/IMessage.php +++ b/lib/public/Mail/IMessage.php @@ -98,7 +98,7 @@ interface IMessage { * Add the Auto-Submitted header to the email, preventing most automated * responses to automated messages. * - * @param AutoSubmittedValue::* $value (one of AutoSubmittedValue::NO, AutoSubmittedValue::AUTO_GENERATED, AutoSubmittedValue::AUTO_REPLIED) + * @param AutoSubmitted::VALUE_* $value (one of AutoSubmitted::VALUE_NO, AutoSubmitted::VALUE_AUTO_GENERATED, AutoSubmitted::VALUE_AUTO_REPLIED) * @return IMessage * @since 26.0.0 */ diff --git a/tests/lib/Mail/MessageTest.php b/tests/lib/Mail/MessageTest.php index cf9a48e29f2..b97240d1336 100644 --- a/tests/lib/Mail/MessageTest.php +++ b/tests/lib/Mail/MessageTest.php @@ -9,7 +9,7 @@ namespace Test\Mail; use OC\Mail\Message; -use OCP\Mail\AutoSubmittedValue; +use OCP\Mail\Headers\AutoSubmitted; use OCP\Mail\IEMailTemplate; use Swift_Message; use Test\TestCase; @@ -285,10 +285,10 @@ class MessageTest extends TestCase { ->method('remove'); $swiftMimeSimpleHeaderSet->expects($this->once()) ->method('addTextHeader') - ->with('Auto-Submitted', AutoSubmittedValue::AUTO_GENERATED); + ->with('Auto-Submitted', AutoSubmitted::VALUE_AUTO_GENERATED); $message = new Message($swiftMessage, false); - $message->setAutoSubmitted(AutoSubmittedValue::AUTO_GENERATED); + $message->setAutoSubmitted(AutoSubmitted::VALUE_AUTO_GENERATED); } public function testSetAutoSubmitted2() { @@ -313,10 +313,10 @@ class MessageTest extends TestCase { ->with('Auto-Submitted'); $swiftMimeSimpleHeaderSet->expects($this->once()) ->method('addTextHeader') - ->with('Auto-Submitted', AutoSubmittedValue::AUTO_GENERATED); + ->with('Auto-Submitted', AutoSubmitted::VALUE_AUTO_GENERATED); $message = new Message($swiftMessage, false); - $message->setAutoSubmitted(AutoSubmittedValue::AUTO_GENERATED); + $message->setAutoSubmitted(AutoSubmitted::VALUE_AUTO_GENERATED); } public function testGetAutoSubmitted1() { @@ -357,7 +357,7 @@ class MessageTest extends TestCase { $swiftMessage->method('getHeaders')->willReturn($swiftMimeSimpleHeaderSet); - $swiftMimeHeader->method('toString')->willReturn(AutoSubmittedValue::AUTO_GENERATED); + $swiftMimeHeader->method('toString')->willReturn(AutoSubmitted::VALUE_AUTO_GENERATED); $swiftMimeSimpleHeaderSet->expects($this->once()) ->method('has') @@ -368,6 +368,6 @@ class MessageTest extends TestCase { ->willReturn($swiftMimeHeader); $message = new Message($swiftMessage, false); - $this->assertSame(AutoSubmittedValue::AUTO_GENERATED, $message->getAutoSubmitted()); + $this->assertSame(AutoSubmitted::VALUE_AUTO_GENERATED, $message->getAutoSubmitted()); } } -- cgit v1.2.3