diff --git a/config/config_test.yml b/config/config_test.yml index 17063377..cf8d59bd 100644 --- a/config/config_test.yml +++ b/config/config_test.yml @@ -11,10 +11,11 @@ framework: doctrine: dbal: - driver: 'pdo_sqlite' - memory: true + driver: 'pdo_mysql' + host: '%database_host%' + port: '%database_port%' + dbname: 'phplist' + user: '%database_user%' + password: '%database_password%' charset: UTF8 -# orm: -# entity_managers: -# default: -# report_fields_where_declared: true + diff --git a/src/Domain/Analytics/Model/LinkTrackForward.php b/src/Domain/Analytics/Model/LinkTrackForward.php index 0dcf7d55..17049dfc 100644 --- a/src/Domain/Analytics/Model/LinkTrackForward.php +++ b/src/Domain/Analytics/Model/LinkTrackForward.php @@ -21,7 +21,9 @@ class LinkTrackForward implements DomainModel, Identity #[ORM\GeneratedValue] private ?int $id = null; - #[ORM\Column(type: 'string', length: 2083, nullable: true)] + // Defined as string(255) due to MySQL limitation (actual max URL length is 2083): + // TEXT can't be indexed without a prefix, which Doctrine doesn't support. + #[ORM\Column(type: 'string', length: 255, nullable: true)] private ?string $url = null; #[ORM\Column(name: 'urlhash', type: 'string', length: 32, nullable: true)] diff --git a/src/Domain/Configuration/Model/I18n.php b/src/Domain/Configuration/Model/I18n.php index 131114de..bffed897 100644 --- a/src/Domain/Configuration/Model/I18n.php +++ b/src/Domain/Configuration/Model/I18n.php @@ -18,8 +18,10 @@ class I18n implements DomainModel #[ORM\Column(type: 'string', length: 10)] private string $lan; + // Defined as string with length due to MySQL limitation: + // TEXT columns can't be indexed without a prefix length, which Doctrine doesn't support. #[ORM\Id] - #[ORM\Column(type: 'text')] + #[ORM\Column(type: 'string', length: 255)] private string $original; #[ORM\Column(type: 'text')] diff --git a/src/Domain/Configuration/Model/UrlCache.php b/src/Domain/Configuration/Model/UrlCache.php index 244faede..5d460104 100644 --- a/src/Domain/Configuration/Model/UrlCache.php +++ b/src/Domain/Configuration/Model/UrlCache.php @@ -20,7 +20,9 @@ class UrlCache implements DomainModel, Identity #[ORM\GeneratedValue] private ?int $id = null; - #[ORM\Column(name: 'url', type: 'string', length: 2083)] + // Defined as string(255) due to MySQL limitation (actual max URL length is 2083): + // TEXT can't be indexed without a prefix, which Doctrine doesn't support. + #[ORM\Column(name: 'url', type: 'string', length: 255)] private string $url; #[ORM\Column(name: 'lastmodified', type: 'integer', nullable: true)] diff --git a/src/TestingSupport/Traits/DatabaseTestTrait.php b/src/TestingSupport/Traits/DatabaseTestTrait.php index 8ed4258a..c94111e4 100644 --- a/src/TestingSupport/Traits/DatabaseTestTrait.php +++ b/src/TestingSupport/Traits/DatabaseTestTrait.php @@ -83,18 +83,17 @@ protected function loadSchema(): void $schemaTool = new SchemaTool($this->entityManager); $metadata = $this->entityManager->getMetadataFactory()->getAllMetadata(); - $connection = $this->entityManager->getConnection(); - $schemaManager = $connection->createSchemaManager(); + try { + $schemaTool->createSchema($metadata); + } catch (ToolsException $e) { + $connection = $this->entityManager->getConnection(); + $schemaManager = $connection->createSchemaManager(); - foreach ($metadata as $classMetadata) { - $tableName = $classMetadata->getTableName(); + foreach ($metadata as $classMetadata) { + $tableName = $classMetadata->getTableName(); - if (!$schemaManager->tablesExist([$tableName])) { - try { + if (!$schemaManager->tablesExist([$tableName])) { $schemaTool->createSchema([$classMetadata]); - } catch (ToolsException $e) { - // nothing to do - echo $e->getMessage(); } } } diff --git a/tests/Integration/Domain/Identity/Repository/AdministratorRepositoryTest.php b/tests/Integration/Domain/Identity/Repository/AdministratorRepositoryTest.php index 2732f736..25ecf0f8 100644 --- a/tests/Integration/Domain/Identity/Repository/AdministratorRepositoryTest.php +++ b/tests/Integration/Domain/Identity/Repository/AdministratorRepositoryTest.php @@ -43,7 +43,7 @@ protected function tearDown(): void public function testFindReadsModelFromDatabase(): void { /** @var Administrator $actual */ - $actual = $this->repository->find(1); + $actual = $this->repository->findOneBy(['email' => 'john@example.com']); $this->assertNotNull($actual); $this->assertFalse($actual->isDisabled());