Spaces:
No application file
No application file
namespace Mautic\LeadBundle\Tests\Functional\Command; | |
use Doctrine\DBAL\Schema\Column; | |
use Mautic\CoreBundle\Test\MauticMysqlTestCase; | |
use Mautic\LeadBundle\Entity\Lead; | |
use Mautic\LeadBundle\Entity\LeadField; | |
use Mautic\LeadBundle\Field\Command\CreateCustomFieldCommand; | |
use Mautic\LeadBundle\Field\Notification\CustomFieldNotification; | |
use Symfony\Bundle\FrameworkBundle\Console\Application; | |
use Symfony\Component\Console\Tester\CommandTester; | |
use Symfony\Component\HttpKernel\KernelInterface; | |
class CreateCustomFieldCommandTest extends MauticMysqlTestCase | |
{ | |
public function setUp(): void | |
{ | |
parent::setUp(); | |
$this->useCleanupRollback = false; | |
} | |
public function testWithIdAndUserArgs(): void | |
{ | |
$leadField = new LeadField(); | |
$leadField->setLabel('Custom Field 1'); | |
$leadField->setAlias('custom_field_1'); | |
$leadField->setObject('lead'); | |
$leadField->setColumnIsNotCreated(); | |
$leadField->setDateAdded(new \DateTime()); | |
$leadField->setCreatedBy(1); | |
$this->em->persist($leadField); | |
$this->em->flush(); | |
$kernel = static::getContainer()->get('kernel'); | |
\assert($kernel instanceof KernelInterface); | |
$expectedUserId = 1; | |
$customFieldNotification = self::createMock(CustomFieldNotification::class); | |
$customFieldNotification | |
->expects(self::once()) | |
->method('customFieldWasCreated') | |
->with(self::isInstanceOf(LeadField::class), self::equalTo($expectedUserId)); | |
$kernel->getContainer()->set('mautic.lead.field.notification.custom_field', $customFieldNotification); | |
$application = new Application($kernel); | |
$application->setAutoExit(false); | |
$command = $application->find(CreateCustomFieldCommand::COMMAND_NAME); | |
$commandTester = new CommandTester($command); | |
$commandTester->execute([ | |
'--user' => 1, | |
'--id' => $leadField->getId(), | |
]); | |
self::assertEquals(0, $commandTester->getStatusCode(), $commandTester->getDisplay()); | |
$leadTableName = $this->em->getClassMetadata(Lead::class)->getTableName(); | |
$columnsSchema = $this->em->getConnection()->createSchemaManager()->listTableColumns($leadTableName); | |
$columnNames = array_map( | |
static fn (Column $column) => $column->getName(), | |
$columnsSchema | |
); | |
self::assertContains('custom_field_1', $columnNames); | |
} | |
public function testWithNoArgs(): void | |
{ | |
$leadField1 = new LeadField(); | |
$leadField1->setLabel('Custom Field 1'); | |
$leadField1->setAlias('custom_field_1'); | |
$leadField1->setObject('lead'); | |
$leadField1->setColumnIsNotCreated(); | |
$leadField1->setDateAdded(new \DateTime()); | |
$leadField1->setCreatedBy(1); | |
$leadField2 = new LeadField(); | |
$leadField2->setLabel('Custom Field 2'); | |
$leadField2->setAlias('custom_field_2'); | |
$leadField2->setObject('lead'); | |
$leadField2->setColumnIsNotCreated(); | |
$leadField2->setDateAdded(new \DateTime()); | |
$leadField2->setCreatedBy(1); | |
$this->em->persist($leadField1); | |
$this->em->persist($leadField2); | |
$this->em->flush(); | |
$kernel = static::getContainer()->get('kernel'); | |
\assert($kernel instanceof KernelInterface); | |
$expectedUserId = 1; | |
$customFieldNotification = self::createMock(CustomFieldNotification::class); | |
$customFieldNotification | |
->expects(self::exactly(2)) | |
->method('customFieldWasCreated') | |
->with(self::isInstanceOf(LeadField::class), self::equalTo($expectedUserId)); | |
$kernel->getContainer()->set('mautic.lead.field.notification.custom_field', $customFieldNotification); | |
$application = new Application($kernel); | |
$application->setAutoExit(false); | |
$command = $application->find(CreateCustomFieldCommand::COMMAND_NAME); | |
$commandTester = new CommandTester($command); | |
$commandTester->execute([]); | |
self::assertEquals(0, $commandTester->getStatusCode(), $commandTester->getDisplay()); | |
$leadTableName = $this->em->getClassMetadata(Lead::class)->getTableName(); | |
$columnsSchema = $this->em->getConnection()->createSchemaManager()->listTableColumns($leadTableName); | |
$columnNames = array_map( | |
static fn (Column $column) => $column->getName(), | |
$columnsSchema | |
); | |
self::assertContains('custom_field_1', $columnNames); | |
self::assertContains('custom_field_2', $columnNames); | |
} | |
} | |