File size: 4,683 Bytes
d2897cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php

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);
    }
}