VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /var/www/html/webtrees/tests/app/Services/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/webtrees/tests/app/Services/EmailServiceTest.php
<?php

/**
 * webtrees: online genealogy
 * Copyright (C) 2023 webtrees development team
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU 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 General Public License for more details.
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
 */

declare(strict_types=1);

namespace Fisharebest\Webtrees\Services;

use Fisharebest\Webtrees\Contracts\UserInterface;
use Fisharebest\Webtrees\Site;
use Fisharebest\Webtrees\TestCase;

use function function_exists;

/**
 * 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::assertTrue($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::assertTrue($email_service->send($user_from, $user_to, $user_reply_to, 'Test DKIM', 'Test Plain Message', '<p>Test Html Message</p>'));
    }

    /**
     * Data provider for testing email validity
     *
     * @return array<array<bool|string>>
     */
    public static 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
     */
    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 testMailTransportOptions(): void
    {
        $options = (new EmailService())->mailTransportOptions();
        self::assertCount(function_exists('proc_open') ? 2 : 1, $options);
        self::assertArrayHasKey('external', $options);
    }
}

VaKeR 2022