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])); } }