Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\IntegrationsBundle\Tests\Unit\Entity; | |
| use Doctrine\Common\Collections\ArrayCollection; | |
| use Doctrine\ORM\AbstractQuery; | |
| use Doctrine\ORM\QueryBuilder; | |
| use Mautic\CoreBundle\Test\Doctrine\RepositoryConfiguratorTrait; | |
| use Mautic\IntegrationsBundle\Entity\ObjectMapping; | |
| use Mautic\IntegrationsBundle\Entity\ObjectMappingRepository; | |
| use PHPUnit\Framework\MockObject\MockObject; | |
| use PHPUnit\Framework\TestCase; | |
| final class ObjectMappingRepositoryTest extends TestCase | |
| { | |
| use RepositoryConfiguratorTrait; | |
| /** | |
| * @var MockObject&AbstractQuery<mixed> | |
| */ | |
| private MockObject $query; | |
| private ObjectMappingRepository $repository; | |
| protected function setUp(): void | |
| { | |
| parent::setUp(); | |
| $this->repository = $this->configureRepository(ObjectMapping::class); | |
| $this->entityManager->method('createQueryBuilder')->willReturnCallback(fn () => new QueryBuilder($this->entityManager)); | |
| // This is terrible, but the Query class is final and AbstractQuery doesn't have some methods used. | |
| $this->query = $this->getMockBuilder(AbstractQuery::class) | |
| ->disableOriginalConstructor() | |
| ->onlyMethods(['setParameters', 'getSingleResult', 'getSQL', '_doExecute']) | |
| ->addMethods(['setFirstResult', 'setMaxResults']) | |
| ->getMock(); | |
| $this->query->expects($this->once()) | |
| ->method('setFirstResult') | |
| ->willReturnSelf(); | |
| $this->query->expects($this->once()) | |
| ->method('setMaxResults') | |
| ->willReturnSelf(); | |
| } | |
| public function testDeleteEntitiesForObject(): void | |
| { | |
| $this->entityManager->expects($this->once()) | |
| ->method('createQuery') | |
| ->with('DELETE Mautic\IntegrationsBundle\Entity\ObjectMapping m WHERE m.internalObjectName = :internalObject AND m.internalObjectId = :internalObjectId') | |
| ->willReturn($this->query); | |
| $this->query->expects($this->once()) | |
| ->method('setParameters') | |
| ->with($this->callback(function (ArrayCollection $collection) { | |
| /** @var Parameter $parameter */ | |
| $parameter = $collection[0]; | |
| $this->assertSame('internalObject', $parameter->getName()); | |
| $this->assertSame('company', $parameter->getValue()); | |
| /** @var Parameter $parameter */ | |
| $parameter = $collection[1]; | |
| $this->assertSame('internalObjectId', $parameter->getName()); | |
| $this->assertSame(123, $parameter->getValue()); | |
| return true; | |
| })) | |
| ->willReturnSelf(); | |
| // // Stopping early to avoid Mocking hell. We have what we needed. | |
| $this->query->expects($this->once()) | |
| ->method('_doExecute') | |
| ->willReturn(0); | |
| $this->repository->deleteEntitiesForObject(123, 'company'); | |
| } | |
| } | |