Skip to content

Commit 325ba8c

Browse files
Update existing tests and add new tests cover added classes
1 parent 31bc246 commit 325ba8c

13 files changed

+1052
-461
lines changed

tests/AbstractFunctionalTestCase.php

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Jsor\Doctrine\PostGIS;
66

7+
use Doctrine\Common\EventManager;
78
use Doctrine\DBAL\Configuration as DBALConfiguration;
89
use Doctrine\DBAL\Connection;
910
use Doctrine\DBAL\DriverManager;
@@ -13,11 +14,13 @@
1314
use Doctrine\ORM\EntityManagerInterface;
1415
use Doctrine\ORM\Mapping\Driver\AttributeDriver;
1516
use Doctrine\ORM\Tools\SchemaTool;
17+
use Doctrine\ORM\Tools\ToolEvents;
1618
use Doctrine\Persistence\Mapping\Driver\MappingDriver;
17-
use Jsor\Doctrine\PostGIS\Event\DBALSchemaEventSubscriber;
18-
use Jsor\Doctrine\PostGIS\Event\ORMSchemaEventSubscriber;
19+
use Jsor\Doctrine\PostGIS\Driver\Middleware;
20+
use Jsor\Doctrine\PostGIS\Event\ORMSchemaEventListener;
1921
use Jsor\Doctrine\PostGIS\Functions\Configurator;
20-
use Symfony\Bridge\Doctrine\SchemaListener\MessengerTransportDoctrineSchemaSubscriber;
22+
use Jsor\Doctrine\PostGIS\Schema\SchemaManagerFactory;
23+
use Symfony\Bridge\Doctrine\SchemaListener\MessengerTransportDoctrineSchemaListener;
2124
use Symfony\Component\Messenger\Bridge\Doctrine\Transport\Connection as MessengerConnection;
2225
use Symfony\Component\Messenger\Bridge\Doctrine\Transport\DoctrineTransport;
2326
use Symfony\Component\Messenger\Bridge\Doctrine\Transport\PostgreSqlConnection;
@@ -27,6 +30,8 @@ abstract class AbstractFunctionalTestCase extends AbstractTestCase
2730
{
2831
private static ?Connection $_conn = null;
2932

33+
private static ?EventManager $_eventManager = null;
34+
3035
private static ?MessengerConnection $_messengerConn = null;
3136

3237
/**
@@ -38,6 +43,13 @@ abstract class AbstractFunctionalTestCase extends AbstractTestCase
3843

3944
private ?SchemaTool $_schemaTool = null;
4045

46+
protected function setUp(): void
47+
{
48+
parent::setUp();
49+
50+
static::_registerTypes();
51+
}
52+
4153
protected function tearDown(): void
4254
{
4355
parent::tearDown();
@@ -88,15 +100,28 @@ protected function _getDbParams(): array
88100
];
89101
}
90102

103+
protected function _getEventManager(): EventManager
104+
{
105+
if (!self::$_eventManager) {
106+
self::$_eventManager = new EventManager();
107+
}
108+
109+
return self::$_eventManager;
110+
}
111+
91112
protected function _getConnection(): Connection
92113
{
93114
if (!isset(self::$_conn)) {
94115
if (class_exists(ORMConfiguration::class)) {
95-
self::$_conn = DriverManager::getConnection($this->_getDbParams(), new ORMConfiguration());
96-
Configurator::configure(self::$_conn->getConfiguration());
116+
$config = new ORMConfiguration();
117+
Configurator::configure($config);
97118
} else {
98-
self::$_conn = DriverManager::getConnection($this->_getDbParams(), new DBALConfiguration());
119+
$config = new DBALConfiguration();
99120
}
121+
$config->setMiddlewares([new Middleware()]);
122+
$config->setSchemaManagerFactory(new SchemaManagerFactory());
123+
124+
self::$_conn = DriverManager::getConnection($this->_getDbParams(), $config, $this->_getEventManager());
100125

101126
self::$_messengerConn = new PostgreSqlConnection(
102127
[
@@ -106,8 +131,9 @@ protected function _getConnection(): Connection
106131
self::$_conn,
107132
);
108133

109-
self::$_conn->getEventManager()->addEventSubscriber(
110-
new MessengerTransportDoctrineSchemaSubscriber(
134+
$this->_getEventManager()->addEventListener(
135+
ToolEvents::postGenerateSchema,
136+
new MessengerTransportDoctrineSchemaListener(
111137
[
112138
new DoctrineTransport(
113139
self::$_messengerConn,
@@ -118,9 +144,7 @@ protected function _getConnection(): Connection
118144
);
119145

120146
if (class_exists(ORMConfiguration::class)) {
121-
self::$_conn->getEventManager()->addEventSubscriber(new ORMSchemaEventSubscriber());
122-
} else {
123-
self::$_conn->getEventManager()->addEventSubscriber(new DBALSchemaEventSubscriber());
147+
$this->_getEventManager()->addEventListener('postGenerateSchemaTable', new ORMSchemaEventListener());
124148
}
125149

126150
if (!Type::hasType('tsvector')) {
@@ -145,7 +169,7 @@ protected function _getMessengerConnection(): MessengerConnection
145169
return self::$_messengerConn;
146170
}
147171

148-
protected function _getEntityManager(?ORMConfiguration $config = null): EntityManager
172+
protected function _getEntityManager(?ORMConfiguration $config = null): EntityManagerInterface
149173
{
150174
if (null !== $this->_em) {
151175
return $this->_em;
@@ -159,7 +183,7 @@ protected function _getEntityManager(?ORMConfiguration $config = null): EntityMa
159183

160184
$this->_setupConfiguration($config);
161185

162-
$em = EntityManager::create($connection, $config);
186+
$em = new EntityManager($connection, $config, $this->_getEventManager());
163187

164188
return $this->_em = $em;
165189
}

tests/AbstractTestCase.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
abstract class AbstractTestCase extends TestCase
1414
{
15-
protected function _registerTypes(): void
15+
protected static function _registerTypes(): void
1616
{
1717
if (!Type::hasType('geometry')) {
1818
Type::addType('geometry', GeometryType::class);

tests/Driver/DriverTest.php

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Jsor\Doctrine\PostGIS\Driver;
6+
7+
use Doctrine\DBAL\Driver\API\ExceptionConverter;
8+
use Doctrine\DBAL\Driver\PDO\PgSQL\Driver as PgSQLDriver;
9+
use Doctrine\DBAL\Types\Type;
10+
use Jsor\Doctrine\PostGIS\Types\PostGISType;
11+
use PHPUnit\Framework\TestCase;
12+
13+
/**
14+
* @covers \Jsor\Doctrine\PostGIS\Driver\Driver
15+
*
16+
* @runTestsInSeparateProcesses
17+
*
18+
* @internal
19+
*/
20+
final class DriverTest extends TestCase
21+
{
22+
public function testConnect(): void
23+
{
24+
static::assertFalse(Type::hasType(PostGISType::GEOGRAPHY));
25+
static::assertFalse(Type::hasType(PostGISType::GEOMETRY));
26+
27+
$driver = $this->getDriver();
28+
$driver->connect([
29+
'driver' => getenv('DB_TYPE'),
30+
'user' => getenv('DB_USER'),
31+
'password' => getenv('DB_PASSWORD'),
32+
'host' => getenv('DB_HOST'),
33+
'dbname' => getenv('DB_NAME'),
34+
'port' => getenv('DB_PORT'),
35+
]);
36+
37+
static::assertTrue(Type::hasType(PostGISType::GEOGRAPHY));
38+
static::assertTrue(Type::hasType(PostGISType::GEOMETRY));
39+
}
40+
41+
public function testGetDatabasePlatform(): void
42+
{
43+
$driver = $this->getDriver();
44+
45+
static::assertInstanceOf(PostGISPlatform::class, $driver->getDatabasePlatform());
46+
}
47+
48+
public function providerVersions(): iterable
49+
{
50+
yield [11];
51+
yield [12];
52+
yield [13];
53+
yield [14];
54+
yield [15];
55+
}
56+
57+
/** @dataProvider providerVersions */
58+
public function testCreateDatabasePlatformForVersion(int $version): void
59+
{
60+
$driver = $this->getDriver();
61+
62+
static::assertInstanceOf(PostGISPlatform::class, $driver->createDatabasePlatformForVersion($version));
63+
}
64+
65+
public function testGetExceptionConverter(): void
66+
{
67+
$driver = $this->getDriver();
68+
69+
static::assertInstanceOf(ExceptionConverter::class, $driver->getExceptionConverter());
70+
}
71+
72+
private function getDriver(): Driver
73+
{
74+
return new Driver(new PgSQLDriver());
75+
}
76+
}

tests/Driver/MiddlewareTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Jsor\Doctrine\PostGIS\Driver;
6+
7+
use Doctrine\DBAL\Driver\PgSQL\Driver as PgSQLDriver;
8+
use PHPUnit\Framework\TestCase;
9+
10+
/**
11+
* @covers \Jsor\Doctrine\PostGIS\Driver\Middleware
12+
*
13+
* @internal
14+
*/
15+
final class MiddlewareTest extends TestCase
16+
{
17+
public function testWrap(): void
18+
{
19+
$middleware = new Middleware();
20+
21+
static::assertInstanceOf(Driver::class, $middleware->wrap(new PgSQLDriver()));
22+
}
23+
}

0 commit comments

Comments
 (0)