Skip to content

Commit 4215c40

Browse files
committed
Update: TemplateManager update
1 parent 1bb0b78 commit 4215c40

File tree

3 files changed

+100
-19
lines changed

3 files changed

+100
-19
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\Core\Domain\Messaging\Model\Dto;
6+
7+
class UpdateTemplateDto
8+
{
9+
/**
10+
* @SuppressWarnings("BooleanArgumentFlag")
11+
*/
12+
public function __construct(
13+
public readonly ?string $title = null,
14+
public readonly ?string $content = null,
15+
public readonly ?string $text = null,
16+
public readonly ?string $fileContent = null,
17+
public readonly bool $shouldCheckLinks = false,
18+
public readonly bool $shouldCheckImages = false,
19+
public readonly bool $shouldCheckExternalImages = false,
20+
) {
21+
}
22+
}

src/Domain/Messaging/Service/Manager/TemplateManager.php

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,11 @@
66

77
use PhpList\Core\Domain\Common\Model\ValidationContext;
88
use PhpList\Core\Domain\Messaging\Model\Dto\CreateTemplateDto;
9+
use PhpList\Core\Domain\Messaging\Model\Dto\UpdateTemplateDto;
910
use PhpList\Core\Domain\Messaging\Model\Template;
1011
use PhpList\Core\Domain\Messaging\Repository\TemplateRepository;
1112
use PhpList\Core\Domain\Messaging\Validator\TemplateImageValidator;
1213
use PhpList\Core\Domain\Messaging\Validator\TemplateLinkValidator;
13-
use PhpList\Core\Domain\Subscription\Model\Dto\UpdateSubscriberDto;
14-
use PhpList\Core\Domain\Subscription\Model\Subscriber;
1514

1615
class TemplateManager
1716
{
@@ -35,11 +34,11 @@ public function __construct(
3534
public function create(CreateTemplateDto $createTemplateDto): Template
3635
{
3736
$template = (new Template($createTemplateDto->title))
38-
->setContent($createTemplateDto->content)
3937
->setText($createTemplateDto->text);
4038

41-
if ($createTemplateDto->fileContent) {
42-
$template->setContent($createTemplateDto->fileContent);
39+
$content = $createTemplateDto->fileContent ?? $createTemplateDto->content;
40+
if ($content !== null) {
41+
$template->setContent($content);
4342
}
4443

4544
$context = (new ValidationContext())
@@ -59,19 +58,38 @@ public function create(CreateTemplateDto $createTemplateDto): Template
5958
return $template;
6059
}
6160

62-
public function update(UpdateSubscriberDto $updateSubscriberDto): Subscriber
61+
public function update(Template $template, UpdateTemplateDto $updateTemplateDto): Template
6362
{
64-
/** @var Subscriber $subscriber */
65-
$subscriber = $this->templateRepository->find($updateSubscriberDto->subscriberId);
63+
if ($updateTemplateDto->title !== null) {
64+
$template->setTitle($updateTemplateDto->title);
65+
}
66+
67+
if ($updateTemplateDto->text !== null) {
68+
$template->setText($updateTemplateDto->text);
69+
}
70+
71+
$content = $updateTemplateDto->fileContent ?? $updateTemplateDto->content;
72+
if ($content !== null) {
73+
$template->setContent($content);
74+
}
75+
76+
$context = (new ValidationContext())
77+
->set('checkLinks', $updateTemplateDto->shouldCheckLinks)
78+
->set('checkImages', $updateTemplateDto->shouldCheckImages)
79+
->set('checkExternalImages', $updateTemplateDto->shouldCheckExternalImages);
80+
81+
$this->templateLinkValidator->validate($template->getContent() ?? '', $context);
82+
83+
$imageUrls = $this->templateImageManager->extractAllImages($template->getContent() ?? '');
84+
$this->templateImageValidator->validate($imageUrls, $context);
6685

67-
$subscriber->setEmail($updateSubscriberDto->email);
68-
$subscriber->setConfirmed($updateSubscriberDto->confirmed);
69-
$subscriber->setBlacklisted($updateSubscriberDto->blacklisted);
70-
$subscriber->setHtmlEmail($updateSubscriberDto->htmlEmail);
71-
$subscriber->setDisabled($updateSubscriberDto->disabled);
72-
$subscriber->setExtraData($updateSubscriberDto->additionalData);
86+
foreach ($template->getImages() as $image) {
87+
$this->templateImageManager->delete($image);
88+
}
89+
90+
$this->templateImageManager->createImagesFromImagePaths($imageUrls, $template);
7391

74-
return $subscriber;
92+
return $template;
7593
}
7694

7795
public function delete(Template $template): void

tests/Unit/Domain/Messaging/Service/Manager/TemplateManagerTest.php

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace PhpList\Core\Tests\Unit\Domain\Messaging\Service\Manager;
66

77
use PhpList\Core\Domain\Messaging\Model\Dto\CreateTemplateDto;
8+
use PhpList\Core\Domain\Messaging\Model\Dto\UpdateTemplateDto;
89
use PhpList\Core\Domain\Messaging\Model\Template;
910
use PhpList\Core\Domain\Messaging\Repository\TemplateRepository;
1011
use PhpList\Core\Domain\Messaging\Service\Manager\TemplateImageManager;
@@ -30,13 +31,53 @@ protected function setUp(): void
3031
$this->templateImageValidator = $this->createMock(TemplateImageValidator::class);
3132

3233
$this->manager = new TemplateManager(
33-
$this->templateRepository,
34-
$this->templateImageManager,
35-
$this->templateLinkValidator,
36-
$this->templateImageValidator
34+
templateRepository: $this->templateRepository,
35+
templateImageManager: $this->templateImageManager,
36+
templateLinkValidator: $this->templateLinkValidator,
37+
templateImageValidator: $this->templateImageValidator
3738
);
3839
}
3940

41+
public function testUpdateTemplateSuccessfully(): void
42+
{
43+
$existing = (new Template('Old Title'))
44+
->setContent('<html><body>Old</body></html>')
45+
->setText(null);
46+
47+
$dto = new UpdateTemplateDto(
48+
title: 'New Title',
49+
content: '<html><body>New</body></html>',
50+
text: 'New text',
51+
fileContent: null,
52+
shouldCheckLinks: true,
53+
shouldCheckImages: true,
54+
shouldCheckExternalImages: true,
55+
);
56+
57+
$this->templateLinkValidator->expects($this->once())
58+
->method('validate')
59+
->with($dto->content, $this->anything());
60+
61+
$this->templateImageManager->expects($this->once())
62+
->method('extractAllImages')
63+
->with($dto->content)
64+
->willReturn(['a.png']);
65+
66+
$this->templateImageValidator->expects($this->once())
67+
->method('validate')
68+
->with(['a.png'], $this->anything());
69+
70+
$this->templateImageManager->expects($this->once())
71+
->method('createImagesFromImagePaths')
72+
->with(['a.png'], $this->isInstanceOf(Template::class));
73+
74+
$updated = $this->manager->update(template: $existing, updateTemplateDto: $dto);
75+
76+
$this->assertSame('New Title', $updated->getTitle());
77+
$this->assertSame('New text', $updated->getText());
78+
$this->assertSame($dto->content, $updated->getContent());
79+
}
80+
4081
public function testCreateTemplateSuccessfully(): void
4182
{
4283
$request = new CreateTemplateDto(

0 commit comments

Comments
 (0)