Spaces:
No application file
No application file
File size: 4,411 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 121 122 123 |
<?php
declare(strict_types=1);
namespace Mautic\LeadBundle\Tests\Command;
use Mautic\CoreBundle\Test\MauticMysqlTestCase;
use Mautic\LeadBundle\Command\UpdateLeadListsCommand;
use Mautic\LeadBundle\Entity\Lead;
use Mautic\LeadBundle\Entity\LeadList;
use Mautic\LeadBundle\Entity\LeadListRepository;
use PHPUnit\Framework\Assert;
final class UpdateLeadListCommandFunctionalTest extends MauticMysqlTestCase
{
public function testFailWhenSegmentDoesNotExist(): void
{
$output = $this->testSymfonyCommand(UpdateLeadListsCommand::NAME, ['--list-id' => 999999]);
Assert::assertSame(1, $output->getStatusCode());
Assert::assertStringContainsString('Segment #999999 does not exist', $output->getDisplay());
}
/**
* @dataProvider provider
*/
public function testCommandRebuildingAllSegments(callable $getCommandParams, callable $assert): void
{
$contact = new Lead();
$contact->setEmail('[email protected]');
$segment = new LeadList();
$segment->setName('Test segment');
$segment->setPublicName('Test segment');
$segment->setAlias('test-segment');
$segment->setFilters([
[
'glue' => 'and',
'field' => 'email',
'object' => 'lead',
'type' => 'email',
'filter' => '[email protected]',
'display' => null,
'operator' => 'eq',
],
]);
$longTimeAgo = new \DateTime('2000-01-01 00:00:00');
// The last built date is set on pre persist to 2000-01-01 00:00:00.
// Setting it 1 year ago so we could assert that it is updated after the command runs.
$segment->setLastBuiltDate($longTimeAgo);
$this->em->persist($contact);
$this->em->persist($segment);
$this->em->flush();
$this->em->clear();
Assert::assertEquals($longTimeAgo, $segment->getLastBuiltDate());
$output = $this->testSymfonyCommand(UpdateLeadListsCommand::NAME, $getCommandParams($segment));
/** @var LeadList $segment */
$segment = $this->em->find(LeadList::class, $segment->getId());
$assert($segment, $output->getDisplay());
/** @var LeadListRepository $leadListRepository */
$leadListRepository = $this->em->getRepository(LeadList::class);
Assert::assertSame(
'1',
$leadListRepository->getLeadCount([$segment->getId()])
);
}
/**
* @return iterable<array<callable>>
*/
public static function Provider(): iterable
{
// Test that all segments will be rebuilt with no params set.
yield [
fn (): array => [],
function (LeadList $segment): void {
Assert::assertGreaterThan(
new \DateTime('2000-01-01 00:00:00'),
$segment->getLastBuiltDate()
);
Assert::assertNotNull($segment->getLastBuiltTime());
},
];
// Test that it will work when we select a specific segment too.
// Also testing the timing option = 0.
yield [
fn (LeadList $segment): array => ['--list-id' => $segment->getId()],
function (LeadList $segment, string $output): void {
Assert::assertGreaterThan(
new \DateTime('2000-01-01 00:00:00'),
$segment->getLastBuiltDate()
);
Assert::assertNotNull($segment->getLastBuiltTime());
Assert::assertStringNotContainsString('Total time:', $output);
},
];
// But the last built date will not update if we limit how many contacts to process.
// Also testing the timing option = 1.
yield [
fn (): array => ['--max-contacts' => 1, '--timing' => 1],
function (LeadList $segment, string $output): void {
Assert::assertEquals(
new \DateTime('2000-01-01 00:00:00'),
$segment->getLastBuiltDate()
);
Assert::assertNull($segment->getLastBuiltTime());
Assert::assertStringContainsString('Total time:', $output);
Assert::assertStringContainsString('seconds', $output);
},
];
}
}
|