diff options
| author | Jonathan Jaubart <dev@jaubart.com> | 2021-09-04 13:28:31 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-04 13:28:31 +0100 |
| commit | e1ae561a17f12c36364f60382c912ea1727b2cb7 (patch) | |
| tree | 991470c0b0205dd6170d940ed3a2c201d577c504 /tests/app/Services | |
| parent | d7d5645b20aba42f03b2473df6de4a14afeaaa97 (diff) | |
| download | webtrees-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.php | 120 |
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); } } |
