Spaces:
No application file
No application file
File size: 3,092 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\LeadBundle\Tests\Provider;
use Mautic\LeadBundle\Event\ListFieldChoicesEvent;
use Mautic\LeadBundle\Exception\ChoicesNotFoundException;
use Mautic\LeadBundle\LeadEvents;
use Mautic\LeadBundle\Provider\FieldChoicesProvider;
use PHPUnit\Framework\MockObject\MockObject;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
final class FieldChoicesProviderTest extends \PHPUnit\Framework\TestCase
{
/**
* @var MockObject|EventDispatcherInterface
*/
private MockObject $dispatcher;
private FieldChoicesProvider $provider;
protected function setUp(): void
{
parent::setUp();
$this->dispatcher = $this->createMock(EventDispatcherInterface::class);
$this->provider = new FieldChoicesProvider($this->dispatcher);
}
public function testGetChoicesForFieldThatDoesNotHaveAnyChoices(): void
{
$this->dispatcher->expects($this->once())
->method('dispatch')
->with(
$this->callback($this->setSomeChoicesLikeASubscriber()),
LeadEvents::COLLECT_FILTER_CHOICES_FOR_LIST_FIELD_TYPE
);
$this->expectException(ChoicesNotFoundException::class);
$this->provider->getChoicesForField('text', 'email');
}
public function testGetChoicesForFieldThatHasTypeChoices(): void
{
$this->dispatcher->expects($this->once())
->method('dispatch')
->with(
$this->callback($this->setSomeChoicesLikeASubscriber()),
LeadEvents::COLLECT_FILTER_CHOICES_FOR_LIST_FIELD_TYPE
);
// Calling it twice to ensure the cache is working and the event is triggered only once.
$this->provider->getChoicesForField('country', 'country_field_a');
$choices = $this->provider->getChoicesForField('country', 'country_field_a');
$this->assertSame(['Czech Republic' => 'Czech Republic'], $choices);
}
public function testGetChoicesForFieldThatHasAliasChoices(): void
{
$this->dispatcher->expects($this->once())
->method('dispatch')
->with(
$this->callback($this->setSomeChoicesLikeASubscriber()),
LeadEvents::COLLECT_FILTER_CHOICES_FOR_LIST_FIELD_TYPE
);
// Calling it twice to ensure the cache is working and the event is triggered only once.
$this->provider->getChoicesForField('select', 'select_a');
$choices = $this->provider->getChoicesForField('select', 'select_a');
$this->assertSame(['Choice A' => 'choice_a'], $choices);
}
private function setSomeChoicesLikeASubscriber(): callable
{
return function (ListFieldChoicesEvent $event) {
$event->setChoicesForFieldAlias(
'select_a',
['Choice A' => 'choice_a']
);
$event->setChoicesForFieldType(
'country',
['Czech Republic' => 'Czech Republic']
);
return true;
};
}
}
|