mirror of
https://github.com/friendica/friendica
synced 2025-04-25 20:30:11 +00:00
Extract System emails from enotify
- Removed every SYSTEM_EMAIL occurrence in enotify - Introduced a "SystemMailBuilder" for build system emails - Replaced every SYSTEM_EMAIL usage in the classes with calling this builder - Added tests for this new Builder - Split the email templates between "base" template for email and concrete usages for different use cases
This commit is contained in:
parent
74490d6594
commit
3291728059
18 changed files with 647 additions and 118 deletions
176
tests/src/Util/Emailer/MailBuilderTest.php
Normal file
176
tests/src/Util/Emailer/MailBuilderTest.php
Normal file
|
@ -0,0 +1,176 @@
|
|||
<?php
|
||||
|
||||
namespace Friendica\Test\src\Util\Emailer;
|
||||
|
||||
use Friendica\App\BaseURL;
|
||||
use Friendica\Core\Config\IConfig;
|
||||
use Friendica\Core\L10n;
|
||||
use Friendica\Object\EMail\IEmail;
|
||||
use Friendica\Test\MockedTest;
|
||||
use Friendica\Test\Util\SampleMailBuilder;
|
||||
use Friendica\Test\Util\VFSTrait;
|
||||
use Friendica\Util\EMailer\MailBuilder;
|
||||
|
||||
/**
|
||||
* This class tests the "MailBuilder" (@see MailBuilder )
|
||||
* Since it's an abstract class and every extended class of it has dependencies, we use a "SampleMailBuilder" (@see SampleMailBuilder ) to make this class work
|
||||
*/
|
||||
class MailBuilderTest extends MockedTest
|
||||
{
|
||||
use VFSTrait;
|
||||
|
||||
/** @var IConfig */
|
||||
private $config;
|
||||
/** @var L10n */
|
||||
private $l10n;
|
||||
/** @var BaseURL */
|
||||
private $baseUrl;
|
||||
|
||||
/** @var string */
|
||||
private $defaultHeaders;
|
||||
|
||||
public function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->setUpVfsDir();
|
||||
|
||||
$this->config = \Mockery::mock(IConfig::class);
|
||||
$this->l10n = \Mockery::mock(L10n::class);
|
||||
$this->baseUrl = \Mockery::mock(BaseURL::class);
|
||||
$this->baseUrl->shouldReceive('getHostname')->andReturn('friendica.local');
|
||||
$this->baseUrl->shouldReceive('get')->andReturn('http://friendica.local');
|
||||
|
||||
$this->defaultHeaders = "";
|
||||
}
|
||||
|
||||
public function assertEmail(IEmail $email, array $asserts)
|
||||
{
|
||||
$this->assertEquals($asserts['subject'] ?? $email->getSubject(), $email->getSubject());
|
||||
$this->assertEquals($asserts['html'] ?? $email->getMessage(), $email->getMessage());
|
||||
$this->assertEquals($asserts['text'] ?? $email->getMessage(true), $email->getMessage(true));
|
||||
$this->assertEquals($asserts['toAddress'] ?? $email->getToAddress(), $email->getToAddress());
|
||||
$this->assertEquals($asserts['fromAddress'] ?? $email->getFromAddress(), $email->getFromAddress());
|
||||
$this->assertEquals($asserts['fromName'] ?? $email->getFromName(), $email->getFromName());
|
||||
$this->assertEquals($asserts['replyTo'] ?? $email->getReplyTo(), $email->getReplyTo());
|
||||
$this->assertEquals($asserts['uid'] ?? $email->getRecipientUid(), $email->getRecipientUid());
|
||||
$this->assertEquals($asserts['header'] ?? $email->getAdditionalMailHeader(), $email->getAdditionalMailHeader());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the builder instance can get created
|
||||
*/
|
||||
public function testBuilderInstance()
|
||||
{
|
||||
$builder = new SampleMailBuilder($this->l10n, $this->baseUrl, $this->config);
|
||||
|
||||
$this->assertInstanceOf(MailBuilder::class, $builder);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the builder can create full rendered emails
|
||||
*
|
||||
* @todo Create test once "Renderer" and "BBCode" are dynamic
|
||||
*/
|
||||
public function testBuilderWithNonRawEmail()
|
||||
{
|
||||
$this->markTestIncomplete('Cannot easily mock Renderer and BBCode, so skipping tests wit them');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the builder can create a "simple" raw mail
|
||||
*/
|
||||
public function testBuilderWithRawEmail()
|
||||
{
|
||||
$builder = new SampleMailBuilder($this->l10n, $this->baseUrl, $this->config);
|
||||
|
||||
$testEmail = $builder
|
||||
->withMessage('Subject', 'Html', 'text')
|
||||
->withRecipient('recipient@friendica.local')
|
||||
->withSender('Sender', 'sender@friendica.local', 'no-reply@friendica.local')
|
||||
->forUser(100)
|
||||
->build(true);
|
||||
|
||||
$this->assertEmail($testEmail, [
|
||||
'subject' => 'Subject',
|
||||
'html' => 'Html',
|
||||
'text' => 'text',
|
||||
'toAddress' => 'recipient@friendica.local',
|
||||
'fromName' => 'Sender',
|
||||
'fromAddress' => 'sender@friendica.local',
|
||||
'noReply' => 'no-reply@friendica.local',
|
||||
'uid' => 100,
|
||||
'headers' => $this->defaultHeaders,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the builder throws an exception in case no recipient
|
||||
*
|
||||
* @expectedException \Friendica\Network\HTTPException\InternalServerErrorException
|
||||
* @expectedExceptionMessage Recipient address is missing.
|
||||
*/
|
||||
public function testBuilderWithEmptyMail()
|
||||
{
|
||||
$builder = new SampleMailBuilder($this->l10n, $this->baseUrl, $this->config);
|
||||
|
||||
$builder->build(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the builder throws an exception in case no sender
|
||||
*
|
||||
* @expectedException \Friendica\Network\HTTPException\InternalServerErrorException
|
||||
* @expectedExceptionMessage Sender address or name is missing.
|
||||
*/
|
||||
public function testBuilderWithEmptySender()
|
||||
{
|
||||
$builder = new SampleMailBuilder($this->l10n, $this->baseUrl, $this->config);
|
||||
|
||||
$builder
|
||||
->withRecipient('test@friendica.local')
|
||||
->build(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the builder is capable of creating "empty" mails if needed (not the decision of the builder if so ..)
|
||||
*/
|
||||
public function testBuilderWithoutMessage()
|
||||
{
|
||||
$builder = new SampleMailBuilder($this->l10n, $this->baseUrl, $this->config);
|
||||
|
||||
$testEmail = $builder
|
||||
->withRecipient('recipient@friendica.local')
|
||||
->withSender('Sender', 'sender@friendica.local')
|
||||
->build(true);
|
||||
|
||||
$this->assertEmail($testEmail, [
|
||||
'toAddress' => 'recipient@friendica.local',
|
||||
'fromName' => 'Sender',
|
||||
'fromAddress' => 'sender@friendica.local',
|
||||
'noReply' => 'sender@friendica.local', // no-reply is set same as address in case it's not set
|
||||
'headers' => $this->defaultHeaders,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if the builder sets for the text the same as for
|
||||
*/
|
||||
public function testBuilderWithJustPreamble()
|
||||
{
|
||||
$builder = new SampleMailBuilder($this->l10n, $this->baseUrl, $this->config);
|
||||
|
||||
$testEmail = $builder
|
||||
->withRecipient('recipient@friendica.local')
|
||||
->withSender('Sender', 'sender@friendica.local')
|
||||
->build(true);
|
||||
|
||||
$this->assertEmail($testEmail, [
|
||||
'toAddress' => 'recipient@friendica.local',
|
||||
'fromName' => 'Sender',
|
||||
'fromAddress' => 'sender@friendica.local',
|
||||
'noReply' => 'sender@friendica.local', // no-reply is set same as address in case it's not set,
|
||||
'headers' => $this->defaultHeaders,
|
||||
]);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue