Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\InstallBundle\Tests\Functional; | |
use Mautic\CoreBundle\Helper\FileHelper; | |
use Mautic\CoreBundle\Test\IsolatedTestTrait; | |
use Mautic\CoreBundle\Test\MauticMysqlTestCase; | |
use Mautic\InstallBundle\Configurator\Step\CheckStep; | |
use Mautic\LeadBundle\Entity\LeadField; | |
use PHPUnit\Framework\Assert; | |
use Symfony\Component\HttpFoundation\Request; | |
/** | |
* This test must run in a separate process because it sets the global constant | |
* MAUTIC_INSTALLER which breaks other tests. | |
* | |
* @runTestsInSeparateProcesses | |
* | |
* @preserveGlobalState disabled | |
*/ | |
class InstallWorkflowTest extends MauticMysqlTestCase | |
{ | |
use IsolatedTestTrait; | |
protected $useCleanupRollback = false; | |
private string $localConfigPath; | |
private string $defaultMemoryLimit; | |
protected function setUp(): void | |
{ | |
parent::setUp(); | |
$this->localConfigPath = static::getContainer()->get('kernel')->getLocalConfigFile(); | |
$this->defaultMemoryLimit = ini_get('memory_limit'); | |
if (file_exists($this->localConfigPath)) { | |
// Move local.php so we can get to the installer. | |
rename($this->localConfigPath, $this->localConfigPath.'.bak'); | |
} | |
} | |
protected function beforeTearDown(): void | |
{ | |
if (file_exists($this->localConfigPath)) { | |
// Remove the local.php generated by this test. | |
unlink($this->localConfigPath); | |
} | |
if (file_exists($this->localConfigPath.'.bak')) { | |
// Restore the local config file in it's original state. | |
rename($this->localConfigPath.'.bak', $this->localConfigPath); | |
} | |
ini_set('memory_limit', $this->defaultMemoryLimit); | |
} | |
public function testInstallWorkflow(): void | |
{ | |
// Step 0: System checks. | |
$crawler = $this->client->request(Request::METHOD_GET, '/installer'); | |
Assert::assertTrue($this->client->getResponse()->isOk(), $this->client->getResponse()->getContent()); | |
$submitButton = $crawler->selectButton('install_check_step[buttons][next]'); | |
$form = $submitButton->form(); | |
$crawler = $this->client->submit($form); | |
Assert::assertTrue($this->client->getResponse()->isOk(), $this->client->getResponse()->getContent()); | |
// Step 1: DB. | |
$submitButton = $crawler->selectButton('install_doctrine_step[buttons][next]'); | |
$form = $submitButton->form(); | |
$form['install_doctrine_step[host]']->setValue($this->connection->getParams()['host']); | |
$form['install_doctrine_step[port]']->setValue((string) $this->connection->getParams()['port']); | |
$form['install_doctrine_step[name]']->setValue($this->connection->getParams()['dbname']); | |
$form['install_doctrine_step[user]']->setValue($this->connection->getParams()['user']); | |
$form['install_doctrine_step[password]']->setValue($this->connection->getParams()['password']); | |
$form['install_doctrine_step[backup_tables]']->setValue('0'); | |
$crawler = $this->client->submit($form); | |
Assert::assertTrue($this->client->getResponse()->isOk(), $this->client->getResponse()->getContent()); | |
// Step 2: Admin user. | |
$submitButton = $crawler->selectButton('install_user_step[buttons][next]'); | |
$form = $submitButton->form(); | |
$form['install_user_step[username]']->setValue('admin'); | |
$form['install_user_step[password]']->setValue('maut!cR000cks'); | |
$form['install_user_step[firstname]']->setValue('admin'); | |
$form['install_user_step[lastname]']->setValue('mautic'); | |
$form['install_user_step[email]']->setValue('[email protected]'); | |
$crawler = $this->client->submit($form); | |
Assert::assertTrue($this->client->getResponse()->isOk(), $this->client->getResponse()->getContent()); | |
$heading = $crawler->filter('.panel-body.text-center h5'); | |
Assert::assertCount(1, $heading, $this->client->getResponse()->getContent()); | |
$successText = $heading->text(); | |
Assert::assertStringContainsString('Mautic is installed', $successText); | |
// Assert that the fixtures were loaded | |
$fieldRepository = $this->em->getRepository(LeadField::class); | |
$emailField = $fieldRepository->findOneBy(['alias' => 'email']); | |
\assert($emailField instanceof LeadField); | |
Assert::assertSame('Email', $emailField->getLabel()); | |
} | |
public function testInstallRequirementsAndRecommendations(): void | |
{ | |
$limit = FileHelper::convertPHPSizeToBytes(CheckStep::RECOMMENDED_MEMORY_LIMIT); | |
$expectedMemoryMessage = static::getContainer()->get('translator')->trans('mautic.install.memory.limit', ['%min_memory_limit%' => CheckStep::RECOMMENDED_MEMORY_LIMIT]); | |
// set the memory limit lower than the recommended value. | |
ini_set('memory_limit', (string) ($limit - 1)); | |
$crawler = $this->client->request(Request::METHOD_GET, '/installer'); | |
Assert::assertTrue($this->client->getResponse()->isOk(), $this->client->getResponse()->getContent()); | |
$details = $crawler->filter('#minorDetails ul')->html(); | |
Assert::assertStringContainsString($expectedMemoryMessage, $details); | |
// set the memory limit higher than the recommended value. | |
ini_set('memory_limit', (string) ($limit + 1)); | |
$crawler = $this->client->request(Request::METHOD_GET, '/installer'); | |
Assert::assertTrue($this->client->getResponse()->isOk(), $this->client->getResponse()->getContent()); | |
$details = $crawler->filter('#minorDetails ul')->html(); | |
Assert::assertStringNotContainsString($expectedMemoryMessage, $details); | |
} | |
} | |