Refactor integration Import test
[MAILPOET-3378]
This commit is contained in:
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace MailPoet\Subscribers\ImportExport\Import;
|
namespace MailPoet\Subscribers\ImportExport\Import;
|
||||||
|
|
||||||
|
use DateTime;
|
||||||
use MailPoet\CustomFields\CustomFieldsRepository;
|
use MailPoet\CustomFields\CustomFieldsRepository;
|
||||||
use MailPoet\Entities\CustomFieldEntity;
|
use MailPoet\Entities\CustomFieldEntity;
|
||||||
use MailPoet\Entities\SegmentEntity;
|
use MailPoet\Entities\SegmentEntity;
|
||||||
@ -100,15 +101,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
'last_name',
|
'last_name',
|
||||||
'email',
|
'email',
|
||||||
];
|
];
|
||||||
$this->import = new Import(
|
$this->import = $this->createImportInstance($this->testData);
|
||||||
$this->wpSegment,
|
|
||||||
$this->customFieldsRepository,
|
|
||||||
$this->newsletterOptionsRepository,
|
|
||||||
$this->subscriberCustomFieldRepository,
|
|
||||||
$this->subscriberRepository,
|
|
||||||
$this->subscriberSegmentRepository,
|
|
||||||
$this->testData
|
|
||||||
);
|
|
||||||
$this->subscribersData = $this->import->transformSubscribersData(
|
$this->subscribersData = $this->import->transformSubscribersData(
|
||||||
$this->testData['subscribers'],
|
$this->testData['subscribers'],
|
||||||
$this->testData['columns']
|
$this->testData['columns']
|
||||||
@ -190,15 +183,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
'existingSubscribersStatus' => Import::STATUS_DONT_UPDATE,
|
'existingSubscribersStatus' => Import::STATUS_DONT_UPDATE,
|
||||||
'updateSubscribers' => true,
|
'updateSubscribers' => true,
|
||||||
];
|
];
|
||||||
$import = new Import(
|
$import = $this->createImportInstance($data);
|
||||||
$this->wpSegment,
|
|
||||||
$this->customFieldsRepository,
|
|
||||||
$this->newsletterOptionsRepository,
|
|
||||||
$this->subscriberCustomFieldRepository,
|
|
||||||
$this->subscriberRepository,
|
|
||||||
$this->subscriberSegmentRepository,
|
|
||||||
$data
|
|
||||||
);
|
|
||||||
try {
|
try {
|
||||||
$import->process();
|
$import->process();
|
||||||
self::fail('No valid subscribers found exception not thrown.');
|
self::fail('No valid subscribers found exception not thrown.');
|
||||||
@ -234,13 +219,14 @@ class ImportTest extends \MailPoetTest {
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
foreach ($subscribersDataExisting as $i => $existingSubscriber) {
|
foreach ($subscribersDataExisting as $i => $existingSubscriber) {
|
||||||
$subscriber = new SubscriberEntity();
|
$this->createSubscriber(
|
||||||
$subscriber->setFirstName($existingSubscriber['first_name']);
|
$existingSubscriber['first_name'],
|
||||||
$subscriber->setLastName($existingSubscriber['last_name']);
|
$existingSubscriber['last_name'],
|
||||||
$subscriber->setEmail($existingSubscriber['email']);
|
$existingSubscriber['email'],
|
||||||
$subscriber->setWpUserId($existingSubscriber['wp_user_id'] ?? null);
|
null,
|
||||||
$this->subscriberRepository->persist($subscriber);
|
null,
|
||||||
$this->subscriberRepository->flush();
|
$existingSubscriber['wp_user_id'] ?? null
|
||||||
|
);
|
||||||
$subscribersData['first_name'][] = $existingSubscriber['first_name'];
|
$subscribersData['first_name'][] = $existingSubscriber['first_name'];
|
||||||
$subscribersData['last_name'][] = $existingSubscriber['last_name'];
|
$subscribersData['last_name'][] = $existingSubscriber['last_name'];
|
||||||
$subscribersData['email'][] = strtolower($existingSubscriber['email']); // import emails are always lowercase
|
$subscribersData['email'][] = strtolower($existingSubscriber['email']); // import emails are always lowercase
|
||||||
@ -276,15 +262,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
'existingSubscribersStatus' => Import::STATUS_DONT_UPDATE,
|
'existingSubscribersStatus' => Import::STATUS_DONT_UPDATE,
|
||||||
'updateSubscribers' => true,
|
'updateSubscribers' => true,
|
||||||
];
|
];
|
||||||
$import = new Import(
|
$import = $this->createImportInstance($data);
|
||||||
$this->wpSegment,
|
|
||||||
$this->customFieldsRepository,
|
|
||||||
$this->newsletterOptionsRepository,
|
|
||||||
$this->subscriberCustomFieldRepository,
|
|
||||||
$this->subscriberRepository,
|
|
||||||
$this->subscriberSegmentRepository,
|
|
||||||
$data
|
|
||||||
);
|
|
||||||
$subscribersData = [
|
$subscribersData = [
|
||||||
'data' => $import->subscribersData,
|
'data' => $import->subscribersData,
|
||||||
'fields' => $import->subscribersFields,
|
'fields' => $import->subscribersFields,
|
||||||
@ -478,14 +456,13 @@ class ImportTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function testItDoesNotUpdateExistingSubscribersStatusWhenStatusColumnIsNotPresent() {
|
public function testItDoesNotUpdateExistingSubscribersStatusWhenStatusColumnIsNotPresent() {
|
||||||
$subscriber = new SubscriberEntity();
|
$subscriber = $this->createSubscriber(
|
||||||
$subscriber->setFirstName('Adam');
|
'Adam',
|
||||||
$subscriber->setLastName('Smith');
|
'Smith',
|
||||||
$subscriber->setEmail('Adam@Smith.com');
|
'Adam@Smith.com',
|
||||||
$subscriber->setStatus(SubscriberEntity::STATUS_UNSUBSCRIBED);
|
SubscriberEntity::STATUS_UNSUBSCRIBED
|
||||||
$this->subscriberRepository->persist($subscriber);
|
);
|
||||||
$this->subscriberRepository->flush();
|
$this->import->process();
|
||||||
$result = $this->import->process();
|
|
||||||
|
|
||||||
$updatedSubscriber = $this->subscriberRepository->findOneBy(['email' => $subscriber->getEmail()]);
|
$updatedSubscriber = $this->subscriberRepository->findOneBy(['email' => $subscriber->getEmail()]);
|
||||||
assert($updatedSubscriber instanceof SubscriberEntity);
|
assert($updatedSubscriber instanceof SubscriberEntity);
|
||||||
@ -497,15 +474,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
$data['columns']['status'] = ['index' => 4];
|
$data['columns']['status'] = ['index' => 4];
|
||||||
$data['subscribers'][0][] = 'unsubscribed';
|
$data['subscribers'][0][] = 'unsubscribed';
|
||||||
$data['subscribers'][1][] = 'unsubscribed';
|
$data['subscribers'][1][] = 'unsubscribed';
|
||||||
$import = new Import(
|
$import = $this->createImportInstance($data);
|
||||||
$this->wpSegment,
|
|
||||||
$this->customFieldsRepository,
|
|
||||||
$this->newsletterOptionsRepository,
|
|
||||||
$this->subscriberCustomFieldRepository,
|
|
||||||
$this->subscriberRepository,
|
|
||||||
$this->subscriberSegmentRepository,
|
|
||||||
$data
|
|
||||||
);
|
|
||||||
$result = $import->process();
|
$result = $import->process();
|
||||||
/** @var SubscriberEntity[] $newSubscribers */
|
/** @var SubscriberEntity[] $newSubscribers */
|
||||||
$newSubscribers = $this->subscriberRepository->findBy(['email' => [
|
$newSubscribers = $this->subscriberRepository->findBy(['email' => [
|
||||||
@ -529,24 +498,16 @@ class ImportTest extends \MailPoetTest {
|
|||||||
$data['columns']['last_subscribed_at'] = ['index' => 4];
|
$data['columns']['last_subscribed_at'] = ['index' => 4];
|
||||||
$data['subscribers'][0][] = '2018-12-12 12:12:00';
|
$data['subscribers'][0][] = '2018-12-12 12:12:00';
|
||||||
$data['subscribers'][1][] = '2018-12-12 12:12:00';
|
$data['subscribers'][1][] = '2018-12-12 12:12:00';
|
||||||
$import = new Import(
|
$lastSubscribedAt = Carbon::createFromFormat('Y-m-d H:i:s', '2017-12-12 12:12:00');
|
||||||
$this->wpSegment,
|
assert($lastSubscribedAt instanceof Carbon);
|
||||||
$this->customFieldsRepository,
|
$import = $this->createImportInstance($data);
|
||||||
$this->newsletterOptionsRepository,
|
$existingSubscriber = $this->createSubscriber(
|
||||||
$this->subscriberCustomFieldRepository,
|
'Adam',
|
||||||
$this->subscriberRepository,
|
'Smith',
|
||||||
$this->subscriberSegmentRepository,
|
'Adam@Smith.com',
|
||||||
$data
|
null,
|
||||||
|
$lastSubscribedAt
|
||||||
);
|
);
|
||||||
$subscribedAt = Carbon::createFromFormat('Y-m-d H:i:s', '2017-12-12 12:12:00');
|
|
||||||
assert($subscribedAt instanceof Carbon);
|
|
||||||
$existingSubscriber = new SubscriberEntity();
|
|
||||||
$existingSubscriber->setFirstName('Adam');
|
|
||||||
$existingSubscriber->setLastName('Smith');
|
|
||||||
$existingSubscriber->setEmail('Adam@Smith.com');
|
|
||||||
$existingSubscriber->setLastSubscribedAt($subscribedAt);
|
|
||||||
$this->subscriberRepository->persist($existingSubscriber);
|
|
||||||
$this->subscriberRepository->flush();
|
|
||||||
$import->process();
|
$import->process();
|
||||||
|
|
||||||
$updatedSubscriber = $this->subscriberRepository->findOneBy(['email' => $existingSubscriber->getEmail()]);
|
$updatedSubscriber = $this->subscriberRepository->findOneBy(['email' => $existingSubscriber->getEmail()]);
|
||||||
@ -559,15 +520,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
$beforeImport = $this->subscriberRepository->findOneBy(['email' => 'mary@jane.com']);
|
$beforeImport = $this->subscriberRepository->findOneBy(['email' => 'mary@jane.com']);
|
||||||
assert($beforeImport instanceof SubscriberEntity);
|
assert($beforeImport instanceof SubscriberEntity);
|
||||||
$data = $this->testData;
|
$data = $this->testData;
|
||||||
$import = new Import(
|
$import = $this->createImportInstance($data);
|
||||||
$this->wpSegment,
|
|
||||||
$this->customFieldsRepository,
|
|
||||||
$this->newsletterOptionsRepository,
|
|
||||||
$this->subscriberCustomFieldRepository,
|
|
||||||
$this->subscriberRepository,
|
|
||||||
$this->subscriberSegmentRepository,
|
|
||||||
$data
|
|
||||||
);
|
|
||||||
$import->process();
|
$import->process();
|
||||||
|
|
||||||
$this->entityManager->clear();
|
$this->entityManager->clear();
|
||||||
@ -581,25 +534,16 @@ class ImportTest extends \MailPoetTest {
|
|||||||
public function testItDoesUpdateStatusExistingSubscriberWhenExistingSubscribersStatusIsSet() {
|
public function testItDoesUpdateStatusExistingSubscriberWhenExistingSubscribersStatusIsSet() {
|
||||||
$data = $this->testData;
|
$data = $this->testData;
|
||||||
$data['existingSubscribersStatus'] = SubscriberEntity::STATUS_SUBSCRIBED;
|
$data['existingSubscribersStatus'] = SubscriberEntity::STATUS_SUBSCRIBED;
|
||||||
$subscribedAt = Carbon::createFromFormat('Y-m-d H:i:s', '2020-08-08 08:08:00');
|
$lastSubscribedAt = Carbon::createFromFormat('Y-m-d H:i:s', '2020-08-08 08:08:00');
|
||||||
assert($subscribedAt instanceof Carbon);
|
assert($lastSubscribedAt instanceof Carbon);
|
||||||
$existingSubscriber = new SubscriberEntity();
|
$existingSubscriber = $this->createSubscriber(
|
||||||
$existingSubscriber->setFirstName('Adam');
|
'Adam',
|
||||||
$existingSubscriber->setLastName('Smith');
|
'Smith',
|
||||||
$existingSubscriber->setEmail('Adam@Smith.com');
|
'Adam@Smith.com',
|
||||||
$existingSubscriber->setLastSubscribedAt($subscribedAt);
|
SubscriberEntity::STATUS_UNSUBSCRIBED,
|
||||||
$existingSubscriber->setStatus(SubscriberEntity::STATUS_UNSUBSCRIBED);
|
$lastSubscribedAt
|
||||||
$this->subscriberRepository->persist($existingSubscriber);
|
|
||||||
$this->subscriberRepository->flush();
|
|
||||||
$import = new Import(
|
|
||||||
$this->wpSegment,
|
|
||||||
$this->customFieldsRepository,
|
|
||||||
$this->newsletterOptionsRepository,
|
|
||||||
$this->subscriberCustomFieldRepository,
|
|
||||||
$this->subscriberRepository,
|
|
||||||
$this->subscriberSegmentRepository,
|
|
||||||
$data
|
|
||||||
);
|
);
|
||||||
|
$import = $this->createImportInstance($data);
|
||||||
$import->process();
|
$import->process();
|
||||||
|
|
||||||
$this->entityManager->clear();
|
$this->entityManager->clear();
|
||||||
@ -611,15 +555,7 @@ class ImportTest extends \MailPoetTest {
|
|||||||
public function testItDoesStatusNewSubscriberWhenNewSubscribersStatusIsSet() {
|
public function testItDoesStatusNewSubscriberWhenNewSubscribersStatusIsSet() {
|
||||||
$data = $this->testData;
|
$data = $this->testData;
|
||||||
$data['newSubscribersStatus'] = SubscriberEntity::STATUS_UNSUBSCRIBED;
|
$data['newSubscribersStatus'] = SubscriberEntity::STATUS_UNSUBSCRIBED;
|
||||||
$import = new Import(
|
$import = $this->createImportInstance($data);
|
||||||
$this->wpSegment,
|
|
||||||
$this->customFieldsRepository,
|
|
||||||
$this->newsletterOptionsRepository,
|
|
||||||
$this->subscriberCustomFieldRepository,
|
|
||||||
$this->subscriberRepository,
|
|
||||||
$this->subscriberSegmentRepository,
|
|
||||||
$data
|
|
||||||
);
|
|
||||||
$import->process();
|
$import->process();
|
||||||
$newSubscriber = $this->subscriberRepository->findOneBy(['email' => 'Adam@Smith.com']);
|
$newSubscriber = $this->subscriberRepository->findOneBy(['email' => 'Adam@Smith.com']);
|
||||||
assert($newSubscriber instanceof SubscriberEntity);
|
assert($newSubscriber instanceof SubscriberEntity);
|
||||||
@ -654,6 +590,42 @@ class ImportTest extends \MailPoetTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function createImportInstance(array $data): Import {
|
||||||
|
return new Import(
|
||||||
|
$this->wpSegment,
|
||||||
|
$this->customFieldsRepository,
|
||||||
|
$this->newsletterOptionsRepository,
|
||||||
|
$this->subscriberCustomFieldRepository,
|
||||||
|
$this->subscriberRepository,
|
||||||
|
$this->subscriberSegmentRepository,
|
||||||
|
$data
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createSubscriber(
|
||||||
|
string $firstName,
|
||||||
|
string $lastName,
|
||||||
|
string $email,
|
||||||
|
?string $status = null,
|
||||||
|
?DateTime $lastSubscribedAt = null,
|
||||||
|
?int $wpUserid = null
|
||||||
|
): SubscriberEntity {
|
||||||
|
$subscriber = new SubscriberEntity();
|
||||||
|
$subscriber->setFirstName($firstName);
|
||||||
|
$subscriber->setLastName($lastName);
|
||||||
|
$subscriber->setEmail($email);
|
||||||
|
if ($status) {
|
||||||
|
$subscriber->setStatus($status);
|
||||||
|
}
|
||||||
|
if ($lastSubscribedAt) {
|
||||||
|
$subscriber->setLastSubscribedAt($lastSubscribedAt);
|
||||||
|
}
|
||||||
|
$subscriber->setWpUserId($wpUserid);
|
||||||
|
$this->subscriberRepository->persist($subscriber);
|
||||||
|
$this->subscriberRepository->flush();
|
||||||
|
return $subscriber;
|
||||||
|
}
|
||||||
|
|
||||||
public function _after() {
|
public function _after() {
|
||||||
$this->truncateEntity(SubscriberEntity::class);
|
$this->truncateEntity(SubscriberEntity::class);
|
||||||
$this->truncateEntity(SegmentEntity::class);
|
$this->truncateEntity(SegmentEntity::class);
|
||||||
|
Reference in New Issue
Block a user