Spaces:
No application file
No application file
mautic
/
app
/bundles
/IntegrationsBundle
/Tests
/Unit
/Sync
/Notification
/Helper
/OwnerProviderTest.php
declare(strict_types=1); | |
namespace Mautic\IntegrationsBundle\Tests\Unit\Sync\Notification\Helper; | |
use Mautic\IntegrationsBundle\Event\InternalObjectOwnerEvent; | |
use Mautic\IntegrationsBundle\IntegrationEvents; | |
use Mautic\IntegrationsBundle\Sync\Exception\ObjectNotFoundException; | |
use Mautic\IntegrationsBundle\Sync\Exception\ObjectNotSupportedException; | |
use Mautic\IntegrationsBundle\Sync\Notification\Helper\OwnerProvider; | |
use Mautic\IntegrationsBundle\Sync\SyncDataExchange\Internal\Object\Contact; | |
use Mautic\IntegrationsBundle\Sync\SyncDataExchange\Internal\ObjectProvider; | |
use PHPUnit\Framework\TestCase; | |
use Symfony\Component\EventDispatcher\EventDispatcherInterface; | |
class OwnerProviderTest extends TestCase | |
{ | |
/** | |
* @var ObjectProvider|\PHPUnit\Framework\MockObject\MockObject | |
*/ | |
private \PHPUnit\Framework\MockObject\MockObject $objectProvider; | |
/** | |
* @var EventDispatcherInterface|\PHPUnit\Framework\MockObject\MockObject | |
*/ | |
private \PHPUnit\Framework\MockObject\MockObject $dispatcher; | |
private OwnerProvider $ownerProvider; | |
protected function setUp(): void | |
{ | |
$this->objectProvider = $this->createMock(ObjectProvider::class); | |
$this->dispatcher = $this->createMock(EventDispatcherInterface::class); | |
$this->ownerProvider = new OwnerProvider($this->dispatcher, $this->objectProvider); | |
} | |
public function testGetOwnersForObjectIdsWithoutIds(): void | |
{ | |
$this->objectProvider->expects($this->never()) | |
->method('getObjectByName'); | |
$this->assertSame([], $this->ownerProvider->getOwnersForObjectIds(Contact::NAME, [])); | |
} | |
public function testGetOwnersForObjectIdsWithUnknownObject(): void | |
{ | |
$this->objectProvider->expects($this->once()) | |
->method('getObjectByName') | |
->with('Unicorn') | |
->willThrowException(new ObjectNotFoundException('Unicorn')); | |
$this->expectException(ObjectNotSupportedException::class); | |
$this->ownerProvider->getOwnersForObjectIds('Unicorn', [123]); | |
} | |
public function testGetOwnersForObjectIdsWithKnownObject(): void | |
{ | |
$internalObject = new Contact(); | |
$this->objectProvider->expects($this->once()) | |
->method('getObjectByName') | |
->with(Contact::NAME) | |
->willReturn($internalObject); | |
$this->dispatcher->expects($this->once()) | |
->method('dispatch') | |
->with( | |
$this->callback(function (InternalObjectOwnerEvent $event) use ($internalObject) { | |
$this->assertSame($internalObject, $event->getObject()); | |
$this->assertSame([123], $event->getObjectIds()); | |
// Simulate a subscriber. Format: [object_id => owner_id]. | |
$event->setOwners([$event->getObjectIds()[0] => 456]); | |
return true; | |
}), | |
IntegrationEvents::INTEGRATION_FIND_OWNER_IDS | |
); | |
$this->assertSame([123 => 456], $this->ownerProvider->getOwnersForObjectIds(Contact::NAME, [123])); | |
} | |
} | |