summaryrefslogtreecommitdiff
path: root/tests/app/Services
diff options
context:
space:
mode:
authorJonathan Jaubart <dev@jaubart.com>2021-09-04 13:28:31 +0100
committerGitHub <noreply@github.com>2021-09-04 13:28:31 +0100
commite1ae561a17f12c36364f60382c912ea1727b2cb7 (patch)
tree991470c0b0205dd6170d940ed3a2c201d577c504 /tests/app/Services
parentd7d5645b20aba42f03b2473df6de4a14afeaaa97 (diff)
downloadwebtrees-e1ae561a17f12c36364f60382c912ea1727b2cb7.tar.gz
webtrees-e1ae561a17f12c36364f60382c912ea1727b2cb7.tar.bz2
webtrees-e1ae561a17f12c36364f60382c912ea1727b2cb7.zip
Replace EOL Swiftmailer library by Symfony Mailer (#4015)
Diffstat (limited to 'tests/app/Services')
-rw-r--r--tests/app/Services/EmailServiceTest.php120
1 files changed, 113 insertions, 7 deletions
diff --git a/tests/app/Services/EmailServiceTest.php b/tests/app/Services/EmailServiceTest.php
index cf8cdde68b..063bb23acf 100644
--- a/tests/app/Services/EmailServiceTest.php
+++ b/tests/app/Services/EmailServiceTest.php
@@ -17,24 +17,130 @@
declare(strict_types=1);
-namespace Fisharebest\Webtrees;
+namespace Fisharebest\Webtrees\Services;
-use Fisharebest\Webtrees\Services\EmailService;
+use Fisharebest\Webtrees\Site;
+use Fisharebest\Webtrees\TestCase;
+use Fisharebest\Webtrees\Contracts\UserInterface;
/**
- * Test harness for the class MailService
+ * Test harness for the class EmailService
*
* @covers \Fisharebest\Webtrees\Services\EmailService
*/
class EmailServiceTest extends TestCase
{
+ protected static bool $uses_database = true;
+
+ /**
+ * @covers \Fisharebest\Webtrees\Services\EmailService::send
+ * @covers \Fisharebest\Webtrees\Services\EmailService::message
+ * @covers \Fisharebest\Webtrees\Services\EmailService::transport
+ */
+ public function testSend(): void
+ {
+ $email_service = new EmailService();
+
+ $user_from = $this->createMock(UserInterface::class);
+ $user_from->method('email')->willReturn('user.from@example.com');
+
+ $user_from = $this->createMock(UserInterface::class);
+ $user_from->method('email')->willReturn('user.from@example.com');
+
+ $user_to = $this->createMock(UserInterface::class);
+ $user_to->method('email')->willReturn('user.to@example.com');
+
+ $user_reply_to = $this->createMock(UserInterface::class);
+ $user_reply_to->method('email')->willReturn('user.replyto@example.com');
+
+ Site::setPreference('SMTP_ACTIVE', 'internal');
+
+ self::assertSame(true, $email_service->send($user_from, $user_to, $user_reply_to, 'Test No DKIM', 'Test Plain Message', '<p>Test Html Message</p>'));
+
+ Site::setPreference('DKIM_DOMAIN', 'example.com');
+ Site::setPreference('DKIM_SELECTOR', 'sel');
+ Site::setPreference('DKIM_KEY', '-----BEGIN RSA PRIVATE KEY-----
+MIICXAIBAAKBgQCqGKukO1De7zhZj6+H0qtjTkVxwTCpvKe4eCZ0FPqri0cb2JZfXJ/DgYSF6vUp
+wmJG8wVQZKjeGcjDOL5UlsuusFncCzWBQ7RKNUSesmQRMSGkVb1/3j+skZ6UtW+5u09lHNsj6tQ5
+1s1SPrCBkedbNf0Tp0GbMJDyR4e9T04ZZwIDAQABAoGAFijko56+qGyN8M0RVyaRAXz++xTqHBLh
+3tx4VgMtrQ+WEgCjhoTwo23KMBAuJGSYnRmoBZM3lMfTKevIkAidPExvYCdm5dYq3XToLkkLv5L2
+pIIVOFMDG+KESnAFV7l2c+cnzRMW0+b6f8mR1CJzZuxVLL6Q02fvLi55/mbSYxECQQDeAw6fiIQX
+GukBI4eMZZt4nscy2o12KyYner3VpoeE+Np2q+Z3pvAMd/aNzQ/W9WaI+NRfcxUJrmfPwIGm63il
+AkEAxCL5HQb2bQr4ByorcMWm/hEP2MZzROV73yF41hPsRC9m66KrheO9HPTJuo3/9s5p+sqGxOlF
+L0NDt4SkosjgGwJAFklyR1uZ/wPJjj611cdBcztlPdqoxssQGnh85BzCj/u3WqBpE2vjvyyvyI5k
+X6zk7S0ljKtt2jny2+00VsBerQJBAJGC1Mg5Oydo5NwD6BiROrPxGo2bpTbu/fhrT8ebHkTz2epl
+U9VQQSQzY1oZMVX8i1m5WUTLPz2yLJIBQVdXqhMCQBGoiuSoSjafUhV7i1cEGpb88h5NBYZzWXGZ
+37sJ5QsW+sJyoNde3xH8vdXhzU7eT82D6X/scw9RZz+/6rCJ4p0=
+-----END RSA PRIVATE KEY-----');
+
+ self::assertSame(true, $email_service->send($user_from, $user_to, $user_reply_to, 'Test DKIM', 'Test Plain Message', '<p>Test Html Message</p>'));
+ }
+
/**
- * Test that the class exists
+ * Data provider for testing email validity
*
- * @return void
+ * @return array<array<bool|string>>
+ */
+ public function emailProvider(): array
+ {
+ return [
+ // Valid emails
+ ['Abc@webtrees.com', true],
+ ['ABC@webtrees.com', true],
+ ['Abc.123@webtrees.com', true],
+ ['user+mailbox/tree=family@webtrees.com', true],
+ ['!#$%&\'*+-/=?^_`.{|}~@webtrees.com', true],
+ ['"Abc@def"@webtrees.com', true],
+ ['"John\ Doe"@webtrees.com', true],
+ ['"Joe.\\Smith"@webtrees.com', true],
+ ['généalogie@webtrees.com', true],
+ // Invalid
+ ['example@invalid.example.com', false],
+ ['example', false],
+ ['example@with space', false],
+ ['example@webtrees.', false],
+ ['example@webtr\ees.com', false],
+ ['example(comment)@example.com', false],
+ ["\x80\x81\x82@\x83\x84\x85.\x86\x87\x88", false],
+ ['user name@example.com', false],
+ ['example.@example.com', false],
+ ['example(example]example@example.co.uk', false],
+ ['a@b.c+&%$.d', false],
+ ['a.b+&%$.c@d', false],
+ ['example@généalogie', false]
+ ];
+ }
+
+ /**
+ * @dataProvider emailProvider
+ *
+ * @covers \Fisharebest\Webtrees\Services\EmailService::isValidEmail
+ *
+ * @param string $email
+ * @param bool $is_valid
+ */
+ public function testIsValidEmail(string $email, bool $is_valid): void
+ {
+ self::assertSame($is_valid, (new EmailService())->isValidEmail($email));
+ }
+
+ /**
+ * @covers \Fisharebest\Webtrees\Services\EmailService::mailSslOptions
+ */
+ public function testMailSslOptions(): void
+ {
+ $options = (new EmailService())->mailSslOptions();
+ self::assertCount(3, $options);
+ self::assertArrayHasKey('ssl', $options);
+ }
+
+ /**
+ * @covers \Fisharebest\Webtrees\Services\EmailService::mailTransportOptions
*/
- public function testClassExists(): void
+ public function testMailTransportOptions(): void
{
- self::assertTrue(class_exists(EmailService::class));
+ $options = (new EmailService())->mailTransportOptions();
+ self::assertCount(function_exists('proc_open') ? 2 : 1, $options);
+ self::assertArrayHasKey('external', $options);
}
}