Spaces:
No application file
No application file
| namespace Mautic\CoreBundle\Test\Doctrine; | |
| use Doctrine\DBAL\Connection; | |
| use Doctrine\DBAL\Platforms\AbstractPlatform; | |
| use PHPUnit\Framework\MockObject\MockObject; | |
| use PHPUnit\Framework\MockObject\Rule\AnyInvokedCount; | |
| use PHPUnit\Framework\MockObject\Rule\InvocationOrder; | |
| trait MockedConnectionTrait | |
| { | |
| public function getMockedConnection(): mixed | |
| { | |
| $platform = $this->createMock(AbstractPlatform::class); | |
| // Following line is needed once we update to doctrine/dbal >= 3.8.0. | |
| // This allows easy mocking of the createSelectSQLBuilder method without needing to mock the whole chain. | |
| // $this->passThrough($platform, AbstractPlatform::class, 'createSelectSQLBuilder'); | |
| $connection = $this->createMock(Connection::class); | |
| $connection->method('getDatabasePlatform') | |
| ->willReturn($platform); | |
| return $connection; | |
| } | |
| private function passThrough(MockObject $object, string $class, string $method, ?InvocationOrder $invocationRule = null): void | |
| { | |
| if (!$invocationRule) { | |
| $invocationRule = new AnyInvokedCount(); | |
| } | |
| $object | |
| ->expects($invocationRule) | |
| ->method($method) | |
| ->willReturnCallback(function (...$parameters) use ($object, $class, $method) { | |
| $reflectionMethod = new \ReflectionMethod($class, $method); | |
| return $reflectionMethod->invoke($object, ...$parameters); | |
| }); | |
| } | |
| } | |