Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\FormBundle\Tests\Collector; | |
| use Mautic\CacheBundle\Cache\CacheProviderInterface; | |
| use Mautic\FormBundle\Collector\AlreadyMappedFieldCollector; | |
| use PHPUnit\Framework\MockObject\MockObject; | |
| use Symfony\Component\Cache\CacheItem; | |
| final class AlreadyMappedFieldCollectorTest extends \PHPUnit\Framework\TestCase | |
| { | |
| /** | |
| * @var MockObject&CacheProviderInterface | |
| */ | |
| private MockObject $cacheProvider; | |
| private AlreadyMappedFieldCollector $collector; | |
| protected function setup(): void | |
| { | |
| parent::setUp(); | |
| $this->cacheProvider = $this->createMock(CacheProviderInterface::class); | |
| $this->collector = new AlreadyMappedFieldCollector($this->cacheProvider); | |
| } | |
| public function testWorkflow(): void | |
| { | |
| $createCacheItem = \Closure::bind( | |
| function () { | |
| $item = new CacheItem(); | |
| $item->isHit = false; | |
| $item->isTaggable = true; | |
| return $item; | |
| }, | |
| $this, | |
| CacheItem::class | |
| ); | |
| $cacheItem = $createCacheItem(); | |
| $formId = '3'; | |
| $object = 'contact'; | |
| $this->cacheProvider->method('getItem') | |
| ->with('mautic.form.3.object.contact.fields.mapped') | |
| ->willReturn($cacheItem); | |
| $this->cacheProvider->expects($this->exactly(4)) | |
| ->method('save') | |
| ->with($cacheItem); | |
| // Ensure we get an empty array at the beginning. | |
| $this->assertNull($cacheItem->get()); | |
| $this->assertSame([], $this->collector->getFields($formId, $object)); | |
| // Add a mapped field. | |
| $this->collector->addField('3', 'contact', '44'); | |
| $this->assertSame(['44'], $this->collector->getFields($formId, $object)); | |
| // The field with key 44 should be added to the cache item. | |
| $this->assertSame('["44"]', $cacheItem->get()); | |
| // Add another mapped field. | |
| $this->collector->addField('3', 'contact', '55'); | |
| // The field with key 55 should be added to the cache item. | |
| $this->assertSame('["44","55"]', $cacheItem->get()); | |
| $this->assertSame(['44', '55'], $this->collector->getFields($formId, $object)); | |
| // Remove an exsting field. | |
| $this->collector->removeField('3', 'contact', '44'); | |
| // The field with key 44 should be removed from the cache item. | |
| $this->assertSame('["55"]', $cacheItem->get()); | |
| $this->assertSame(['55'], $this->collector->getFields($formId, $object)); | |
| // Remove a not exsting field. | |
| $this->collector->removeField('3', 'contact', '44'); | |
| // Still the same result after removing a field that did not exist. | |
| $this->assertSame('["55"]', $cacheItem->get()); | |
| $this->assertSame(['55'], $this->collector->getFields($formId, $object)); | |
| $this->cacheProvider->expects($this->once()) | |
| ->method('invalidateTags') | |
| ->with(['mautic.form.3.fields.mapped']); | |
| $this->collector->removeAllForForm($formId); | |
| } | |
| } | |