3 namespace Tests\Wallabag\CoreBundle\Event\Subscriber
;
5 use Doctrine\Common\EventManager
;
6 use Doctrine\ORM\Event\LoadClassMetadataEventArgs
;
7 use Doctrine\ORM\Mapping\ClassMetadata
;
8 use PHPUnit\Framework\TestCase
;
9 use Wallabag\CoreBundle\Event\Subscriber\TablePrefixSubscriber
;
11 class TablePrefixSubscriberTest
extends TestCase
13 public function dataForPrefix()
16 ['wallabag_', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'wallabag_user', '"wallabag_user"', new \Doctrine\DBAL\Platforms\
PostgreSqlPlatform()],
17 ['wallabag_', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'wallabag_user', '`wallabag_user`', new \Doctrine\DBAL\Platforms\
MySqlPlatform()],
18 ['wallabag_', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'wallabag_user', '"wallabag_user"', new \Doctrine\DBAL\Platforms\
SqlitePlatform()],
20 ['wallabag_', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'wallabag_user', 'wallabag_user', new \Doctrine\DBAL\Platforms\
PostgreSqlPlatform()],
21 ['wallabag_', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'wallabag_user', 'wallabag_user', new \Doctrine\DBAL\Platforms\
MySqlPlatform()],
22 ['wallabag_', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'wallabag_user', 'wallabag_user', new \Doctrine\DBAL\Platforms\
SqlitePlatform()],
24 ['', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'user', '"user"', new \Doctrine\DBAL\Platforms\
PostgreSqlPlatform()],
25 ['', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'user', '`user`', new \Doctrine\DBAL\Platforms\
MySqlPlatform()],
26 ['', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'user', '"user"', new \Doctrine\DBAL\Platforms\
SqlitePlatform()],
28 ['', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'user', 'user', new \Doctrine\DBAL\Platforms\
PostgreSqlPlatform()],
29 ['', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'user', 'user', new \Doctrine\DBAL\Platforms\
MySqlPlatform()],
30 ['', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'user', 'user', new \Doctrine\DBAL\Platforms\
SqlitePlatform()],
35 * @dataProvider dataForPrefix
37 public function testPrefix($prefix, $entityName, $tableName, $tableNameExpected, $finalTableName, $finalTableNameQuoted, $platform)
39 $em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
40 ->disableOriginalConstructor()
43 $subscriber = new TablePrefixSubscriber($prefix);
45 $metaClass = new ClassMetadata($entityName);
46 $metaClass->setPrimaryTable(['name' => $tableName]);
48 $metaDataEvent = new LoadClassMetadataEventArgs($metaClass, $em);
50 $this->assertSame($tableNameExpected, $metaDataEvent->getClassMetadata()->getTableName());
52 $subscriber->loadClassMetadata($metaDataEvent);
54 $this->assertSame($finalTableName, $metaDataEvent->getClassMetadata()->getTableName());
55 $this->assertSame($finalTableNameQuoted, $metaDataEvent->getClassMetadata()->getQuotedTableName($platform));
59 * @dataProvider dataForPrefix
61 public function testSubscribedEvents($prefix, $entityName, $tableName, $tableNameExpected, $finalTableName, $finalTableNameQuoted, $platform)
63 $em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
64 ->disableOriginalConstructor()
67 $metaClass = new ClassMetadata($entityName);
68 $metaClass->setPrimaryTable(['name' => $tableName]);
70 $metaDataEvent = new LoadClassMetadataEventArgs($metaClass, $em);
72 $subscriber = new TablePrefixSubscriber($prefix);
74 $evm = new EventManager();
75 $evm->addEventSubscriber($subscriber);
77 $evm->dispatchEvent('loadClassMetadata', $metaDataEvent);
79 $this->assertSame($finalTableName, $metaDataEvent->getClassMetadata()->getTableName());
80 $this->assertSame($finalTableNameQuoted, $metaDataEvent->getClassMetadata()->getQuotedTableName($platform));
83 public function testPrefixManyToMany()
85 $em = $this->getMockBuilder('Doctrine\ORM\EntityManager')
86 ->disableOriginalConstructor()
89 $subscriber = new TablePrefixSubscriber('yo_');
91 $metaClass = new ClassMetadata('Wallabag\UserBundle\Entity\Entry');
92 $metaClass->setPrimaryTable(['name' => 'entry']);
93 $metaClass->mapManyToMany([
94 'fieldName' => 'tags',
95 'joinTable' => ['name' => null, 'schema' => null],
96 'targetEntity' => 'Tag',
98 'inversedBy' => 'entries',
99 'cascade' => ['persist'],
101 'orphanRemoval' => false,
105 $metaDataEvent = new LoadClassMetadataEventArgs($metaClass, $em);
107 $this->assertSame('entry', $metaDataEvent->getClassMetadata()->getTableName());
109 $subscriber->loadClassMetadata($metaDataEvent);
111 $this->assertSame('yo_entry', $metaDataEvent->getClassMetadata()->getTableName());
112 $this->assertSame('yo_entry_tag', $metaDataEvent->getClassMetadata()->associationMappings
['tags']['joinTable']['name']);
113 $this->assertSame('yo_entry', $metaDataEvent->getClassMetadata()->getQuotedTableName(new \Doctrine\DBAL\Platforms\
MySqlPlatform()));