Files
piratepoet/mailpoet/tests/integration/Migrations/Db/Migration_20221028_105818_Test.php
Rodrigo Primo afe378ba22 Replace expect()->equals() with verify()->equals()
codeception/verify 2.1 removed support for expect()->equals() so we need
to replace it with verify()->equals().

[MAILPOET-5664]
2023-10-24 08:58:22 +03:00

106 lines
5.7 KiB
PHP

<?php declare(strict_types = 1);
namespace MailPoet\Migrations\Db;
use MailPoet\Entities\DynamicSegmentFilterData;
use MailPoet\Entities\DynamicSegmentFilterEntity;
use MailPoet\Segments\DynamicSegments\Filters\EmailAction;
use MailPoet\Settings\SettingsController;
//phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
class Migration_20221028_105818_Test extends \MailPoetTest {
/** @var Migration_20221028_105818 */
private $migration;
/** @var SettingsController */
private $settings;
public function _before() {
parent::_before();
$this->migration = new Migration_20221028_105818($this->diContainer);
$this->settings = $this->diContainer->get(SettingsController::class);
}
public function testItMigratesEmailMachineOpensFiltersCorrectly() {
$this->settings->set('db_version', '3.76.0');
$data = ['newsletter_id' => '1'];
$id = $this->createSegmentFilter(EmailAction::ACTION_OPENED, $data, DynamicSegmentFilterData::TYPE_EMAIL);
$this->migration->run();
$filter = $this->entityManager->find(DynamicSegmentFilterEntity::class, $id);
$this->assertInstanceOf(DynamicSegmentFilterEntity::class, $filter);
verify($filter->getFilterData()->getAction())->equals(EmailAction::ACTION_OPENED);
verify($filter->getFilterData()->getData())->equals(['newsletters' => [1], 'operator' => 'any']);
}
public function testItMigratesEmailOpensFiltersCorrectly() {
$this->settings->set('db_version', '3.76.0');
$data = ['newsletter_id' => '1'];
$id = $this->createSegmentFilter(EmailAction::ACTION_MACHINE_OPENED, $data, DynamicSegmentFilterData::TYPE_EMAIL);
$this->migration->run();
$filter = $this->entityManager->find(DynamicSegmentFilterEntity::class, $id);
$this->assertInstanceOf(DynamicSegmentFilterEntity::class, $filter);
verify($filter->getFilterData()->getAction())->equals(EmailAction::ACTION_MACHINE_OPENED);
verify($filter->getFilterData()->getData())->equals(['newsletters' => [1], 'operator' => 'any']);
}
public function testItMigratesEmailNotOpenedFiltersCorrectly() {
$this->settings->set('db_version', '3.76.0');
$data = ['newsletter_id' => '1'];
$id = $this->createSegmentFilter(EmailAction::ACTION_NOT_OPENED, $data, DynamicSegmentFilterData::TYPE_EMAIL);
$this->migration->run();
$filter = $this->entityManager->find(DynamicSegmentFilterEntity::class, $id);
$this->assertInstanceOf(DynamicSegmentFilterEntity::class, $filter);
verify($filter->getFilterData()->getAction())->equals(EmailAction::ACTION_OPENED);
verify($filter->getFilterData()->getData())->equals(['newsletters' => [1], 'operator' => 'none']);
}
public function testItMigratesEmailClicksFiltersCorrectly() {
$this->settings->set('db_version', '3.76.0');
$dataNoLink = ['newsletter_id' => '1'];
$id1 = $this->createSegmentFilter(EmailAction::ACTION_CLICKED, $dataNoLink, DynamicSegmentFilterData::TYPE_EMAIL);
$dataWithLink = ['newsletter_id' => '1', 'link_id' => '2'];
$id2 = $this->createSegmentFilter(EmailAction::ACTION_CLICKED, $dataWithLink, DynamicSegmentFilterData::TYPE_EMAIL);
$this->migration->run();
$filterNoLink = $this->entityManager->find(DynamicSegmentFilterEntity::class, $id1);
$filterLink = $this->entityManager->find(DynamicSegmentFilterEntity::class, $id2);
$this->assertInstanceOf(DynamicSegmentFilterEntity::class, $filterNoLink);
$this->assertInstanceOf(DynamicSegmentFilterEntity::class, $filterLink);
verify($filterNoLink->getFilterData()->getAction())->equals(EmailAction::ACTION_CLICKED);
verify($filterNoLink->getFilterData()->getData())->equals(['newsletter_id' => '1', 'operator' => 'any', 'link_ids' => []]);
verify($filterLink->getFilterData()->getAction())->equals(EmailAction::ACTION_CLICKED);
verify($filterLink->getFilterData()->getData())->equals(['newsletter_id' => '1', 'operator' => 'any', 'link_ids' => [2]]);
}
public function testItMigratesEmailNotClickedFiltersCorrectly() {
$this->settings->set('db_version', '3.76.0');
$dataNoLink = ['newsletter_id' => '1'];
$id1 = $this->createSegmentFilter(EmailAction::ACTION_NOT_CLICKED, $dataNoLink, DynamicSegmentFilterData::TYPE_EMAIL);
$dataWithLink = ['newsletter_id' => '1', 'link_id' => '2'];
$id2 = $this->createSegmentFilter(EmailAction::ACTION_NOT_CLICKED, $dataWithLink, DynamicSegmentFilterData::TYPE_EMAIL);
$this->migration->run();
$filterNoLink = $this->entityManager->find(DynamicSegmentFilterEntity::class, $id1);
$filterLink = $this->entityManager->find(DynamicSegmentFilterEntity::class, $id2);
$this->assertInstanceOf(DynamicSegmentFilterEntity::class, $filterNoLink);
$this->assertInstanceOf(DynamicSegmentFilterEntity::class, $filterLink);
verify($filterNoLink->getFilterData()->getAction())->equals(EmailAction::ACTION_CLICKED);
verify($filterNoLink->getFilterData()->getData())->equals(['newsletter_id' => '1', 'operator' => 'none', 'link_ids' => []]);
verify($filterLink->getFilterData()->getAction())->equals(EmailAction::ACTION_CLICKED);
verify($filterLink->getFilterData()->getData())->equals(['newsletter_id' => '1', 'operator' => 'none', 'link_ids' => [2]]);
}
private function createSegmentFilter(string $action, array $data, string $type, $segmentId = 1): int {
$filterTable = $this->entityManager->getClassMetadata(DynamicSegmentFilterEntity::class)->getTableName();
$this->entityManager->getConnection()->executeQuery(
"INSERT into $filterTable (segment_id, filter_data, action, filter_type)
VALUES (:segment, :filter_data, :action, :filter_type)",
[
'segment' => $segmentId,
'action' => $action,
'filter_data' => \serialize($data),
'filter_type' => $type,
]
);
return (int)$this->entityManager->getConnection()->lastInsertId();
}
}