diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 38549c12..6305f1b4 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -8,6 +8,9 @@ reviews: suggested_labels: false high_level_summary_in_walkthrough: false poem: false + finishing_touches: + docstrings: + enabled: false path_instructions: - path: "src/Domain/**" instructions: | diff --git a/src/Domain/Identity/Service/AdminCopyEmailSender.php b/src/Domain/Identity/Service/AdminCopyEmailSender.php index a1de0b0c..64e94645 100644 --- a/src/Domain/Identity/Service/AdminCopyEmailSender.php +++ b/src/Domain/Identity/Service/AdminCopyEmailSender.php @@ -39,11 +39,10 @@ public function __invoke(string $subject, string $message, array $lists = []): v foreach ($mails as $adminMail) { $data = new MessagePrecacheDto(); - $data->to = $adminMail; $data->subject = $this->installationName . ' ' . $subject; $data->content = $message; - $email = $this->systemEmailBuilder->buildSystemEmail(data: $data); + $email = $this->systemEmailBuilder->buildSystemEmail(data: $data, toEmail: $adminMail); if ($email === null) { $this->logger->warning('Failed to build admin copy email for recipient ' . $adminMail); continue; diff --git a/src/Domain/Messaging/MessageHandler/CampaignProcessorMessageHandler.php b/src/Domain/Messaging/MessageHandler/CampaignProcessorMessageHandler.php index b8837a66..faf4aef7 100644 --- a/src/Domain/Messaging/MessageHandler/CampaignProcessorMessageHandler.php +++ b/src/Domain/Messaging/MessageHandler/CampaignProcessorMessageHandler.php @@ -210,6 +210,7 @@ private function handleEmailSending( $result = $this->campaignEmailBuilder->buildCampaignEmail( messageId: $campaign->getId(), data: $processed, + toEmail: $subscriber->getEmail(), skipBlacklistCheck: false, inBlast: true, htmlPref: $subscriber->hasHtmlEmail(), @@ -236,13 +237,13 @@ private function handleEmailSending( $this->updateUserMessageStatus($userMessage, UserMessageStatus::NotSent); $data = new MessagePrecacheDto(); - $data->to = $this->configProvider->getValue(ConfigOption::ReportAddress); $data->subject = $this->translator->trans('phpList system error'); $data->content = $this->translator->trans($e->getMessage()); $email = $this->systemEmailBuilder->buildCampaignEmail( messageId: $campaign->getId(), data: $data, + toEmail: $this->configProvider->getValue(ConfigOption::ReportAddress) ?? '', ); $envelope = new Envelope( @@ -270,7 +271,6 @@ private function handleAdminNotifications(Message $campaign, array $loadedMessag $notifications = explode(',', $loadedMessageData['notify_start']); foreach ($notifications as $notification) { $data = new MessagePrecacheDto(); - $data->to = $notification; $data->subject = $this->translator->trans('Campaign started'); $data->content = $this->translator->trans( 'phplist has started sending the campaign with subject %subject%', @@ -280,6 +280,7 @@ private function handleAdminNotifications(Message $campaign, array $loadedMessag $email = $this->systemEmailBuilder->buildCampaignEmail( messageId: $campaign->getId(), data: $data, + toEmail: $notification ); if (!$email) { diff --git a/src/Domain/Messaging/Model/Dto/MessagePrecacheDto.php b/src/Domain/Messaging/Model/Dto/MessagePrecacheDto.php index 134f1a59..3b0f0d24 100644 --- a/src/Domain/Messaging/Model/Dto/MessagePrecacheDto.php +++ b/src/Domain/Messaging/Model/Dto/MessagePrecacheDto.php @@ -11,7 +11,6 @@ class MessagePrecacheDto public ?string $replyToName = null; public ?string $fromName = null; public ?string $fromEmail = null; - public ?string $to = null; public string $subject = ''; public string $content = ''; public string $textContent = ''; @@ -23,8 +22,6 @@ class MessagePrecacheDto public ?string $template = null; public ?string $templateText = null; public ?int $templateId = null; -// public string $htmlCharset= 'UTF-8'; -// public string $textCharset= 'UTF-8'; public bool $userSpecificUrl = false; public bool $googleTrack = false; public array $adminAttributes = []; diff --git a/src/Domain/Messaging/Service/Builder/BaseEmailBuilder.php b/src/Domain/Messaging/Service/Builder/BaseEmailBuilder.php index 79bffa9a..0c7d9637 100644 --- a/src/Domain/Messaging/Service/Builder/BaseEmailBuilder.php +++ b/src/Domain/Messaging/Service/Builder/BaseEmailBuilder.php @@ -61,7 +61,6 @@ protected function validateRecipientAndSubject(?string $to, ?string $subject): b protected function passesBlacklistCheck(string $to, ?bool $skipBlacklistCheck): bool { - if (!$skipBlacklistCheck && $this->blacklistRepository->isEmailBlacklisted($to)) { $this->eventLogManager->log('', sprintf('Error, %s is blacklisted, not sending', $to)); $subscriber = $this->subscriberRepository->findOneByEmail($to); @@ -103,7 +102,7 @@ protected function createBaseEmail( ?string $fromEmail, ?string $fromName, ?string $subject, - ) : Email { + ): Email { $email = (new Email()); $destinationEmail = $this->resolveDestinationEmail($to); diff --git a/src/Domain/Messaging/Service/Builder/EmailBuilder.php b/src/Domain/Messaging/Service/Builder/EmailBuilder.php index d0cf8039..c863bf31 100644 --- a/src/Domain/Messaging/Service/Builder/EmailBuilder.php +++ b/src/Domain/Messaging/Service/Builder/EmailBuilder.php @@ -11,6 +11,7 @@ use PhpList\Core\Domain\Configuration\Service\Manager\EventLogManager; use PhpList\Core\Domain\Configuration\Service\Provider\ConfigProvider; use PhpList\Core\Domain\Messaging\Exception\AttachmentException; +use PhpList\Core\Domain\Messaging\Exception\SubscriberNotFoundException; use PhpList\Core\Domain\Messaging\Model\Dto\MessagePrecacheDto; use PhpList\Core\Domain\Messaging\Service\AttachmentAdder; use PhpList\Core\Domain\Messaging\Service\Constructor\CampaignMailContentBuilder; @@ -65,20 +66,24 @@ public function __construct( ); } - /** @return array{Email, OutputFormat}|null */ + /** + * @return array{Email, OutputFormat}|null + * @throws SubscriberNotFoundException + */ public function buildCampaignEmail( int $messageId, MessagePrecacheDto $data, + string $toEmail, ?bool $skipBlacklistCheck = false, ?bool $inBlast = true, ?bool $htmlPref = false, ?bool $isTestMail = false, ): ?array { - if (!$this->validateRecipientAndSubject(to: $data->to, subject: $data->subject)) { + if (!$this->validateRecipientAndSubject(to: $toEmail, subject: $data->subject)) { return null; } - if (!$this->passesBlacklistCheck(to: $data->to, skipBlacklistCheck: $skipBlacklistCheck)) { + if (!$this->passesBlacklistCheck(to: $toEmail, skipBlacklistCheck: $skipBlacklistCheck)) { return null; } @@ -87,7 +92,7 @@ public function buildCampaignEmail( $subject = (!$isTestMail ? '' : $this->translator->trans('(test)') . ' ') . $data->subject; $email = $this->createBaseEmail( - to: $data->to, + to: $toEmail, fromEmail: $fromEmail, fromName: $fromName, subject: $subject, @@ -95,7 +100,7 @@ public function buildCampaignEmail( $this->addBaseCampaignHeaders( email: $email, messageId: $messageId, - originalTo: $data->to, + originalTo: $toEmail, destinationEmail: $email->getTo()[0]->getAddress(), inBlast: $inBlast, ); @@ -109,7 +114,18 @@ public function buildCampaignEmail( } } - [$htmlMessage, $textMessage] = ($this->mailContentBuilder)(messagePrecacheDto: $data, campaignId: $messageId); + $receiver = $this->subscriberRepository->findOneByEmail($toEmail); + if (!$receiver) { + throw new SubscriberNotFoundException( + sprintf('Subscriber with email %s not found', $toEmail) + ); + } + + [$htmlMessage, $textMessage] = ($this->mailContentBuilder)( + messagePrecacheDto: $data, + receiver: $receiver, + campaignId: $messageId, + ); $sentAs = $this->applyContentAndFormatting( email: $email, htmlMessage: $htmlMessage, diff --git a/src/Domain/Messaging/Service/Builder/ForwardEmailBuilder.php b/src/Domain/Messaging/Service/Builder/ForwardEmailBuilder.php index 7a0c35b5..778e62af 100644 --- a/src/Domain/Messaging/Service/Builder/ForwardEmailBuilder.php +++ b/src/Domain/Messaging/Service/Builder/ForwardEmailBuilder.php @@ -96,8 +96,11 @@ public function buildForwardEmail( $subject = $this->translator->trans('Fwd') . ': ' . stripslashes($data->subject); + $receiver = $this->subscriberRepository->findOneByEmail($friendEmail) ?? (new Subscriber($friendEmail)); + [$htmlMessage, $textMessage] = ($this->mailContentBuilder)( messagePrecacheDto: $data, + receiver: $receiver, campaignId: $messageId, forwardedBy: $forwardedBy, forwardedPersonalNote: $forwardedPersonalNote, diff --git a/src/Domain/Messaging/Service/Builder/SystemEmailBuilder.php b/src/Domain/Messaging/Service/Builder/SystemEmailBuilder.php index 855c5950..cc50d12b 100644 --- a/src/Domain/Messaging/Service/Builder/SystemEmailBuilder.php +++ b/src/Domain/Messaging/Service/Builder/SystemEmailBuilder.php @@ -53,13 +53,14 @@ public function __construct( public function buildCampaignEmail( int $messageId, MessagePrecacheDto $data, + string $toEmail, ?bool $skipBlacklistCheck = false, ): ?Email { - if (!$this->validateRecipientAndSubject(to: $data->to, subject: $data->subject)) { + if (!$this->validateRecipientAndSubject(to: $toEmail, subject: $data->subject)) { return null; } - if (!$this->passesBlacklistCheck(to: $data->to, skipBlacklistCheck: $skipBlacklistCheck)) { + if (!$this->passesBlacklistCheck(to: $toEmail, skipBlacklistCheck: $skipBlacklistCheck)) { return null; } @@ -69,7 +70,7 @@ public function buildCampaignEmail( $replyTo = $messageReplyToAddress ?: $fromEmail; $email = $this->createBaseEmail( - to: $data->to, + to: $toEmail, fromEmail: $fromEmail, fromName: $fromName, subject: $data->subject, @@ -79,7 +80,7 @@ public function buildCampaignEmail( $this->addBaseCampaignHeaders( email: $email, messageId: $messageId, - originalTo: $data->to, + originalTo: $toEmail, destinationEmail: $email->getTo()[0]->getAddress(), inBlast: false, ); @@ -97,13 +98,14 @@ public function buildCampaignEmail( public function buildSystemEmail( MessagePrecacheDto $data, + string $toEmail, ?bool $skipBlacklistCheck = false, ): ?Email { - if (!$this->validateRecipientAndSubject(to: $data->to, subject: $data->subject)) { + if (!$this->validateRecipientAndSubject(to: $toEmail, subject: $data->subject)) { return null; } - if (!$this->passesBlacklistCheck(to: $data->to, skipBlacklistCheck: $skipBlacklistCheck)) { + if (!$this->passesBlacklistCheck(to: $toEmail, skipBlacklistCheck: $skipBlacklistCheck)) { return null; } @@ -113,14 +115,14 @@ public function buildSystemEmail( $replyTo = $messageReplyToAddress ?: $fromEmail; $email = $this->createBaseEmail( - to: $data->to, + to: $toEmail, fromEmail: $fromEmail, fromName: $fromName, subject: $data->subject, ); $email->replyTo($replyTo); - $this->addSystemHeaders(email: $email, originalTo: $data->to,); + $this->addSystemHeaders(email: $email, originalTo: $toEmail); [$htmlMessage, $textMessage] = ($this->mailConstructor)(messagePrecacheDto: $data); $email->text($textMessage); diff --git a/src/Domain/Messaging/Service/Constructor/CampaignMailContentBuilder.php b/src/Domain/Messaging/Service/Constructor/CampaignMailContentBuilder.php index c166b112..c7398a20 100644 --- a/src/Domain/Messaging/Service/Constructor/CampaignMailContentBuilder.php +++ b/src/Domain/Messaging/Service/Constructor/CampaignMailContentBuilder.php @@ -16,7 +16,6 @@ use PhpList\Core\Domain\Messaging\Model\Dto\MessagePrecacheDto; use PhpList\Core\Domain\Subscription\Model\Subscriber; use PhpList\Core\Domain\Subscription\Repository\SubscriberRepository; -use PhpList\Core\Domain\Messaging\Exception\SubscriberNotFoundException; use Symfony\Component\DependencyInjection\Attribute\Autowire; class CampaignMailContentBuilder @@ -35,21 +34,16 @@ public function __construct( public function __invoke( MessagePrecacheDto $messagePrecacheDto, + Subscriber $receiver, ?int $campaignId = null, ?Subscriber $forwardedBy = null, ?string $forwardedPersonalNote = null, ): array { - $subscriber = $this->subscriberRepository->findOneByEmail($messagePrecacheDto->to); - if (!$subscriber) { - throw new SubscriberNotFoundException( - sprintf('Subscriber with email %s not found', $messagePrecacheDto->to) - ); - } $addDefaultStyle = false; - if ($messagePrecacheDto->userSpecificUrl) { - $userData = $this->subscriberRepository->getDataById($subscriber->getId()); - $this->replaceUserSpecificRemoteContent($messagePrecacheDto, $subscriber, $userData); + if ($messagePrecacheDto->userSpecificUrl && $receiver->getId()) { + $userData = $this->subscriberRepository->getDataById($receiver->getId()); + $this->replaceUserSpecificRemoteContent($messagePrecacheDto, $receiver, $userData); } $content = $messagePrecacheDto->content; @@ -80,7 +74,7 @@ public function __invoke( $textMessage = $this->placeholderProcessor->process( value: $textMessage, - receiver: $subscriber, + receiver: $receiver, format: OutputFormat::Text, messagePrecacheDto: $messagePrecacheDto, campaignId: $campaignId, @@ -89,7 +83,7 @@ public function __invoke( $htmlMessage = $this->placeholderProcessor->process( value: $htmlMessage, - receiver: $subscriber, + receiver: $receiver, format: OutputFormat::Html, messagePrecacheDto: $messagePrecacheDto, campaignId: $campaignId, diff --git a/src/Domain/Messaging/Service/MessageDataLoader.php b/src/Domain/Messaging/Service/MessageDataLoader.php index b47efbae..c3577bec 100644 --- a/src/Domain/Messaging/Service/MessageDataLoader.php +++ b/src/Domain/Messaging/Service/MessageDataLoader.php @@ -82,7 +82,6 @@ private function buildDefaultMessageData(): array 'footer' => $this->configProvider->getValue(ConfigOption::MessageFooter), 'forwardfooter' => $this->configProvider->getValue(ConfigOption::ForwardFooter), 'status' => '', - 'tofield' => '', 'replyto' => '', 'targetlist' => [], 'criteria_match' => '', diff --git a/src/Domain/Messaging/Service/MessagePrecacheService.php b/src/Domain/Messaging/Service/MessagePrecacheService.php index dd637283..dfab25ec 100644 --- a/src/Domain/Messaging/Service/MessagePrecacheService.php +++ b/src/Domain/Messaging/Service/MessagePrecacheService.php @@ -135,7 +135,6 @@ private function populateBasicFields( ): void { $messagePrecacheDto->fromName = $loadedMessageData['fromname']; $messagePrecacheDto->fromEmail = $loadedMessageData['fromemail']; - $messagePrecacheDto->to = $loadedMessageData['tofield']; //0013076: different content when forwarding 'to a friend' $messagePrecacheDto->subject = $forwardContent diff --git a/src/Domain/Subscription/Model/Subscriber.php b/src/Domain/Subscription/Model/Subscriber.php index 967f7131..c80aefd8 100644 --- a/src/Domain/Subscription/Model/Subscriber.php +++ b/src/Domain/Subscription/Model/Subscriber.php @@ -109,8 +109,9 @@ class Subscriber implements DomainModel, Identity, CreationDate, ModificationDat #[ORM\Column(name: 'foreignkey', type: 'string', length: 100, nullable: true)] private ?string $foreignKey = null; - public function __construct() + public function __construct(string $email) { + $this->email = $email; $this->subscriptions = new ArrayCollection(); $this->attributes = new ArrayCollection(); $this->extraData = ''; diff --git a/src/Domain/Subscription/Service/Manager/SubscriberManager.php b/src/Domain/Subscription/Service/Manager/SubscriberManager.php index 9584b512..39a3ee84 100644 --- a/src/Domain/Subscription/Service/Manager/SubscriberManager.php +++ b/src/Domain/Subscription/Service/Manager/SubscriberManager.php @@ -40,8 +40,7 @@ public function __construct( public function createSubscriber(CreateSubscriberDto $subscriberDto): Subscriber { - $subscriber = new Subscriber(); - $subscriber->setEmail($subscriberDto->email); + $subscriber = new Subscriber($subscriberDto->email); $confirmed = (bool)$subscriberDto->requestConfirmation; $subscriber->setConfirmed(!$confirmed); $subscriber->setBlacklisted(false); @@ -106,8 +105,7 @@ public function deleteSubscriber(Subscriber $subscriber): void public function createFromImport(ImportSubscriberDto $subscriberDto): Subscriber { - $subscriber = new Subscriber(); - $subscriber->setEmail($subscriberDto->email); + $subscriber = new Subscriber($subscriberDto->email); $subscriber->setConfirmed($subscriberDto->confirmed); $subscriber->setBlacklisted($subscriberDto->blacklisted); $subscriber->setHtmlEmail($subscriberDto->htmlEmail); diff --git a/tests/Integration/Domain/Subscription/Fixtures/SubscriberFixture.php b/tests/Integration/Domain/Subscription/Fixtures/SubscriberFixture.php index 9c74dd1b..a6da2128 100644 --- a/tests/Integration/Domain/Subscription/Fixtures/SubscriberFixture.php +++ b/tests/Integration/Domain/Subscription/Fixtures/SubscriberFixture.php @@ -37,10 +37,9 @@ public function load(ObjectManager $manager): void } $row = array_combine($headers, $data); - $subscriber = new Subscriber(); + $subscriber = new Subscriber($row['email']); $this->setSubjectId($subscriber, (int)$row['id']); - $subscriber->setEmail($row['email']); $subscriber->setConfirmed((bool) $row['confirmed']); $subscriber->setBlacklisted((bool) $row['blacklisted']); $subscriber->setBounceCount((int) $row['bouncecount']); diff --git a/tests/Integration/Domain/Subscription/Repository/SubscriberRepositoryTest.php b/tests/Integration/Domain/Subscription/Repository/SubscriberRepositoryTest.php index 9a2ead68..2fdff18b 100644 --- a/tests/Integration/Domain/Subscription/Repository/SubscriberRepositoryTest.php +++ b/tests/Integration/Domain/Subscription/Repository/SubscriberRepositoryTest.php @@ -79,8 +79,7 @@ public function testFindReadsModelFromDatabase() public function testCreationDateOfNewModelIsSetToNowOnPersist() { - $model = new Subscriber(); - $model->setEmail('sam@example.com'); + $model = new Subscriber('sam@example.com'); $expectedCreationDate = new DateTime(); $this->entityManager->persist($model); @@ -90,8 +89,7 @@ public function testCreationDateOfNewModelIsSetToNowOnPersist() public function testModificationDateOfNewModelIsSetToNowOnPersist() { - $model = new Subscriber(); - $model->setEmail('oliver@example.com'); + $model = new Subscriber('oliver@example.com'); $expectedModificationDate = new DateTime(); $this->entityManager->persist($model); @@ -101,8 +99,7 @@ public function testModificationDateOfNewModelIsSetToNowOnPersist() public function testSavePersistsAndFlushesModel() { - $model = new Subscriber(); - $model->setEmail('michiel@example.com'); + $model = new Subscriber('michiel@example.com'); $this->subscriberRepository->save($model); self::assertSame($model, $this->subscriberRepository->find($model->getId())); @@ -115,9 +112,8 @@ public function testEmailMustBeUnique() /** @var Subscriber $model */ $model = $this->subscriberRepository->find(1); - $otherModel = new Subscriber(); + $otherModel = new Subscriber($model->getEmail()); $otherModel->generateUniqueId(); - $otherModel->setEmail($model->getEmail()); $this->expectException(UniqueConstraintViolationException::class); @@ -126,9 +122,7 @@ public function testEmailMustBeUnique() public function testUniqueIdOfNewModelIsGeneratedOnPersist() { - $model = new Subscriber(); - $model->setEmail('oliver@example.com'); - + $model = new Subscriber('oliver@example.com'); $this->entityManager->persist($model); self::assertMatchesRegularExpression('/^[0-9a-f]{32}$/', $model->getUniqueId()); diff --git a/tests/Integration/Domain/Subscription/Service/SubscriberCsvExportManagerTest.php b/tests/Integration/Domain/Subscription/Service/SubscriberCsvExportManagerTest.php index c2ca4f7d..ada5e2cd 100644 --- a/tests/Integration/Domain/Subscription/Service/SubscriberCsvExportManagerTest.php +++ b/tests/Integration/Domain/Subscription/Service/SubscriberCsvExportManagerTest.php @@ -35,8 +35,7 @@ protected function setUp(): void public function testExportToCsvReturnsStreamedResponse(): void { - $subscriber1 = new Subscriber(); - $subscriber1->setEmail('test1@example.com'); + $subscriber1 = new Subscriber('test1@example.com'); $subscriber1->setConfirmed(true); $subscriber1->setHtmlEmail(true); $subscriber1->setBlacklisted(false); @@ -44,8 +43,7 @@ public function testExportToCsvReturnsStreamedResponse(): void $subscriber1->setExtraData('Data 1'); $this->entityManager->persist($subscriber1); - $subscriber2 = new Subscriber(); - $subscriber2->setEmail('test2@example.com'); + $subscriber2 = new Subscriber('test2@example.com'); $subscriber2->setConfirmed(false); $subscriber2->setHtmlEmail(false); $subscriber2->setBlacklisted(true); diff --git a/tests/Integration/Domain/Subscription/Service/SubscriberCsvImportManagerTest.php b/tests/Integration/Domain/Subscription/Service/SubscriberCsvImportManagerTest.php index c9d60ae3..9c27c1c9 100644 --- a/tests/Integration/Domain/Subscription/Service/SubscriberCsvImportManagerTest.php +++ b/tests/Integration/Domain/Subscription/Service/SubscriberCsvImportManagerTest.php @@ -95,8 +95,7 @@ public function testImportFromCsvCreatesNewSubscribers(): void public function testImportFromCsvUpdatesExistingSubscribers(): void { - $subscriber = new Subscriber(); - $subscriber->setEmail('existing@example.com'); + $subscriber = new Subscriber('existing@example.com'); $subscriber->setConfirmed(false); $subscriber->setHtmlEmail(false); $subscriber->setBlacklisted(true); diff --git a/tests/Integration/Domain/Subscription/Service/SubscriberDeletionServiceTest.php b/tests/Integration/Domain/Subscription/Service/SubscriberDeletionServiceTest.php index 785d3547..3a7ae27b 100644 --- a/tests/Integration/Domain/Subscription/Service/SubscriberDeletionServiceTest.php +++ b/tests/Integration/Domain/Subscription/Service/SubscriberDeletionServiceTest.php @@ -66,8 +66,7 @@ public function testDeleteSubscriberWithRelatedDataDoesNotThrowDoctrineError(): ); $this->entityManager->persist($msg); - $subscriber = new Subscriber(); - $subscriber->setEmail('test-delete@example.com'); + $subscriber = new Subscriber('test-delete@example.com'); $subscriber->setConfirmed(true); $subscriber->setHtmlEmail(true); $subscriber->setBlacklisted(false); diff --git a/tests/Unit/Domain/Configuration/Service/MessagePlaceholderProcessorTest.php b/tests/Unit/Domain/Configuration/Service/MessagePlaceholderProcessorTest.php index 2e67097f..2d49fa39 100644 --- a/tests/Unit/Domain/Configuration/Service/MessagePlaceholderProcessorTest.php +++ b/tests/Unit/Domain/Configuration/Service/MessagePlaceholderProcessorTest.php @@ -35,8 +35,7 @@ protected function setUp(): void private function makeUser(string $email = 'user@example.com', string $uid = 'UID123'): Subscriber { - $user = new Subscriber(); - $user->setEmail($email); + $user = new Subscriber($email); $user->setUniqueId($uid); return $user; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/BlacklistUrlValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/BlacklistUrlValueResolverTest.php index 49eb567b..d77de0a3 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/BlacklistUrlValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/BlacklistUrlValueResolverTest.php @@ -27,8 +27,7 @@ protected function setUp(): void private function makeUser(string $email = 'user@example.com'): Subscriber { - $u = new Subscriber(); - $u->setEmail($email); + $u = new Subscriber($email); $u->setUniqueId('UID-123'); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/BlacklistValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/BlacklistValueResolverTest.php index 7607270b..e81684a7 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/BlacklistValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/BlacklistValueResolverTest.php @@ -30,8 +30,7 @@ protected function setUp(): void private function makeUser(string $email = 'user@example.com'): Subscriber { - $u = new Subscriber(); - $u->setEmail($email); + $u = new Subscriber($email); $u->setUniqueId('UID-1'); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/ConfirmationUrlValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/ConfirmationUrlValueResolverTest.php index e9278a42..589d7cdc 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/ConfirmationUrlValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/ConfirmationUrlValueResolverTest.php @@ -24,8 +24,7 @@ protected function setUp(): void private function makeUser(string $uid = 'UID-1'): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId($uid); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/ContactUrlValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/ContactUrlValueResolverTest.php index 07801cec..950e1618 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/ContactUrlValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/ContactUrlValueResolverTest.php @@ -24,8 +24,7 @@ protected function setUp(): void private function makeUser(): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId('UID-1'); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/ContactValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/ContactValueResolverTest.php index e11a1365..1e378f7a 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/ContactValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/ContactValueResolverTest.php @@ -27,8 +27,7 @@ protected function setUp(): void private function makeUser(): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId('UID-C'); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/FooterValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/FooterValueResolverTest.php index 1508cf3d..a9333b73 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/FooterValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/FooterValueResolverTest.php @@ -25,8 +25,7 @@ protected function setUp(): void private function makeUser(string $email = 'user@example.com', string $uid = 'UID-1'): Subscriber { - $u = new Subscriber(); - $u->setEmail($email); + $u = new Subscriber($email); $u->setUniqueId($uid); return $u; } @@ -84,7 +83,7 @@ public function testForwardedAlternativeUsesStripslashesFooter(): void user: $this->makeUser(), format: OutputFormat::Text, messagePrecacheDto: $dto, - forwardedBy: (new Subscriber())->setEmail('fwd@example.com'), + forwardedBy: (new Subscriber('fwd@example.com')), ); $this->assertSame(stripslashes($raw), $resolver($ctx)); } @@ -100,7 +99,7 @@ public function testForwardedUsesConfigForwardFooterWhenFlagFalse(): void user: $this->makeUser(), format: OutputFormat::Html, messagePrecacheDto: $this->makeDto('TF', 'HF', 'Alt'), - forwardedBy: (new Subscriber())->setEmail('fwd@example.com'), + forwardedBy: (new Subscriber('fwd@example.com')), ); $this->assertSame('Forward footer set by config', $resolver($ctx)); @@ -117,7 +116,7 @@ public function testForwardedFallsBackToEmptyWhenConfigNull(): void user: $this->makeUser(), format: OutputFormat::Html, messagePrecacheDto: $this->makeDto('TF', 'HF', 'Alt'), - forwardedBy: (new Subscriber())->setEmail('fwd@example.com'), + forwardedBy: (new Subscriber('fwd@example.com')), ); $this->assertSame('', $resolver($ctx)); diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/ForwardMessageIdValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/ForwardMessageIdValueResolverTest.php index 7fda2280..6ee9bfdf 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/ForwardMessageIdValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/ForwardMessageIdValueResolverTest.php @@ -27,8 +27,7 @@ protected function setUp(): void private function makeUser(string $uid = 'U-FWD'): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId($uid); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/ForwardUrlValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/ForwardUrlValueResolverTest.php index dac64444..d66aae02 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/ForwardUrlValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/ForwardUrlValueResolverTest.php @@ -24,8 +24,7 @@ protected function setUp(): void private function makeUser(string $uid = 'U1'): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId($uid); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/ForwardValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/ForwardValueResolverTest.php index 944cf1ef..287bf768 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/ForwardValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/ForwardValueResolverTest.php @@ -27,8 +27,7 @@ protected function setUp(): void private function makeUser(string $uid = 'UID-F'): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId($uid); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/JumpoffUrlValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/JumpoffUrlValueResolverTest.php index 842e6f8e..c89d3578 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/JumpoffUrlValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/JumpoffUrlValueResolverTest.php @@ -27,8 +27,7 @@ protected function setUp(): void private function makeUser(string $uid = 'UID-JOU'): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId($uid); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/JumpoffValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/JumpoffValueResolverTest.php index 521bd06b..4cc3f6e3 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/JumpoffValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/JumpoffValueResolverTest.php @@ -27,8 +27,7 @@ protected function setUp(): void private function makeUser(string $uid = 'UID-JO'): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId($uid); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/ListsValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/ListsValueResolverTest.php index df0f2224..acd82866 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/ListsValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/ListsValueResolverTest.php @@ -26,8 +26,7 @@ protected function setUp(): void private function makeUser(): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId('UID-L'); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/PreferencesUrlValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/PreferencesUrlValueResolverTest.php index 24fc705d..b2ed1bd0 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/PreferencesUrlValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/PreferencesUrlValueResolverTest.php @@ -24,8 +24,7 @@ protected function setUp(): void private function makeUser(): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId('UID-PREF'); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/PreferencesValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/PreferencesValueResolverTest.php index f59649d8..4a370033 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/PreferencesValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/PreferencesValueResolverTest.php @@ -27,8 +27,7 @@ protected function setUp(): void private function makeUser(string $uid = 'UID-PREV'): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId($uid); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/SignatureValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/SignatureValueResolverTest.php index 03928966..c7186ca5 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/SignatureValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/SignatureValueResolverTest.php @@ -24,8 +24,7 @@ protected function setUp(): void private function makeUser(): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId('UID-SIG'); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/SubscribeUrlValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/SubscribeUrlValueResolverTest.php index 530a1dc5..05d78062 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/SubscribeUrlValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/SubscribeUrlValueResolverTest.php @@ -24,8 +24,7 @@ protected function setUp(): void private function makeUser(): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId('UID-SUB'); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/SubscribeValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/SubscribeValueResolverTest.php index b37774e1..ebf01e27 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/SubscribeValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/SubscribeValueResolverTest.php @@ -27,8 +27,7 @@ protected function setUp(): void private function makeUser(): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId('UID-SV'); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/UnsubscribeUrlValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/UnsubscribeUrlValueResolverTest.php index 4ca95e8c..22db0726 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/UnsubscribeUrlValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/UnsubscribeUrlValueResolverTest.php @@ -27,8 +27,7 @@ protected function setUp(): void private function makeUser(string $uid = 'UID-UNSUB'): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId($uid); return $u; } diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/UnsubscribeValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/UnsubscribeValueResolverTest.php index 3ae672eb..48f31be9 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/UnsubscribeValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/UnsubscribeValueResolverTest.php @@ -30,8 +30,7 @@ protected function setUp(): void private function makeUser(string $uid = 'UID-U'): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId($uid); return $u; } @@ -120,7 +119,7 @@ public function testForwardedByUsesBlacklistUrl(): void format: OutputFormat::Html, messagePrecacheDto: null, locale: 'en', - forwardedBy: (new Subscriber())->setEmail('someone@example.com'), + forwardedBy: (new Subscriber('someone@example.com')), ); $resolver = new UnsubscribeValueResolver($this->config, $this->urlBuilder, $this->translator); diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/UserDataSupportingResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/UserDataSupportingResolverTest.php index 8a757cd4..9d0c2bb5 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/UserDataSupportingResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/UserDataSupportingResolverTest.php @@ -24,8 +24,7 @@ protected function setUp(): void private function makeCtx(Subscriber $user = null): PlaceholderContext { $u = $user ?? (function () { - $s = new Subscriber(); - $s->setEmail('user@example.com'); + $s = new Subscriber('user@example.com'); $s->setUniqueId('UID-X'); // Ensure the entity has a non-null ID for repository lookup $rp = new \ReflectionProperty(Subscriber::class, 'id'); diff --git a/tests/Unit/Domain/Configuration/Service/Placeholder/UserTrackValueResolverTest.php b/tests/Unit/Domain/Configuration/Service/Placeholder/UserTrackValueResolverTest.php index 68818e5e..19caaada 100644 --- a/tests/Unit/Domain/Configuration/Service/Placeholder/UserTrackValueResolverTest.php +++ b/tests/Unit/Domain/Configuration/Service/Placeholder/UserTrackValueResolverTest.php @@ -24,8 +24,7 @@ protected function setUp(): void private function makeUser(string $uid = 'U-42'): Subscriber { - $u = new Subscriber(); - $u->setEmail('user@example.com'); + $u = new Subscriber('user@example.com'); $u->setUniqueId($uid); return $u; } diff --git a/tests/Unit/Domain/Identity/Service/AdminCopyEmailSenderTest.php b/tests/Unit/Domain/Identity/Service/AdminCopyEmailSenderTest.php index 00760fa7..1173fac3 100644 --- a/tests/Unit/Domain/Identity/Service/AdminCopyEmailSenderTest.php +++ b/tests/Unit/Domain/Identity/Service/AdminCopyEmailSenderTest.php @@ -59,8 +59,7 @@ public function testSendsToListOwnersWhenFlagEnabled(): void $systemEmailBuilder->expects(self::exactly(count($emails))) ->method('buildSystemEmail') ->with(self::callback(function (MessagePrecacheDto $data): bool { - return $data->to !== null - && str_starts_with($data->subject, 'phpList ') + return str_starts_with($data->subject, 'phpList ') && $data->content === 'Hello Admin'; })) ->willReturn(new Email()); @@ -127,7 +126,7 @@ public function testFallsBackToAdminAddressesWhenNoOwnersOrFlagFalse(): void $systemEmailBuilder->expects(self::exactly(count($expectedRecipients))) ->method('buildSystemEmail') ->with(self::callback(function (MessagePrecacheDto $data): bool { - return $data->to !== null && str_starts_with($data->subject, 'phpList '); + return str_starts_with($data->subject, 'phpList '); })) ->willReturn(new Email()); diff --git a/tests/Unit/Domain/Identity/Service/AdminNotifierTest.php b/tests/Unit/Domain/Identity/Service/AdminNotifierTest.php index 74d6bdd0..69510cc0 100644 --- a/tests/Unit/Domain/Identity/Service/AdminNotifierTest.php +++ b/tests/Unit/Domain/Identity/Service/AdminNotifierTest.php @@ -33,8 +33,7 @@ public function testNotifyForwardFailedSendsAdminCopyAndLogs(): void $campaign = $this->createMock(Message::class); $campaign->method('getId')->willReturn(42); - $subscriber = new Subscriber(); - $subscriber->setEmail('john@example.com'); + $subscriber = new Subscriber('john@example.com'); $friendEmail = 'friend@example.com'; $lists = [new SubscriberList()]; @@ -105,8 +104,7 @@ public function testNotifyForwardSucceededSendsAdminCopyWithoutLogging(): void $campaign = $this->createMock(Message::class); $campaign->method('getId')->willReturn(777); - $subscriber = new Subscriber(); - $subscriber->setEmail('alice@example.com'); + $subscriber = new Subscriber('alice@example.com'); $friendEmail = 'bob@example.net'; $lists = [new SubscriberList(), new SubscriberList()]; diff --git a/tests/Unit/Domain/Messaging/Model/SubscriberListTest.php b/tests/Unit/Domain/Messaging/Model/SubscriberListTest.php index e62dfc22..87334cfe 100644 --- a/tests/Unit/Domain/Messaging/Model/SubscriberListTest.php +++ b/tests/Unit/Domain/Messaging/Model/SubscriberListTest.php @@ -181,7 +181,7 @@ public function testGetSubscribersByDefaultReturnsEmptyCollection(): void public function testSetSubscribersSetsSubscribers(): void { - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $subscription = new Subscription(); $subscription->setSubscriber($subscriber); diff --git a/tests/Unit/Domain/Messaging/Service/AttachmentDownloadServiceTest.php b/tests/Unit/Domain/Messaging/Service/AttachmentDownloadServiceTest.php index 3d165f66..baffbb73 100644 --- a/tests/Unit/Domain/Messaging/Service/AttachmentDownloadServiceTest.php +++ b/tests/Unit/Domain/Messaging/Service/AttachmentDownloadServiceTest.php @@ -65,7 +65,10 @@ public function testThrowsWhenFileDoesNotExist(): void public function testReturnsDownloadableWithExplicitMimeType(): void { $subscriberRepo = $this->createMock(SubscriberRepository::class); - $subscriberRepo->method('findOneByEmail')->with('user@example.com')->willReturn(new Subscriber()); + $subscriberRepo + ->method('findOneByEmail') + ->with('user@example.com') + ->willReturn(new Subscriber('user@example.com')); $service = new AttachmentDownloadService($subscriberRepo, $this->tempDir); $filename = 'doc.pdf'; @@ -87,7 +90,10 @@ public function testReturnsDownloadableWithExplicitMimeType(): void public function testGuessesMimeTypeAndProvidesStream(): void { $subscriberRepo = $this->createMock(SubscriberRepository::class); - $subscriberRepo->method('findOneByEmail')->with('user@example.com')->willReturn(new Subscriber()); + $subscriberRepo + ->method('findOneByEmail') + ->with('user@example.com') + ->willReturn(new Subscriber('user@example.com')); $service = new AttachmentDownloadService($subscriberRepo, $this->tempDir); $filename = 'note.txt'; diff --git a/tests/Unit/Domain/Messaging/Service/Builder/EmailBuilderTest.php b/tests/Unit/Domain/Messaging/Service/Builder/EmailBuilderTest.php index fb4b8740..90af07cb 100644 --- a/tests/Unit/Domain/Messaging/Service/Builder/EmailBuilderTest.php +++ b/tests/Unit/Domain/Messaging/Service/Builder/EmailBuilderTest.php @@ -105,13 +105,12 @@ public function testReturnsNullWhenMissingRecipient(): void { $this->eventLogManager->expects($this->once())->method('log'); $dto = new MessagePrecacheDto(); - $dto->to = null; $dto->subject = 'Subj'; $dto->content = 'Body'; $dto->fromEmail = 'from@example.com'; $builder = $this->makeBuilder(); - $result = $builder->buildCampaignEmail(messageId: 1, data: $dto); + $result = $builder->buildCampaignEmail(messageId: 1, data: $dto, toEmail: ''); $this->assertNull($result); } @@ -119,12 +118,11 @@ public function testReturnsNullWhenMissingSubject(): void { $this->eventLogManager->expects($this->once())->method('log'); $dto = new MessagePrecacheDto(); - $dto->to = 'user@example.com'; $dto->content = 'Body'; $dto->fromEmail = 'from@example.com'; $builder = $this->makeBuilder(); - $result = $builder->buildCampaignEmail(messageId: 1, data: $dto); + $result = $builder->buildCampaignEmail(messageId: 1, data: $dto, toEmail: 'user@example.com'); $this->assertNull($result); } @@ -149,13 +147,12 @@ public function testBlacklistReturnsNullAndMarksHistory(): void ->method('addHistory'); $dto = new MessagePrecacheDto(); - $dto->to = 'user@example.com'; $dto->subject = 'Hello'; $dto->content = 'B'; $dto->fromEmail = 'from@example.com'; $builder = $this->makeBuilder(); - $result = $builder->buildCampaignEmail(messageId: 5, data: $dto); + $result = $builder->buildCampaignEmail(messageId: 5, data: $dto, toEmail: 'user@example.com'); $this->assertNull($result); } @@ -164,8 +161,8 @@ public function testBuildsHtmlPreferredWithAttachments(): void $this->blacklistRepository ->method('isEmailBlacklisted') ->willReturn(false); + $this->subscriberRepository->method('findOneByEmail')->willReturn(new Subscriber('user@example.com')); $dto = new MessagePrecacheDto(); - $dto->to = 'real@example.com'; $dto->subject = 'Subject'; $dto->content = 'TEXT'; $dto->fromEmail = 'from@example.com'; @@ -191,6 +188,7 @@ public function testBuildsHtmlPreferredWithAttachments(): void [$email, $sentAs] = $builder->buildCampaignEmail( messageId: 777, data: $dto, + toEmail: 'real@example.com', skipBlacklistCheck: false, inBlast: true, htmlPref: false, @@ -218,10 +216,9 @@ public function testPrefersTextWhenNoHtmlContent(): void [ConfigOption::AdminAddress, 'admin@example.com'], [ConfigOption::AlwaysSendTextDomains, ''], ]); - + $this->subscriberRepository->method('findOneByEmail')->willReturn(new Subscriber('user@example.com')); $this->blacklistRepository->method('isEmailBlacklisted')->willReturn(false); $dto = new MessagePrecacheDto(); - $dto->to = 'user@example.com'; $dto->subject = 'Subject'; $dto->content = 'TEXT'; $dto->fromEmail = 'from@example.com'; @@ -237,7 +234,12 @@ public function testPrefersTextWhenNoHtmlContent(): void ->willReturn(true); $builder = $this->makeBuilder(devVersion: false, devEmail: null); - [$email, $sentAs] = $builder->buildCampaignEmail(messageId: 9, data: $dto, htmlPref: true); + [$email, $sentAs] = $builder->buildCampaignEmail( + messageId: 9, + data: $dto, + toEmail: 'user@example.com', + htmlPref: true, + ); $this->assertSame(OutputFormat::Text, $sentAs); $this->assertSame('TEXT', $email->getTextBody()); @@ -250,8 +252,8 @@ public function testPdfFormatWhenHtmlPreferred(): void $this->blacklistRepository ->method('isEmailBlacklisted') ->willReturn(false); + $this->subscriberRepository->method('findOneByEmail')->willReturn(new Subscriber('user@example.com')); $dto = new MessagePrecacheDto(); - $dto->to = 'user@example.com'; $dto->subject = 'Subject'; $dto->content = 'TEXT'; $dto->fromEmail = 'from@example.com'; @@ -272,7 +274,12 @@ public function testPdfFormatWhenHtmlPreferred(): void ->willReturn(true); $builder = $this->makeBuilder(devVersion: false, devEmail: null); - [$email, $sentAs] = $builder->buildCampaignEmail(messageId: 42, data: $dto, htmlPref: true); + [$email, $sentAs] = $builder->buildCampaignEmail( + messageId: 42, + data: $dto, + toEmail: 'user@example.com', + htmlPref: true, + ); $this->assertSame(OutputFormat::Pdf, $sentAs); $this->assertCount(1, $email->getAttachments()); @@ -283,8 +290,8 @@ public function testTextAndPdfFormatWhenNotHtmlPreferred(): void $this->blacklistRepository ->method('isEmailBlacklisted') ->willReturn(false); + $this->subscriberRepository->method('findOneByEmail')->willReturn(new Subscriber('user@example.com')); $dto = new MessagePrecacheDto(); - $dto->to = 'user@example.com'; $dto->subject = 'Subject'; $dto->content = 'TEXT'; $dto->fromEmail = 'from@example.com'; @@ -303,7 +310,12 @@ public function testTextAndPdfFormatWhenNotHtmlPreferred(): void ->method('createPdfBytes'); $builder = $this->makeBuilder(devVersion: false, devEmail: null); - [$email, $sentAs] = $builder->buildCampaignEmail(messageId: 43, data: $dto, htmlPref: false); + [$email, $sentAs] = $builder->buildCampaignEmail( + messageId: 43, + data: $dto, + toEmail: 'user@example.com', + htmlPref: false, + ); $this->assertSame(OutputFormat::Text, $sentAs); $this->assertSame('TEXT', $email->getTextBody()); @@ -315,10 +327,10 @@ public function testReplyToExplicitAndTestMailFallback(): void $this->blacklistRepository ->method('isEmailBlacklisted') ->willReturn(false); + $this->subscriberRepository->method('findOneByEmail')->willReturn(new Subscriber('user@example.com')); // explicit reply-to $dto = new MessagePrecacheDto(); - $dto->to = 'user@example.com'; $dto->subject = 'Subject'; $dto->content = 'TEXT'; $dto->fromEmail = 'from@example.com'; @@ -332,12 +344,11 @@ public function testReplyToExplicitAndTestMailFallback(): void ->willReturn(true); $builder = $this->makeBuilder(devVersion: false, devEmail: null); - [$email] = $builder->buildCampaignEmail(messageId: 50, data: $dto); + [$email] = $builder->buildCampaignEmail(messageId: 50, data: $dto, toEmail: 'user@example.com'); $this->assertSame('reply@example.com', $email->getReplyTo()[0]->getAddress()); // no reply-to, but test mail -> uses AdminAddress $dto2 = new MessagePrecacheDto(); - $dto2->to = 'user@example.com'; $dto2->subject = 'Subject'; $dto2->content = 'TEXT'; $dto2->fromEmail = 'from@example.com'; @@ -350,7 +361,12 @@ public function testReplyToExplicitAndTestMailFallback(): void ->with('(test)') ->willReturn('(test)'); - [$email2] = $builder->buildCampaignEmail(messageId: 51, data: $dto2, isTestMail: true); + [$email2] = $builder->buildCampaignEmail( + messageId: 51, + data: $dto2, + toEmail: 'user@example.com', + isTestMail: true, + ); $this->assertSame('admin@example.com', $email2->getReplyTo()[0]->getAddress()); $this->assertStringStartsWith('(test) ', $email2->getSubject()); } @@ -394,8 +410,9 @@ public function testAttachmentAdderFailureThrows(): void $this->blacklistRepository ->method('isEmailBlacklisted') ->willReturn(false); + $this->subscriberRepository->method('findOneByEmail')->willReturn(new Subscriber('user@example.com')); + $dto = new MessagePrecacheDto(); - $dto->to = 'user@example.com'; $dto->subject = 'Subject'; $dto->content = 'TEXT'; $dto->fromEmail = 'from@example.com'; @@ -413,6 +430,6 @@ public function testAttachmentAdderFailureThrows(): void $builder = $this->makeBuilder(devVersion: false, devEmail: null); $this->expectException(AttachmentException::class); - $builder->buildCampaignEmail(messageId: 60, data: $dto, htmlPref: true); + $builder->buildCampaignEmail(messageId: 60, data: $dto, htmlPref: true, toEmail: 'user@example.com'); } } diff --git a/tests/Unit/Domain/Messaging/Service/Builder/ForwardEmailBuilderTest.php b/tests/Unit/Domain/Messaging/Service/Builder/ForwardEmailBuilderTest.php index ddb0de83..8c1c7c49 100644 --- a/tests/Unit/Domain/Messaging/Service/Builder/ForwardEmailBuilderTest.php +++ b/tests/Unit/Domain/Messaging/Service/Builder/ForwardEmailBuilderTest.php @@ -147,7 +147,7 @@ public function testBuildsForwardEmailWithSubjectPrefixHeadersAndReplyTo(): void [$email, $sentAs] = $builder->buildForwardEmail( messageId: 99, friendEmail: $friendEmail, - forwardedBy: new Subscriber(), + forwardedBy: new Subscriber('alice@example.com'), data: $dto, htmlPref: true, fromName: $fromName, @@ -186,7 +186,7 @@ public function testReturnsNullWhenEmptySubjectAndLogs(): void $builder->buildForwardEmail( messageId: 1, friendEmail: $friend, - forwardedBy: new Subscriber(), + forwardedBy: new Subscriber('alice@example.com'), data: $dto, htmlPref: false, fromName: 'X', @@ -216,7 +216,7 @@ public function testBlacklistReturnsNullAndMarksHistory(): void $result = $builder->buildForwardEmail( messageId: 2, friendEmail: 'friend@example.com', - forwardedBy: new Subscriber(), + forwardedBy: new Subscriber('alice@example.com'), data: $dto, htmlPref: false, fromName: 'From', diff --git a/tests/Unit/Domain/Messaging/Service/Builder/SystemEmailBuilderTest.php b/tests/Unit/Domain/Messaging/Service/Builder/SystemEmailBuilderTest.php index 849449cb..b003ca32 100644 --- a/tests/Unit/Domain/Messaging/Service/Builder/SystemEmailBuilderTest.php +++ b/tests/Unit/Domain/Messaging/Service/Builder/SystemEmailBuilderTest.php @@ -82,12 +82,11 @@ public function testReturnsNullWhenMissingRecipient(): void { $this->eventLogManager->expects($this->once())->method('log'); $dto = new MessagePrecacheDto(); - $dto->to = null; $dto->subject = 'Subj'; $dto->content = 'Body'; $builder = $this->makeBuilder(); - $result = $builder->buildCampaignEmail(messageId: 1, data: $dto); + $result = $builder->buildCampaignEmail(messageId: 1, data: $dto, toEmail: ''); $this->assertNull($result); } @@ -95,11 +94,10 @@ public function testReturnsNullWhenMissingSubject(): void { $this->eventLogManager->expects($this->once())->method('log'); $dto = new MessagePrecacheDto(); - $dto->to = 'user@example.com'; $dto->content = 'Body'; $builder = $this->makeBuilder(); - $result = $builder->buildCampaignEmail(messageId: 1, data: $dto); + $result = $builder->buildCampaignEmail(messageId: 1, data: $dto, toEmail: 'user@example.com'); $this->assertNull($result); } @@ -123,12 +121,11 @@ public function testReturnsNullWhenBlacklistedAndHistoryUpdated(): void ->method('addHistory'); $dto = new MessagePrecacheDto(); - $dto->to = 'user@example.com'; $dto->subject = 'Hello'; $dto->content = 'B'; $builder = $this->makeBuilder(); - $result = $builder->buildCampaignEmail(messageId: 5, data: $dto); + $result = $builder->buildCampaignEmail(messageId: 5, data: $dto, toEmail: 'user@example.com'); $this->assertNull($result); } @@ -138,7 +135,6 @@ public function testBuildsEmailWithExpectedHeadersAndBodiesInDevMode(): void ->method('isEmailBlacklisted') ->willReturn(false); $dto = new MessagePrecacheDto(); - $dto->to = 'real@example.com'; $dto->subject = 'Subject'; $dto->content = 'TEXT'; @@ -164,6 +160,7 @@ public function testBuildsEmailWithExpectedHeadersAndBodiesInDevMode(): void messageId: 777, data: $dto, skipBlacklistCheck: false, + toEmail: 'real@example.com' ); $this->assertNotNull($email); diff --git a/tests/Unit/Domain/Messaging/Service/Constructor/CampaignMailContentBuilderTest.php b/tests/Unit/Domain/Messaging/Service/Constructor/CampaignMailContentBuilderTest.php index 84ace526..71ea8d3f 100644 --- a/tests/Unit/Domain/Messaging/Service/Constructor/CampaignMailContentBuilderTest.php +++ b/tests/Unit/Domain/Messaging/Service/Constructor/CampaignMailContentBuilderTest.php @@ -12,7 +12,6 @@ use PhpList\Core\Domain\Configuration\Service\Provider\ConfigProvider; use PhpList\Core\Domain\Configuration\Service\MessagePlaceholderProcessor; use PhpList\Core\Domain\Messaging\Exception\RemotePageFetchException; -use PhpList\Core\Domain\Messaging\Exception\SubscriberNotFoundException; use PhpList\Core\Domain\Messaging\Model\Dto\MessagePrecacheDto; use PhpList\Core\Domain\Messaging\Service\Constructor\CampaignMailContentBuilder; use PhpList\Core\Domain\Subscription\Model\Subscriber; @@ -71,19 +70,6 @@ private function makeBuilder(): CampaignMailContentBuilder ); } - public function testThrowsWhenSubscriberNotFound(): void - { - $dto = new MessagePrecacheDto(); - $dto->to = 'missing@example.com'; - $dto->content = 'Hello'; - - $this->subscriberRepository->method('findOneByEmail')->willReturn(null); - - $builder = $this->makeBuilder(); - $this->expectException(SubscriberNotFoundException::class); - $builder($dto, 10); - } - public function testBuildsHtmlFormattedGeneratesTextViaHtml2Text(): void { $subscriber = $this->getMockBuilder(Subscriber::class) @@ -105,7 +91,6 @@ static function (...$args): string { ); $dto = new MessagePrecacheDto(); - $dto->to = 'user@example.com'; $dto->content = 'Hi'; $dto->htmlFormatted = true; @@ -115,7 +100,7 @@ static function (...$args): string { ->willReturn('Hi'); $builder = $this->makeBuilder(); - [$html, $text] = $builder($dto, 5); + [$html, $text] = $builder($dto, $subscriber, 5); $this->assertSame('Hi', $text); $this->assertStringContainsString('Hi', $html); @@ -148,7 +133,6 @@ static function (...$args): string { ); $dto = new MessagePrecacheDto(); - $dto->to = 'user@example.com'; $dto->content = 'Hello world'; $dto->htmlFormatted = false; @@ -158,7 +142,7 @@ static function (...$args): string { ->willReturn('
Hello world
'); $builder = $this->makeBuilder(); - [$html, $text] = $builder($dto, 7); + [$html, $text] = $builder($dto, $subscriber, 7); $this->assertSame('Hello world', $text); $this->assertStringContainsString('Hello world
', $html); @@ -183,7 +167,6 @@ public function testUserSpecificUrlReplacementAndExceptionOnEmpty(): void // Success path replacement $dto = new MessagePrecacheDto(); - $dto->to = 'user@example.com'; $dto->content = 'Intro [URL:example.com/path] End'; $dto->userSpecificUrl = true; @@ -204,12 +187,11 @@ static function (...$args): string { ); $builder = $this->makeBuilder(); - [$html] = $builder($dto, 11); + [$html] = $builder($dto, $subscriber, 11); $this->assertStringContainsString('Inner
'; $dto->htmlFormatted = true; $dto->template = 'Inner
AFTER', $html); $this->assertStringNotContainsString( diff --git a/tests/Unit/Domain/Messaging/Service/ForwardContentServiceTest.php b/tests/Unit/Domain/Messaging/Service/ForwardContentServiceTest.php index 1fa1b037..8a7bc67a 100644 --- a/tests/Unit/Domain/Messaging/Service/ForwardContentServiceTest.php +++ b/tests/Unit/Domain/Messaging/Service/ForwardContentServiceTest.php @@ -42,7 +42,7 @@ public function testThrowsWhenCacheMissing(): void $campaign = $this->createMock(Message::class); $campaign->method('getId')->willReturn(10); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $this->cache ->expects(self::once()) @@ -76,7 +76,7 @@ public function testProcessesLinksAndDelegatesToBuilder(): void $campaign = $this->createMock(Message::class); $campaign->method('getId')->willReturn(42); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $subscriber->setHtmlEmail(true); $cached = new MessagePrecacheDto(); diff --git a/tests/Unit/Domain/Messaging/Service/ForwardDeliveryServiceTest.php b/tests/Unit/Domain/Messaging/Service/ForwardDeliveryServiceTest.php index 5bbdfc0b..ca02a0b6 100644 --- a/tests/Unit/Domain/Messaging/Service/ForwardDeliveryServiceTest.php +++ b/tests/Unit/Domain/Messaging/Service/ForwardDeliveryServiceTest.php @@ -73,7 +73,7 @@ public function testMarkSentDelegatesToManager(): void ); $campaign = $this->createMock(Message::class); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $friendEmail = 'friend@example.test'; $this->forwardManager->expects(self::once()) @@ -97,7 +97,7 @@ public function testMarkFailedDelegatesToManager(): void ); $campaign = $this->createMock(Message::class); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $friendEmail = 'friend@example.test'; $this->forwardManager->expects(self::once()) diff --git a/tests/Unit/Domain/Messaging/Service/ForwardingGuardTest.php b/tests/Unit/Domain/Messaging/Service/ForwardingGuardTest.php index b1ee10b9..d58603d6 100644 --- a/tests/Unit/Domain/Messaging/Service/ForwardingGuardTest.php +++ b/tests/Unit/Domain/Messaging/Service/ForwardingGuardTest.php @@ -43,7 +43,7 @@ public function testAssertCanForwardReturnsSubscriber(): void $uid = 'abc'; $campaign = $this->createMock(Message::class); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $this->subscriberRepo->method('findOneByUniqueId')->with($uid)->willReturn($subscriber); $this->userMessageRepo->method('findByUserAndMessage')->willReturn( @@ -81,7 +81,7 @@ public function testAssertCanForwardThrowsWhenMessageNotReceived(): void forwardEmailPeriod: '1 day', ); - $this->subscriberRepo->method('findOneByUniqueId')->willReturn(new Subscriber()); + $this->subscriberRepo->method('findOneByUniqueId')->willReturn(new Subscriber('alice@example.com')); $this->userMessageRepo->method('findByUserAndMessage')->willReturn(null); $this->expectException(MessageNotReceivedException::class); @@ -98,7 +98,7 @@ public function testAssertCanForwardThrowsWhenLimitExceeded(): void forwardEmailPeriod: '1 day', ); - $this->subscriberRepo->method('findOneByUniqueId')->willReturn(new Subscriber()); + $this->subscriberRepo->method('findOneByUniqueId')->willReturn(new Subscriber('alice@example.com')); $this->userMessageRepo->method('findByUserAndMessage')->willReturn($this->createMock(UserMessage::class)); $this->forwardRepo->method('getCountByUserSince')->willReturn(2); diff --git a/tests/Unit/Domain/Messaging/Service/Manager/BounceManagerTest.php b/tests/Unit/Domain/Messaging/Service/Manager/BounceManagerTest.php index 9de0df4d..8dabc30e 100644 --- a/tests/Unit/Domain/Messaging/Service/Manager/BounceManagerTest.php +++ b/tests/Unit/Domain/Messaging/Service/Manager/BounceManagerTest.php @@ -179,7 +179,7 @@ public function testFetchUserMessageBounceBatchDelegates(): void public function testGetUserMessageHistoryWithBouncesDelegates(): void { - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $expected = []; $this->userMessageBounceRepository->expects($this->once()) ->method('getUserMessageHistoryWithBounces') diff --git a/tests/Unit/Domain/Messaging/Service/MessageForwardServiceTest.php b/tests/Unit/Domain/Messaging/Service/MessageForwardServiceTest.php index 6e7c059a..6eeab890 100644 --- a/tests/Unit/Domain/Messaging/Service/MessageForwardServiceTest.php +++ b/tests/Unit/Domain/Messaging/Service/MessageForwardServiceTest.php @@ -75,7 +75,7 @@ public function testSkipsAlreadySentAndStillUpdatesStats(): void { $service = $this->createService(); $campaign = $this->createMock(Message::class); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $this->loader->expects(self::once()) ->method('__invoke') @@ -114,7 +114,7 @@ public function testPrecacheFailureNotifiesAndMarksFailed(): void { $service = $this->createService(); $campaign = $this->createMock(Message::class); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $this->loader->method('__invoke')->willReturn(['ok' => true]); $this->guard->method('assertCanForward')->willReturn($subscriber); @@ -142,7 +142,7 @@ public function testSuccessfulFlowSendsAndUpdatesEverything(): void { $service = $this->createService(); $campaign = $this->createMock(Message::class); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $this->loader->method('__invoke')->willReturn(['ok' => true]); $this->guard->method('assertCanForward')->willReturn($subscriber); @@ -181,7 +181,7 @@ public function testGetContentsThrowsEmailBlacklistedIsHandledAsFailureAndReport { $service = $this->createService(); $campaign = $this->createMock(Message::class); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $this->loader->method('__invoke')->willReturn(['ok' => true]); $this->guard->method('assertCanForward')->willReturn($subscriber); @@ -214,7 +214,7 @@ public function testGetContentsThrowsInvalidRecipientIsHandledAsFailureAndReport { $service = $this->createService(); $campaign = $this->createMock(Message::class); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $this->loader->method('__invoke')->willReturn(['ok' => true]); $this->guard->method('assertCanForward')->willReturn($subscriber); @@ -245,7 +245,7 @@ public function testPrecacheFailureAlsoReflectedInForwardingResult(): void { $service = $this->createService(); $campaign = $this->createMock(Message::class); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $this->loader->method('__invoke')->willReturn(['data' => true]); $this->guard->method('assertCanForward')->willReturn($subscriber); @@ -272,7 +272,7 @@ public function testMixedScenarioAggregatesResultsAndSideEffects(): void { $service = $this->createService(); $campaign = $this->createMock(Message::class); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('alice@example.com'); $this->loader->method('__invoke')->willReturn(['ok' => 1]); $this->guard->method('assertCanForward')->willReturn($subscriber); diff --git a/tests/Unit/Domain/Subscription/Model/SubscriberTest.php b/tests/Unit/Domain/Subscription/Model/SubscriberTest.php index 0827f7fd..d1aa848c 100644 --- a/tests/Unit/Domain/Subscription/Model/SubscriberTest.php +++ b/tests/Unit/Domain/Subscription/Model/SubscriberTest.php @@ -28,7 +28,7 @@ class SubscriberTest extends TestCase protected function setUp(): void { - $this->subscriber = new Subscriber(); + $this->subscriber = new Subscriber(''); } public function testIsDomainModel(): void diff --git a/tests/Unit/Domain/Subscription/Model/SubscriptionTest.php b/tests/Unit/Domain/Subscription/Model/SubscriptionTest.php index d6abfe09..e0148a83 100644 --- a/tests/Unit/Domain/Subscription/Model/SubscriptionTest.php +++ b/tests/Unit/Domain/Subscription/Model/SubscriptionTest.php @@ -42,7 +42,7 @@ public function testGetSubscriberInitiallyReturnsNull(): void public function testSetSubscriberSetsSubscriber(): void { - $model = new Subscriber(); + $model = new Subscriber('test@example.com'); $this->subject->setSubscriber($model); self::assertSame($model, $this->subject->getSubscriber()); diff --git a/tests/Unit/Domain/Subscription/Service/Manager/SubscriberAttributeManagerTest.php b/tests/Unit/Domain/Subscription/Service/Manager/SubscriberAttributeManagerTest.php index 4d3e7e3a..e0632df9 100644 --- a/tests/Unit/Domain/Subscription/Service/Manager/SubscriberAttributeManagerTest.php +++ b/tests/Unit/Domain/Subscription/Service/Manager/SubscriberAttributeManagerTest.php @@ -22,7 +22,7 @@ class SubscriberAttributeManagerTest extends TestCase { public function testCreateNewSubscriberAttribute(): void { - $subscriber = new Subscriber(); + $subscriber = new Subscriber('test@example.com'); $definition = new SubscriberAttributeDefinition(); $subscriberAttrRepo = $this->createMock(SubscriberAttributeValueRepository::class); @@ -53,7 +53,7 @@ public function testCreateNewSubscriberAttribute(): void public function testUpdateExistingSubscriberAttribute(): void { - $subscriber = new Subscriber(); + $subscriber = new Subscriber('test@example.com'); $definition = new SubscriberAttributeDefinition(); $existing = new SubscriberAttributeValue($definition, $subscriber); $existing->setValue('Old'); @@ -83,7 +83,7 @@ public function testUpdateExistingSubscriberAttribute(): void public function testCreateFailsWhenValueAndDefaultAreNull(): void { - $subscriber = new Subscriber(); + $subscriber = new Subscriber('test@example.com'); $definition = new SubscriberAttributeDefinition(); $subscriberAttrRepo = $this->createMock(SubscriberAttributeValueRepository::class); @@ -109,7 +109,10 @@ public function testGetSubscriberAttribute(): void $subscriberAttrRepo = $this->createMock(SubscriberAttributeValueRepository::class); $entityManager = $this->createMock(EntityManagerInterface::class); - $expected = new SubscriberAttributeValue(new SubscriberAttributeDefinition(), new Subscriber()); + $expected = new SubscriberAttributeValue( + new SubscriberAttributeDefinition(), + new Subscriber('test@example.com') + ); $subscriberAttrRepo->expects(self::once()) ->method('findOneBySubscriberIdAndAttributeId') ->with(5, 10) diff --git a/tests/Unit/Domain/Subscription/Service/Manager/SubscriberBlacklistManagerTest.php b/tests/Unit/Domain/Subscription/Service/Manager/SubscriberBlacklistManagerTest.php index 16ca73bd..a78bbc0b 100644 --- a/tests/Unit/Domain/Subscription/Service/Manager/SubscriberBlacklistManagerTest.php +++ b/tests/Unit/Domain/Subscription/Service/Manager/SubscriberBlacklistManagerTest.php @@ -130,6 +130,7 @@ public function testRemoveEmailFromBlacklistRemovesAllRelatedData(): void $blacklist = $this->createMock(UserBlacklist::class); $blacklistData = $this->createMock(UserBlacklistData::class); $subscriber = $this->getMockBuilder(Subscriber::class) + ->setConstructorArgs(['test@example.com']) ->onlyMethods(['setBlacklisted']) ->getMock(); diff --git a/tests/Unit/Domain/Subscription/Service/Manager/SubscriptionManagerTest.php b/tests/Unit/Domain/Subscription/Service/Manager/SubscriptionManagerTest.php index edbe1c07..8bcd19d5 100644 --- a/tests/Unit/Domain/Subscription/Service/Manager/SubscriptionManagerTest.php +++ b/tests/Unit/Domain/Subscription/Service/Manager/SubscriptionManagerTest.php @@ -44,7 +44,7 @@ protected function setUp(): void public function testCreateSubscriptionWhenSubscriberExists(): void { $email = 'test@example.com'; - $subscriber = new Subscriber(); + $subscriber = new Subscriber($email); $list = new SubscriberList(); $this->subscriberRepository->method('findOneBy')->with(['email' => $email])->willReturn($subscriber); @@ -106,7 +106,7 @@ public function testGetSubscriberListMembersReturnsList(): void { $subscriberList = $this->createMock(SubscriberList::class); $subscriberList->method('getId')->willReturn(1); - $subscriber = new Subscriber(); + $subscriber = new Subscriber('user@example.com'); $this->subscriberRepository ->method('getSubscribersBySubscribedListId') diff --git a/tests/Unit/Domain/Subscription/Service/Provider/CheckboxGroupValueProviderTest.php b/tests/Unit/Domain/Subscription/Service/Provider/CheckboxGroupValueProviderTest.php index c01ae3b1..a083e0a9 100644 --- a/tests/Unit/Domain/Subscription/Service/Provider/CheckboxGroupValueProviderTest.php +++ b/tests/Unit/Domain/Subscription/Service/Provider/CheckboxGroupValueProviderTest.php @@ -40,7 +40,7 @@ private function createAttribute( private function createUserAttr(SubscriberAttributeDefinition $def, ?string $value): SubscriberAttributeValue { - $subscriber = new Subscriber(); + $subscriber = new Subscriber('user@example.com'); $userAttr = new SubscriberAttributeValue($def, $subscriber); $userAttr->setValue($value); diff --git a/tests/Unit/Domain/Subscription/Service/Provider/SubscriberAttributeChangeSetProviderTest.php b/tests/Unit/Domain/Subscription/Service/Provider/SubscriberAttributeChangeSetProviderTest.php index a38baabf..1825ebfa 100644 --- a/tests/Unit/Domain/Subscription/Service/Provider/SubscriberAttributeChangeSetProviderTest.php +++ b/tests/Unit/Domain/Subscription/Service/Provider/SubscriberAttributeChangeSetProviderTest.php @@ -39,7 +39,7 @@ protected function setUp(): void public function testNoChangesWhenNewAndExistingAreIdenticalCaseInsensitive(): void { - $subscriber = new Subscriber(); + $subscriber = new Subscriber('user@example.com'); $existing = [ $this->attr('Name', 'John', $subscriber), $this->attr('Age', '30', $subscriber), @@ -64,7 +64,7 @@ public function testNoChangesWhenNewAndExistingAreIdenticalCaseInsensitive(): vo public function testAddedAttributeAppearsWithNullOldValue(): void { - $subscriber = new Subscriber(); + $subscriber = new Subscriber('user@example.com'); $existing = [ $this->attr('Name', 'John', $subscriber), ]; @@ -86,7 +86,7 @@ public function testAddedAttributeAppearsWithNullOldValue(): void public function testRemovedAttributeAppearsWithNullNewValue(): void { - $subscriber = new Subscriber(); + $subscriber = new Subscriber('user@example.com'); $existing = [ $this->attr('Country', 'US', $subscriber), ]; @@ -102,7 +102,7 @@ public function testRemovedAttributeAppearsWithNullNewValue(): void public function testChangedAttributeShowsOldAndNewValues(): void { - $subscriber = new Subscriber(); + $subscriber = new Subscriber('user@example.com'); $existing = [ $this->attr('Phone', '123', $subscriber), ]; @@ -121,7 +121,7 @@ public function testChangedAttributeShowsOldAndNewValues(): void public function testIgnoredAttributesAreExcluded(): void { - $subscriber = new Subscriber(); + $subscriber = new Subscriber('user@example.com'); $existing = [ $this->attr('Password', 'old', $subscriber), $this->attr('Modified', 'yesterday', $subscriber), @@ -147,7 +147,7 @@ public function testIgnoredAttributesAreExcluded(): void public function testCaseInsensitiveKeyComparisonAndResultLowercasing(): void { - $subscriber = new Subscriber(); + $subscriber = new Subscriber('user@example.com'); $existing = [ $this->attr('FirstName', 'Ann', $subscriber), ];