Spaces:
No application file
No application file
File size: 2,822 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 |
<?php
declare(strict_types=1);
namespace Mautic\EmailBundle\Tests\Model;
use Doctrine\ORM\EntityManager;
use Mautic\EmailBundle\EmailEvents;
use Mautic\EmailBundle\Entity\Stat;
use Mautic\EmailBundle\Entity\StatRepository;
use Mautic\EmailBundle\Model\EmailStatModel;
use PHPUnit\Framework\Assert;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
use Symfony\Component\EventDispatcher\EventDispatcher;
final class EmailStatModelTest extends TestCase
{
public function testSave(): void
{
/** @var MockObject&EntityManager */
$entityManager = $this->createMock(EntityManager::class);
/** @var MockObject&StatRepository */
$statRepository = $this->createMock(StatRepository::class);
$entityManager->method('getRepository')->willReturn($statRepository);
$statRepository->expects($this->once())
->method('saveEntities')
->willReturnCallback(
function (array $entities) {
Assert::assertCount(1, $entities);
Assert::assertInstanceOf(StatTest::class, $entities[0]);
// Emulate database adding the entity some autoincrement ID.
$entities[0]->setId('123');
}
);
$dispatcher = new class() extends EventDispatcher {
public int $dispatchMethodCounter = 0;
public function __construct()
{
}
public function dispatch(object $event, string $eventName = null): object
{
switch ($this->dispatchMethodCounter) {
case 0:
Assert::assertSame(EmailEvents::ON_EMAIL_STAT_PRE_SAVE, $eventName);
Assert::assertCount(1, $event->getStats());
Assert::assertSame(0, $event->getStats()[0]->getId());
break;
case 1:
Assert::assertSame(EmailEvents::ON_EMAIL_STAT_POST_SAVE, $eventName);
Assert::assertCount(1, $event->getStats());
Assert::assertSame(123, $event->getStats()[0]->getId());
break;
}
++$this->dispatchMethodCounter;
return $event;
}
};
$emailStatModel = new EmailStatModel($entityManager, $dispatcher);
$emailStat = new StatTest();
$emailStatModel->saveEntity($emailStat);
Assert::assertSame(2, $dispatcher->dispatchMethodCounter);
}
}
class StatTest extends Stat
{
private ?string $id = null;
public function setId(string $id): void
{
$this->id = $id;
}
public function getId(): int
{
return (int) $this->id;
}
}
|