Add tests

[MAILPOET-6384]
This commit is contained in:
alex-mpoet
2025-02-20 15:14:28 +03:00
committed by Aschepikov
parent a3ec922ca5
commit e23e4c4974

View File

@ -5,11 +5,16 @@ namespace unit\WooCommerce;
use Codeception\Stub;
use Helper\WordPress;
use MailPoet\Entities\NewsletterEntity;
use MailPoet\Entities\ScheduledTaskEntity;
use MailPoet\Entities\ScheduledTaskSubscriberEntity;
use MailPoet\Entities\SendingQueueEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Renderer\Blocks\Coupon;
use MailPoet\NewsletterProcessingException;
use MailPoet\WooCommerce\CouponPreProcessor;
use MailPoet\WooCommerce\Helper;
use MailPoetVendor\Doctrine\Common\Collections\ArrayCollection;
class CouponPreProcessorTest extends \MailPoetUnitTest {
@ -176,6 +181,68 @@ class CouponPreProcessorTest extends \MailPoetUnitTest {
$processor->processCoupons($newsletter, $blocks, false);
}
public function testItRestrictsCouponToSubscriber(): void {
$subscriberEmail = 'test@example.com';
$wcCoupon = $this->createCouponMock();
$subscriber = $this->make(SubscriberEntity::class, [
'getEmail' => $subscriberEmail,
]);
$taskSubscriber = $this->make(ScheduledTaskSubscriberEntity::class, [
'getSubscriber' => $subscriber,
]);
$task = $this->make(ScheduledTaskEntity::class, [
'getSubscribers' => new ArrayCollection([$taskSubscriber]),
]);
$queue = $this->make(SendingQueueEntity::class, [
'getTask' => $task,
]);
$wcHelper = $this->make(Helper::class, [
'createWcCoupon' => $wcCoupon,
'isWooCommerceActive' => true,
]);
$processor = new CouponPreProcessor(
$wcHelper,
$this->make(NewslettersRepository::class)
);
$newsletter = new NewsletterEntity();
$newsletter->setType(NewsletterEntity::TYPE_AUTOMATION);
$blocks = [
[
'type' => 'any',
'blocks' => [
[
'type' => Coupon::TYPE,
'discountType' => 'percent',
'amount' => '100',
'restrictToSubscriber' => true,
],
],
],
];
$newsletter->setBody(['blocks' => $blocks, 'content' => []]);
$wcCoupon->expects($this->exactly(2))
->method('set_email_restrictions')
->withConsecutive(
[[$subscriberEmail]],
[['other@example.com', $subscriberEmail]]
);
// Test with restrictToSubscriber enabled
$processor->processCoupons($newsletter, $blocks, false, $queue);
// Test with additional emailRestrictions
$blocks[0]['blocks'][0]['emailRestrictions'] = 'other@example.com';
$processor->processCoupons($newsletter, $blocks, false, $queue);
}
private function assertWCCouponReceivesCorrectValues($mockedWCCoupon, $expectedCouponId, $expiryDay) {
$mockedWCCoupon->method('save')->willReturn($expectedCouponId);