From 52e0d4ffe9532a7208705b41ebcd797faa2575a2 Mon Sep 17 00:00:00 2001 From: Tatevik Date: Sat, 31 May 2025 06:28:19 +0400 Subject: [PATCH 1/2] change test db --- config/config_test.yml | 9 +++++-- .../Traits/DatabaseTestTrait.php | 27 ++++++++++++------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/config/config_test.yml b/config/config_test.yml index 17063377..b24c68f7 100644 --- a/config/config_test.yml +++ b/config/config_test.yml @@ -11,8 +11,13 @@ framework: doctrine: dbal: - driver: 'pdo_sqlite' - memory: true + driver: 'pdo_mysql' + host: '%database_host%' + path: '%database_path%' + port: '%database_port%' + dbname: 'phplist' + user: '%database_user%' + password: '%database_password%' charset: UTF8 # orm: # entity_managers: diff --git a/src/TestingSupport/Traits/DatabaseTestTrait.php b/src/TestingSupport/Traits/DatabaseTestTrait.php index 8ed4258a..7522b0a7 100644 --- a/src/TestingSupport/Traits/DatabaseTestTrait.php +++ b/src/TestingSupport/Traits/DatabaseTestTrait.php @@ -83,18 +83,25 @@ protected function loadSchema(): void $schemaTool = new SchemaTool($this->entityManager); $metadata = $this->entityManager->getMetadataFactory()->getAllMetadata(); - $connection = $this->entityManager->getConnection(); - $schemaManager = $connection->createSchemaManager(); + // Create all tables at once to handle dependencies properly + try { + $schemaTool->createSchema($metadata); + } catch (ToolsException $e) { + // If creating all tables at once fails, try to create them one by one + // This is a fallback mechanism + $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 { - $schemaTool->createSchema([$classMetadata]); - } catch (ToolsException $e) { - // nothing to do - echo $e->getMessage(); + if (!$schemaManager->tablesExist([$tableName])) { + try { + $schemaTool->createSchema([$classMetadata]); + } catch (ToolsException $e) { + // Log the error but continue with other tables + echo $e->getMessage() . PHP_EOL; + } } } } From 8fc793a49b2ebdb94b7343c80c3eede75f972a9a Mon Sep 17 00:00:00 2001 From: Tatevik Date: Sat, 31 May 2025 07:48:14 +0400 Subject: [PATCH 2/2] update column lengths --- config/config_test.yml | 6 +----- src/Domain/Analytics/Model/LinkTrackForward.php | 4 +++- src/Domain/Configuration/Model/I18n.php | 4 +++- src/Domain/Configuration/Model/UrlCache.php | 4 +++- src/TestingSupport/Traits/DatabaseTestTrait.php | 10 +--------- .../Repository/AdministratorRepositoryTest.php | 2 +- 6 files changed, 12 insertions(+), 18 deletions(-) diff --git a/config/config_test.yml b/config/config_test.yml index b24c68f7..cf8d59bd 100644 --- a/config/config_test.yml +++ b/config/config_test.yml @@ -13,13 +13,9 @@ doctrine: dbal: driver: 'pdo_mysql' host: '%database_host%' - path: '%database_path%' 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 7522b0a7..c94111e4 100644 --- a/src/TestingSupport/Traits/DatabaseTestTrait.php +++ b/src/TestingSupport/Traits/DatabaseTestTrait.php @@ -83,12 +83,9 @@ protected function loadSchema(): void $schemaTool = new SchemaTool($this->entityManager); $metadata = $this->entityManager->getMetadataFactory()->getAllMetadata(); - // Create all tables at once to handle dependencies properly try { $schemaTool->createSchema($metadata); } catch (ToolsException $e) { - // If creating all tables at once fails, try to create them one by one - // This is a fallback mechanism $connection = $this->entityManager->getConnection(); $schemaManager = $connection->createSchemaManager(); @@ -96,12 +93,7 @@ protected function loadSchema(): void $tableName = $classMetadata->getTableName(); if (!$schemaManager->tablesExist([$tableName])) { - try { - $schemaTool->createSchema([$classMetadata]); - } catch (ToolsException $e) { - // Log the error but continue with other tables - echo $e->getMessage() . PHP_EOL; - } + $schemaTool->createSchema([$classMetadata]); } } } 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());