Files
piratepoet/tests/DataFactories/CustomField.php
Pavel Dohnal 42ada2df95 Add an acceptance test
[MAILPOET-3220]
2021-05-19 10:07:25 +02:00

57 lines
1.8 KiB
PHP

<?php
namespace MailPoet\Test\DataFactories;
use MailPoet\CustomFields\CustomFieldsRepository;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\CustomFieldEntity;
use MailPoet\Entities\SubscriberCustomFieldEntity;
use MailPoet\Entities\SubscriberEntity;
use MailPoetVendor\Doctrine\ORM\EntityManager;
class CustomField {
/** @var array */
private $data;
/** @var CustomFieldsRepository */
private $repository;
/** @var EntityManager */
private $entityManager;
public function __construct() {
$this->entityManager = ContainerWrapper::getInstance()->get(EntityManager::class);
$this->repository = ContainerWrapper::getInstance(WP_DEBUG)->get(CustomFieldsRepository::class);
$this->data = [
'name' => 'Custom Field ' . bin2hex(random_bytes(7)), // phpcs:ignore
'type' => CustomFieldEntity::TYPE_TEXT,
'params' => [],
'subscribers' => [],
];
}
public function withName(string $name): CustomField {
$this->data['name'] = $name;
return $this;
}
public function withSubscriber($subscriberId, string $value): CustomField {
$this->data['subscribers'][] = ['id' => $subscriberId, 'value' => $value];
return $this;
}
public function create(): CustomFieldEntity {
$customField = $this->repository->createOrUpdate($this->data);
foreach ($this->data['subscribers'] as $subscriberData) {
$subscriber = $this->entityManager->getReference('\MailPoet\Entities\SubscriberEntity', $subscriberData['id']);
if (!$subscriber instanceof SubscriberEntity) {
throw new \Exception('Subscriber failed to create');
}
$scfe = new SubscriberCustomFieldEntity($subscriber, $customField, $subscriberData['value']);
$this->entityManager->persist($scfe);
}
$this->entityManager->flush();
return $customField;
}
}