Spaces:
No application file
No application file
| 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; | |
| }; | |
| } | |
| } | |