From 01057c7ff125890a6bcbe3b965973e281d6f4433 Mon Sep 17 00:00:00 2001 From: Rostislav Wolny Date: Thu, 3 Sep 2020 10:50:12 +0200 Subject: [PATCH] Add assets url factory method to form template [MAILPOET-3076] --- lib/Form/Templates/FormTemplate.php | 15 +++++++++++++++ lib/Form/Templates/TemplateRepository.php | 10 +++++++++- .../Form/Templates/TemplatesRepositoryTest.php | 6 +++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/lib/Form/Templates/FormTemplate.php b/lib/Form/Templates/FormTemplate.php index f0463514e4..ad7c7d3f14 100644 --- a/lib/Form/Templates/FormTemplate.php +++ b/lib/Form/Templates/FormTemplate.php @@ -3,6 +3,7 @@ namespace MailPoet\Form\Templates; use MailPoet\Entities\FormEntity; +use MailPoet\Util\CdnAssetUrl; abstract class FormTemplate { const DEFAULT_STYLES = <<cdnAssetUrl = $cdnAssetUrl; + } + abstract public function getName(): string; abstract public function getBody(): array; @@ -103,4 +114,8 @@ EOL; $formEntity->setStyles($this->getStyles()); return $formEntity; } + + protected function getAssetUrl(string $filename): string { + return $this->cdnAssetUrl->generateCdnUrl("form-templates/{$this->assetsDirectory}/$filename"); + } } diff --git a/lib/Form/Templates/TemplateRepository.php b/lib/Form/Templates/TemplateRepository.php index 2c2a85436c..cf5f78815f 100644 --- a/lib/Form/Templates/TemplateRepository.php +++ b/lib/Form/Templates/TemplateRepository.php @@ -25,11 +25,15 @@ use MailPoet\Form\Templates\Templates\Template6Popup; use MailPoet\Form\Templates\Templates\Template6SlideIn; use MailPoet\Form\Templates\Templates\Template6Widget; use MailPoet\UnexpectedValueException; +use MailPoet\Util\CdnAssetUrl; class TemplateRepository { const INITIAL_FORM_TEMPLATE = InitialForm::ID; const DEFAULT_FORM_TEMPLATE = DefaultForm::ID; + /** @var CdnAssetUrl */ + private $cdnAssetUrl; + private $templates = [ InitialForm::ID => InitialForm::class, DefaultForm::ID => DefaultForm::class, @@ -55,13 +59,17 @@ class TemplateRepository { Template10Widget::ID => Template10Widget::class, ]; + public function __construct(CdnAssetUrl $cdnAssetUrl) { + $this->cdnAssetUrl = $cdnAssetUrl; + } + public function getFormTemplate(string $templateId): FormTemplate { if (!isset($this->templates[$templateId])) { throw UnexpectedValueException::create() ->withErrors(["Template with id $templateId doesn't exist."]); } /** @var FormTemplate $template */ - $template = new $this->templates[$templateId](); + $template = new $this->templates[$templateId]($this->cdnAssetUrl); return $template; } diff --git a/tests/unit/Form/Templates/TemplatesRepositoryTest.php b/tests/unit/Form/Templates/TemplatesRepositoryTest.php index 9dd6bb368a..f509c7b4e1 100644 --- a/tests/unit/Form/Templates/TemplatesRepositoryTest.php +++ b/tests/unit/Form/Templates/TemplatesRepositoryTest.php @@ -4,6 +4,7 @@ namespace MailPoet\Test\Form\Templates; use MailPoet\Form\Templates\FormTemplate; use MailPoet\Form\Templates\TemplateRepository; +use MailPoet\Util\CdnAssetUrl; class TemplatesRepositoryTest extends \MailPoetUnitTest { /** @var TemplateRepository */ @@ -11,7 +12,10 @@ class TemplatesRepositoryTest extends \MailPoetUnitTest { public function _before() { parent::_before(); - $this->repository = new TemplateRepository(); + $cdnAssetsMock = $this->createMock(CdnAssetUrl::class); + $cdnAssetsMock->method('generateCdnUrl') + ->willReturn('http://example.com/image.png'); + $this->repository = new TemplateRepository($cdnAssetsMock); } public function testItCanBuildFormTemplate() {