Spaces:
No application file
No application file
File size: 1,474 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<?php
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);
});
}
}
|