Files
piratepoet/mailpoet/tests/_support/IntegrationCleanupExtension.php
John Oleksowicz 4b35b24f6a More accurate name for cleanup property
MAILPOET-5145
2023-04-07 12:11:12 -05:00

56 lines
1.7 KiB
PHP

<?php declare(strict_types = 1);
namespace MailPoet\TestsSupport;
use Codeception\Event\SuiteEvent;
use Codeception\Event\TestEvent;
use Codeception\Events;
use Codeception\Extension;
use MailPoet\Config\Env;
use MailPoet\DI\ContainerWrapper;
use MailPoet\Entities\SettingEntity;
use MailPoetVendor\Doctrine\ORM\EntityManager;
class IntegrationCleanupExtension extends Extension {
/** @var EntityManager */
private $entityManager;
public static $events = [
Events::TEST_BEFORE => 'beforeTest',
Events::SUITE_BEFORE => 'beforeSuite',
];
/** @var string */
private $cleanupStatements;
public function beforeSuite(SuiteEvent $event) {
$this->entityManager = ContainerWrapper::getInstance()->get(EntityManager::class);
$mpPrefix = Env::$dbPrefix;
$tables = $this->entityManager->getConnection()->fetchFirstColumn("
SELECT table_name
FROM information_schema.tables
WHERE table_name LIKE '{$mpPrefix}%'
AND table_name != '{$mpPrefix}migrations'
");
$this->cleanupStatements = 'SET FOREIGN_KEY_CHECKS=0;';
foreach ($tables as $table) {
$this->cleanupStatements .= "DELETE FROM $table;";
}
// save plugin version to avoid triggering migrator and populator
$settingsTable = $this->entityManager->getMetadataFactory()->getMetadataFor(SettingEntity::class)->getTableName();
$dbVersion = Env::$version;
$this->cleanupStatements .= "
INSERT INTO $settingsTable (name, value, created_at, updated_at)
VALUES ('db_version', '$dbVersion', NOW(), NOW());
";
$this->cleanupStatements .= 'SET FOREIGN_KEY_CHECKS=1';
}
public function beforeTest(TestEvent $event) {
$this->entityManager->getConnection()->executeStatement($this->cleanupStatements);
}
}