|
12 | 12 | use Doctrine\DBAL\Schema\Name\UnqualifiedName; |
13 | 13 | use Doctrine\DBAL\Schema\PrimaryKeyConstraint; |
14 | 14 | use Doctrine\DBAL\Schema\PrimaryKeyConstraintEditor; |
| 15 | +use Doctrine\DBAL\Schema\Schema; |
15 | 16 | use Doctrine\DBAL\Schema\Table as DbalTable; |
16 | 17 | use Doctrine\DBAL\Types\EnumType; |
17 | 18 | use Doctrine\DBAL\Types\Types; |
|
52 | 53 | use Doctrine\Tests\Models\NullDefault\NullDefaultColumn; |
53 | 54 | use Doctrine\Tests\OrmTestCase; |
54 | 55 | use PHPUnit\Framework\Attributes\Group; |
| 56 | +use PHPUnit\Framework\Attributes\RequiresMethod; |
55 | 57 |
|
56 | 58 | use function array_map; |
57 | 59 | use function class_exists; |
@@ -503,6 +505,62 @@ public function testQuotedIdentifiers(): void |
503 | 505 | self::assertSame('quoted-id', $pkColumn->getIdentifier()->getValue()); |
504 | 506 | } |
505 | 507 |
|
| 508 | + #[RequiresMethod(Schema::class, 'edit')] |
| 509 | + public function testOverwritingSchemaInListener(): void |
| 510 | + { |
| 511 | + $em = $this->getTestEntityManager(); |
| 512 | + |
| 513 | + $em->getEventManager()->addEventListener( |
| 514 | + [ToolEvents::postGenerateSchemaTable, ToolEvents::postGenerateSchema], |
| 515 | + new class () { |
| 516 | + public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs): void |
| 517 | + { |
| 518 | + $eventArgs->setSchema(new Schema()); |
| 519 | + } |
| 520 | + |
| 521 | + public function postGenerateSchema(GenerateSchemaEventArgs $eventArgs): void |
| 522 | + { |
| 523 | + $eventArgs->setSchema(new Schema()); |
| 524 | + } |
| 525 | + }, |
| 526 | + ); |
| 527 | + $schemaTool = new SchemaTool($em); |
| 528 | + |
| 529 | + $schema = $schemaTool->getSchemaFromMetadata([$em->getClassMetadata(CmsAddress::class)]); |
| 530 | + |
| 531 | + self::assertFalse( |
| 532 | + $schema->hasTable('cms_address'), |
| 533 | + 'The original schema should have been overwritten by the listener, so cms_address table should not exist.', |
| 534 | + ); |
| 535 | + } |
| 536 | + |
| 537 | + #[RequiresMethod(Schema::class, 'edit')] |
| 538 | + public function testOverwritingTableInListener(): void |
| 539 | + { |
| 540 | + $em = $this->getTestEntityManager(); |
| 541 | + |
| 542 | + $em->getEventManager()->addEventListener( |
| 543 | + [ToolEvents::postGenerateSchemaTable], |
| 544 | + new class () { |
| 545 | + public function postGenerateSchemaTable(GenerateSchemaTableEventArgs $eventArgs): void |
| 546 | + { |
| 547 | + $eventArgs->setClassTable(new DbalTable('just_address')); |
| 548 | + } |
| 549 | + }, |
| 550 | + ); |
| 551 | + $schemaTool = new SchemaTool($em); |
| 552 | + |
| 553 | + $schema = $schemaTool->getSchemaFromMetadata([$em->getClassMetadata(CmsAddress::class)]); |
| 554 | + self::assertTrue( |
| 555 | + $schema->hasTable('just_address'), |
| 556 | + 'The original table should have been overwritten by the listener, so just_address table should exist.', |
| 557 | + ); |
| 558 | + self::assertFalse( |
| 559 | + $schema->hasTable('cms_address'), |
| 560 | + 'The original table should have been overwritten by the listener, so cms_address table should not exist.', |
| 561 | + ); |
| 562 | + } |
| 563 | + |
506 | 564 | /** @return string[] */ |
507 | 565 | private static function getIndexedColumns(DbalIndex $index): array |
508 | 566 | { |
|
0 commit comments