+ +
| + |
+
+
+
+
+
+
+
|
+ + |
Full text content
', + footer: 'Footer text' + ); + + $this->html2Text + ->expects($this->once()) + ->method('__invoke') + ->with('Full text content
') + ->willReturn('Full text content'); + + $messageContent = $this->builder->build($dto); + + $this->assertSame('Full text content', $messageContent->getTextMessage()); + } + public function testThrowsExceptionOnInvalidDto(): void { $this->expectException(InvalidDtoTypeException::class); + $this->html2Text + ->expects($this->never()) + ->method('__invoke'); + $invalidDto = new \stdClass(); $this->builder->build($invalidDto); } diff --git a/tests/Unit/Domain/Messaging/Service/Builder/MessageFormatBuilderTest.php b/tests/Unit/Domain/Messaging/Service/Builder/MessageFormatBuilderTest.php index ed4645ed..0e682524 100644 --- a/tests/Unit/Domain/Messaging/Service/Builder/MessageFormatBuilderTest.php +++ b/tests/Unit/Domain/Messaging/Service/Builder/MessageFormatBuilderTest.php @@ -4,34 +4,51 @@ namespace PhpList\Core\Tests\Unit\Domain\Messaging\Service\Builder; -use PhpList\Core\Domain\Messaging\Exception\InvalidDtoTypeException; +use PhpList\Core\Domain\Messaging\Model\Dto\CreateMessageDto; +use PhpList\Core\Domain\Messaging\Model\Dto\Message\MessageContentDto; use PhpList\Core\Domain\Messaging\Model\Dto\Message\MessageFormatDto; -use PhpList\Core\Domain\Messaging\Service\Builder\MessageFormatBuilder; +use PhpList\Core\Domain\Messaging\Model\Dto\Message\MessageMetadataDto; +use PhpList\Core\Domain\Messaging\Model\Dto\Message\MessageOptionsDto; +use PhpList\Core\Domain\Messaging\Model\Dto\Message\MessageScheduleDto; use PHPUnit\Framework\TestCase; +use PhpList\Core\Domain\Messaging\Model\Message\MessageFormat; +use PhpList\Core\Domain\Messaging\Service\Builder\MessageFormatBuilder; -class MessageFormatBuilderTest extends TestCase +final class MessageFormatBuilderTest extends TestCase { - private MessageFormatBuilder $builder; - - protected function setUp(): void + public function testBuildSetsHtmlFormattedToFalseWhenContentIsPlainText(): void { - $this->builder = new MessageFormatBuilder(); + $dto = $this->createDto('Plain text content', 'text'); + + $builder = new MessageFormatBuilder(); + $result = $builder->build($dto); + + self::assertInstanceOf(MessageFormat::class, $result); + self::assertFalse($result->isHtmlFormatted()); + self::assertSame('text', $result->getSendFormat()); } - public function testBuildsMessageFormatSuccessfully(): void + public function testBuildSetsHtmlFormattedToTrueWhenContentContainsHtml(): void { - $dto = new MessageFormatDto(htmlFormated: true, sendFormat: 'html', formatOptions: ['html', 'text']); - $messageFormat = $this->builder->build($dto); + $dto = $this->createDto('Hello world
', 'html'); + + $builder = new MessageFormatBuilder(); + $result = $builder->build($dto); - $this->assertSame(true, $messageFormat->isHtmlFormatted()); - $this->assertSame('html', $messageFormat->getSendFormat()); + self::assertInstanceOf(MessageFormat::class, $result); + self::assertTrue($result->isHtmlFormatted()); + self::assertSame('html', $result->getSendFormat()); } - public function testThrowsExceptionOnInvalidDto(): void + private function createDto(string $text, string $sendFormat): CreateMessageDto { - $this->expectException(InvalidDtoTypeException::class); - - $invalidDto = new \stdClass(); - $this->builder->build($invalidDto); + return new CreateMessageDto( + content: new MessageContentDto(subject: '', text: $text, footer: ''), + format: new MessageFormatDto(sendFormat: $sendFormat), + metadata: $this->createMock(MessageMetadataDto::class), + options: $this->createMock(MessageOptionsDto::class), + schedule: $this->createMock(MessageScheduleDto::class), + templateId: null, + ); } } diff --git a/tests/Unit/Domain/Messaging/Service/Manager/MessageManagerTest.php b/tests/Unit/Domain/Messaging/Service/Manager/MessageManagerTest.php index cbbbcb68..df00e584 100644 --- a/tests/Unit/Domain/Messaging/Service/Manager/MessageManagerTest.php +++ b/tests/Unit/Domain/Messaging/Service/Manager/MessageManagerTest.php @@ -4,7 +4,10 @@ namespace PhpList\Core\Tests\Unit\Domain\Messaging\Service\Manager; +use DateTime; +use InvalidArgumentException; use PhpList\Core\Domain\Identity\Model\Administrator; +use PhpList\Core\Domain\Messaging\Model\ListMessage; use PhpList\Core\Domain\Messaging\Model\Dto\CreateMessageDto; use PhpList\Core\Domain\Messaging\Model\Dto\Message\MessageContentDto; use PhpList\Core\Domain\Messaging\Model\Dto\Message\MessageFormatDto; @@ -13,21 +16,65 @@ use PhpList\Core\Domain\Messaging\Model\Dto\Message\MessageScheduleDto; use PhpList\Core\Domain\Messaging\Model\Dto\UpdateMessageDto; use PhpList\Core\Domain\Messaging\Model\Message; +use PhpList\Core\Domain\Messaging\Model\Message\MessageFormat; +use PhpList\Core\Domain\Messaging\Model\Message\MessageMetadata; +use PhpList\Core\Domain\Messaging\Model\Message\MessageOptions; +use PhpList\Core\Domain\Messaging\Model\Message\MessageSchedule; use PhpList\Core\Domain\Messaging\Model\Message\MessageContent; use PhpList\Core\Domain\Messaging\Repository\MessageRepository; use PhpList\Core\Domain\Messaging\Service\Builder\MessageBuilder; use PhpList\Core\Domain\Messaging\Service\Manager\MessageManager; +use PhpList\Core\Domain\Subscription\Model\SubscriberList; use PHPUnit\Framework\TestCase; +use Symfony\Component\Validator\Exception\ValidatorException; class MessageManagerTest extends TestCase { + public function testCopyAsDraftMessagePersistsClonedDraftMessage(): void + { + $messageRepository = $this->createMock(MessageRepository::class); + $messageBuilder = $this->createMock(MessageBuilder::class); + $manager = new MessageManager($messageRepository, $messageBuilder); + + $message = new Message( + format: new MessageFormat(true, 'html'), + schedule: new MessageSchedule( + repeatInterval: 0, + repeatUntil: null, + requeueInterval: 0, + requeueUntil: null, + embargo: new DateTime('2025-04-17T09:00:00+00:00') + ), + metadata: new MessageMetadata(Message\MessageStatus::Submitted), + content: new MessageContent('Subject', 'Full text', 'Short text', 'Footer'), + options: new MessageOptions('from@example.com', 'to@example.com', 'reply@example.com', 'all-users'), + owner: null + ); + + $messageRepository->expects($this->once()) + ->method('persist') + ->with($this->callback(function (Message $persistedMessage) use ($message): bool { + $this->assertNotSame($message, $persistedMessage); + $this->assertSame(Message\MessageStatus::Draft, $persistedMessage->getMetadata()->getStatus()); + $this->assertTrue($persistedMessage->getFormat()->isHtmlFormatted()); + $this->assertSame('html', $persistedMessage->getFormat()->getSendFormat()); + + return true; + })); + + $result = $manager->copyAsDraftMessage($message, $this->createMock(Administrator::class)); + + $this->assertSame(Message\MessageStatus::Draft, $result->getMetadata()->getStatus()); + $this->assertNotSame($message, $result); + } + public function testCreateMessageReturnsPersistedMessage(): void { $messageRepository = $this->createMock(MessageRepository::class); $messageBuilder = $this->createMock(MessageBuilder::class); $manager = new MessageManager($messageRepository, $messageBuilder); - $format = new MessageFormatDto(true, 'html', ['html']); + $format = new MessageFormatDto('html'); $schedule = new MessageScheduleDto( embargo: '2025-04-17T09:00:00+00:00', repeatInterval: 60 * 24, @@ -36,7 +83,7 @@ public function testCreateMessageReturnsPersistedMessage(): void requeueUntil: '2025-04-20T00:00:00+00:00', ); $metadata = new MessageMetadataDto(Message\MessageStatus::Draft); - $content = new MessageContentDto('Subject', 'Full text', 'Short text', 'Footer'); + $content = new MessageContentDto(subject: 'Subject', text: 'Full text', footer: 'Footer'); $options = new MessageOptionsDto('from@example.com', 'to@example.com', 'reply@example.com', 'all-users'); $request = new CreateMessageDto( @@ -81,7 +128,7 @@ public function testUpdateMessageReturnsUpdatedMessage(): void $messageBuilder = $this->createMock(MessageBuilder::class); $manager = new MessageManager($messageRepository, $messageBuilder); - $format = new MessageFormatDto(false, 'text', ['text']); + $format = new MessageFormatDto('text'); $schedule = new MessageScheduleDto( embargo: '2025-04-17T09:00:00+00:00', repeatInterval: 0, @@ -91,16 +138,15 @@ public function testUpdateMessageReturnsUpdatedMessage(): void ); $metadata = new MessageMetadataDto(Message\MessageStatus::Draft); $content = new MessageContentDto( - 'Updated Subject', - 'Updated Full text', - 'Updated Short text', - 'Updated Footer' + subject: 'Updated Subject', + text: 'Updated Full text', + footer: 'Updated Footer' ); $options = new MessageOptionsDto( - 'newfrom@example.com', - 'newto@example.com', - 'newreply@example.com', - 'active-users' + fromField: 'newfrom@example.com', + toField: 'newto@example.com', + replyTo: 'newreply@example.com', + userSelection: 'active-users' ); $updateRequest = new UpdateMessageDto( @@ -134,4 +180,63 @@ public function testUpdateMessageReturnsUpdatedMessage(): void $this->assertSame('Updated Subject', $message->getContent()->getSubject()); $this->assertSame(Message\MessageStatus::Draft, $message->getMetadata()->getStatus()); } + + public function testUpdateStatusThrowsWhenSubmittedWithoutListMessage(): void + { + $messageRepository = $this->createMock(MessageRepository::class); + $messageBuilder = $this->createMock(MessageBuilder::class); + $manager = new MessageManager($messageRepository, $messageBuilder); + + $message = new Message( + format: new MessageFormat(true, 'html'), + schedule: new MessageSchedule( + repeatInterval: 0, + repeatUntil: null, + requeueInterval: 0, + requeueUntil: null, + embargo: new DateTime('2025-04-17T09:00:00+00:00') + ), + metadata: new MessageMetadata(Message\MessageStatus::Draft), + content: new MessageContent('Subject', 'Body text', 'Short text', 'Footer'), + options: new MessageOptions('from@example.com', 'to@example.com', 'reply@example.com', 'all-users'), + owner: null + ); + + $this->expectException(ValidatorException::class); + $this->expectExceptionMessage('Cannot submit.'); + + $manager->updateStatus($message, Message\MessageStatus::Submitted); + } + + public function testUpdateStatusSetsSubmittedWhenRequiredFieldsAndListArePresent(): void + { + $messageRepository = $this->createMock(MessageRepository::class); + $messageBuilder = $this->createMock(MessageBuilder::class); + $manager = new MessageManager($messageRepository, $messageBuilder); + + $message = new Message( + format: new MessageFormat(true, 'html'), + schedule: new MessageSchedule( + repeatInterval: 0, + repeatUntil: null, + requeueInterval: 0, + requeueUntil: null, + embargo: new DateTime('2025-04-17T09:00:00+00:00') + ), + metadata: new MessageMetadata(Message\MessageStatus::Draft), + content: new MessageContent('Subject', 'Body text', 'Short text', 'Footer'), + options: new MessageOptions('from@example.com', 'to@example.com', 'reply@example.com', 'all-users'), + owner: null + ); + + $listMessage = new ListMessage(); + $listMessage->setMessage($message); + $listMessage->setList($this->createMock(SubscriberList::class)); + $message->getListMessages()->add($listMessage); + + $updated = $manager->updateStatus($message, Message\MessageStatus::Submitted); + + $this->assertSame($message, $updated); + $this->assertSame(Message\MessageStatus::Submitted, $message->getMetadata()->getStatus()); + } } diff --git a/tests/Unit/Domain/Messaging/Service/Manager/TemplateImageManagerTest.php b/tests/Unit/Domain/Messaging/Service/Manager/TemplateImageManagerTest.php index 238bcd06..63b3a4f9 100644 --- a/tests/Unit/Domain/Messaging/Service/Manager/TemplateImageManagerTest.php +++ b/tests/Unit/Domain/Messaging/Service/Manager/TemplateImageManagerTest.php @@ -8,12 +8,17 @@ use PhpList\Core\Domain\Messaging\Model\Template; use PhpList\Core\Domain\Messaging\Model\TemplateImage; use PhpList\Core\Domain\Messaging\Repository\TemplateImageRepository; +use PhpList\Core\Domain\Messaging\Service\Manager\ImageProvider; use PhpList\Core\Domain\Messaging\Service\Manager\TemplateImageManager; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; class TemplateImageManagerTest extends TestCase { + private const ONE_PIXEL_PNG = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABGdBTUEAALGPC/' + . 'xhBQAAAAZQTFRF////AAAAVcLTfgAAAAF0Uk5TAEDm2GYAAAABYktHRACIBR1IAAAACXBIWXMAAAsSAAALEgHS3X78' + . 'AAAAB3RJTUUH0gQCEx05cqKA8gAAAApJREFUeJxjYAAAAAIAAUivpHEAAAAASUVORK5CYII='; + private TemplateImageRepository&MockObject $templateImageRepository; private ConfigProvider&MockObject $configProvider; private TemplateImageManager $manager; @@ -26,6 +31,7 @@ protected function setUp(): void $this->manager = new TemplateImageManager( templateImageRepository: $this->templateImageRepository, configProvider: $this->configProvider, + imageProvider: $this->createMock(ImageProvider::class), ); } @@ -33,7 +39,8 @@ public function testCreateImagesFromImagePaths(): void { $template = $this->createMock(Template::class); - $this->templateImageRepository->expects($this->exactly(2)) + $this->templateImageRepository->method('poweredByImageExists')->willReturn(false); + $this->templateImageRepository->expects($this->exactly(2 + 1)) ->method('persist') ->with($this->isInstanceOf(TemplateImage::class)); @@ -45,6 +52,49 @@ public function testCreateImagesFromImagePaths(): void } } + public function testCreateImagesFromImagePathsStoresImageDataAndReplacesExistingImage(): void + { + $template = $this->createMock(Template::class); + $template->method('getId')->willReturn(77); + + $existingImage = $this->createMock(TemplateImage::class); + $capturedImage = null; + + $tmpFile = tempnam(sys_get_temp_dir(), 'img_'); + if ($tmpFile === false) { + $this->fail('Failed to create temporary file'); + } + + file_put_contents($tmpFile, (string) base64_decode(self::ONE_PIXEL_PNG, true)); + + $this->templateImageRepository->method('poweredByImageExists')->willReturn(true); + $this->templateImageRepository->expects($this->once()) + ->method('findByTemplateIdAndFilename') + ->with(77, $tmpFile) + ->willReturn($existingImage); + $this->templateImageRepository->expects($this->once()) + ->method('remove') + ->with($existingImage); + $this->templateImageRepository->expects($this->once()) + ->method('persist') + ->with($this->callback(static function (TemplateImage $image) use (&$capturedImage): bool { + $capturedImage = $image; + return true; + })); + + try { + $this->manager->createImagesFromImagePaths([$tmpFile], $template); + } finally { + unlink($tmpFile); + } + + $this->assertInstanceOf(TemplateImage::class, $capturedImage); + $this->assertSame(1, $capturedImage->getWidth()); + $this->assertSame(1, $capturedImage->getHeight()); + $this->assertSame('image/png', $capturedImage->getMimeType()); + $this->assertSame(self::ONE_PIXEL_PNG, $capturedImage->getData()); + } + public function testGuessMimeType(): void { $reflection = new \ReflectionClass($this->manager); diff --git a/tests/Unit/Domain/Messaging/Service/Manager/TemplateManagerTest.php b/tests/Unit/Domain/Messaging/Service/Manager/TemplateManagerTest.php index e2f79d33..efcb8b00 100644 --- a/tests/Unit/Domain/Messaging/Service/Manager/TemplateManagerTest.php +++ b/tests/Unit/Domain/Messaging/Service/Manager/TemplateManagerTest.php @@ -4,10 +4,12 @@ namespace PhpList\Core\Tests\Unit\Domain\Messaging\Service\Manager; +use InvalidArgumentException; use PhpList\Core\Domain\Messaging\Model\Dto\CreateTemplateDto; use PhpList\Core\Domain\Messaging\Model\Dto\UpdateTemplateDto; use PhpList\Core\Domain\Messaging\Model\Template; use PhpList\Core\Domain\Messaging\Repository\TemplateRepository; +use PhpList\Core\Domain\Messaging\Service\Mapper\DefaultTemplateMapper; use PhpList\Core\Domain\Messaging\Service\Manager\TemplateImageManager; use PhpList\Core\Domain\Messaging\Service\Manager\TemplateManager; use PhpList\Core\Domain\Messaging\Validator\TemplateImageValidator; @@ -21,6 +23,7 @@ class TemplateManagerTest extends TestCase private TemplateImageManager&MockObject $templateImageManager; private TemplateLinkValidator&MockObject $templateLinkValidator; private TemplateImageValidator&MockObject $templateImageValidator; + private DefaultTemplateMapper&MockObject $defaultTemplateMapper; private TemplateManager $manager; protected function setUp(): void @@ -29,12 +32,14 @@ protected function setUp(): void $this->templateImageManager = $this->createMock(TemplateImageManager::class); $this->templateLinkValidator = $this->createMock(TemplateLinkValidator::class); $this->templateImageValidator = $this->createMock(TemplateImageValidator::class); + $this->defaultTemplateMapper = $this->createMock(DefaultTemplateMapper::class); $this->manager = new TemplateManager( templateRepository: $this->templateRepository, templateImageManager: $this->templateImageManager, templateLinkValidator: $this->templateLinkValidator, - templateImageValidator: $this->templateImageValidator + templateImageValidator: $this->templateImageValidator, + defaultTemplateMapper: $this->defaultTemplateMapper ); } @@ -126,4 +131,91 @@ public function testDeleteTemplate(): void $this->manager->delete($template); } + + public function testListDefaultsReturnsDefaultTemplateDefinitions(): void + { + $this->defaultTemplateMapper->expects($this->once()) + ->method('list') + ->willReturn([ + [ + 'key' => 'system', + 'name' => 'System', + 'description' => 'Default system email wrapper', + 'file' => 'system.html', + ], + [ + 'key' => 'responsive', + 'name' => 'Responsive', + 'description' => 'Responsive email layout', + 'file' => 'responsive.html', + ], + ]); + + $defaults = $this->manager->listDefaults(); + + $this->assertIsArray($defaults); + $this->assertCount(2, $defaults); + $this->assertSame('system', $defaults[0]['key']); + $this->assertSame('System', $defaults[0]['name']); + $this->assertSame('system.html', $defaults[0]['file']); + $this->assertArrayHasKey('description', $defaults[0]); + } + + public function testCreateDefaultTemplateCreatesTemplateByKey(): void + { + $this->defaultTemplateMapper->expects($this->once()) + ->method('findByKey') + ->with('system') + ->willReturn([ + 'key' => 'system', + 'name' => 'System', + 'description' => 'Default system email wrapper', + 'file' => 'system.html', + ]); + + $this->defaultTemplateMapper->expects($this->once()) + ->method('loadContent') + ->with('system.html') + ->willReturn('[CONTENT]'); + + $this->templateLinkValidator->expects($this->once()) + ->method('validate') + ->with($this->isType('string'), $this->anything()); + + $this->templateImageManager->expects($this->once()) + ->method('extractAllImages') + ->with($this->isType('string')) + ->willReturn([]); + + $this->templateImageValidator->expects($this->once()) + ->method('validate') + ->with([], $this->anything()); + + $this->templateRepository->expects($this->once()) + ->method('persist') + ->with($this->isInstanceOf(Template::class)); + + $this->templateImageManager->expects($this->once()) + ->method('createImagesFromImagePaths') + ->with([], $this->isInstanceOf(Template::class)); + + $template = $this->manager->createDefaultTemplate('system'); + + $this->assertSame('System', $template->getTitle()); + $this->assertNotNull($template->getContent()); + $this->assertStringContainsString('[CONTENT]', $template->getContent()); + } + + public function testCreateDefaultTemplateThrowsForUnknownKey(): void + { + $this->defaultTemplateMapper->expects($this->once()) + ->method('findByKey') + ->with('missing') + ->willThrowException(new InvalidArgumentException('Default template with key "missing" does not exist.')); + + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Default template with key "missing" does not exist.'); + + $this->manager->createDefaultTemplate('missing'); + } } diff --git a/tests/Unit/Domain/Messaging/Service/Mapper/DefaultTemplateMapperTest.php b/tests/Unit/Domain/Messaging/Service/Mapper/DefaultTemplateMapperTest.php new file mode 100644 index 00000000..03f186bd --- /dev/null +++ b/tests/Unit/Domain/Messaging/Service/Mapper/DefaultTemplateMapperTest.php @@ -0,0 +1,57 @@ +mapper = new DefaultTemplateMapper(); + } + + public function testListReturnsConfiguredDefaults(): void + { + $defaults = $this->mapper->list(); + + $this->assertIsArray($defaults); + $this->assertNotEmpty($defaults); + $this->assertSame('system', $defaults[0]['key']); + $this->assertSame('System', $defaults[0]['name']); + $this->assertSame('system.html', $defaults[0]['file']); + $this->assertArrayHasKey('description', $defaults[0]); + } + + public function testFindByKeyReturnsExpectedTemplate(): void + { + $template = $this->mapper->findByKey('responsive'); + + $this->assertSame('responsive', $template['key']); + $this->assertSame('Responsive', $template['name']); + $this->assertSame('responsive.html', $template['file']); + } + + public function testFindByKeyThrowsForUnknownKey(): void + { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Default template with key "unknown" does not exist.'); + + $this->mapper->findByKey('unknown'); + } + + public function testLoadContentReadsTemplateFile(): void + { + $content = $this->mapper->loadContent('system.html'); + + $this->assertIsString($content); + $this->assertNotSame('', $content); + $this->assertStringContainsString('[CONTENT]', $content); + } +} diff --git a/tests/Unit/Domain/Messaging/Service/MessageDataLoaderTest.php b/tests/Unit/Domain/Messaging/Service/MessageDataLoaderTest.php index c6174a44..5999ce50 100644 --- a/tests/Unit/Domain/Messaging/Service/MessageDataLoaderTest.php +++ b/tests/Unit/Domain/Messaging/Service/MessageDataLoaderTest.php @@ -7,11 +7,13 @@ use Doctrine\Common\Collections\ArrayCollection; use PhpList\Core\Domain\Configuration\Model\ConfigOption; use PhpList\Core\Domain\Configuration\Service\Provider\ConfigProvider; +use PhpList\Core\Domain\Messaging\Model\ListMessage; use PhpList\Core\Domain\Messaging\Model\Message; use PhpList\Core\Domain\Messaging\Model\MessageData; use PhpList\Core\Domain\Messaging\Repository\MessageDataRepository; use PhpList\Core\Domain\Messaging\Repository\MessageRepository; use PhpList\Core\Domain\Messaging\Service\MessageDataLoader; +use PhpList\Core\Domain\Subscription\Model\SubscriberList; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; @@ -61,6 +63,11 @@ public function testLoadsMessageDataMergesAndParses(): void $md2 = (new MessageData())->setId($messageId)->setName('criteria_match')->setData('any'); $md3 = (new MessageData())->setId($messageId)->setName('embargo')->setData('string'); + $listMock = $this->createMock(SubscriberList::class); + $listMock->method('getId')->willReturn(42); + $listMessageMock = $this->createMock(ListMessage::class); + $listMessageMock->method('getList')->willReturn($listMock); + $this->messageDataRepository ->method('getForMessage') ->with($messageId) @@ -69,16 +76,7 @@ public function testLoadsMessageDataMergesAndParses(): void // Use a Message mock instead of an anonymous stub $message = $this->createMock(Message::class); $message->method('getId')->willReturn($messageId); - $message->method('getListMessages')->willReturn( - new ArrayCollection([ - new class { - public function getListId(): int - { - return 42; - } - }, - ]) - ); + $message->method('getListMessages')->willReturn(new ArrayCollection([$listMessageMock])); $loader = new MessageDataLoader( configProvider: $this->config, diff --git a/tests/Unit/Domain/Subscription/Service/Provider/SubscriberProviderTest.php b/tests/Unit/Domain/Subscription/Service/Provider/SubscriberProviderTest.php index fa304c8a..ee263b73 100644 --- a/tests/Unit/Domain/Subscription/Service/Provider/SubscriberProviderTest.php +++ b/tests/Unit/Domain/Subscription/Service/Provider/SubscriberProviderTest.php @@ -4,8 +4,8 @@ namespace PhpList\Core\Tests\Unit\Domain\Subscription\Service\Provider; -use PhpList\Core\Domain\Messaging\Message\CampaignProcessorMessage; -use PhpList\Core\Domain\Messaging\Message\CampaignProcessorMessageInterface; +use PhpList\Core\Domain\Messaging\Message\CampaignProcessor\CampaignProcessorMessage; +use PhpList\Core\Domain\Messaging\Message\CampaignProcessor\CampaignProcessorMessageInterface; use PhpList\Core\Domain\Messaging\Model\Message; use PhpList\Core\Domain\Subscription\Model\Subscriber; use PhpList\Core\Domain\Subscription\Repository\SubscriberListRepository;