3 namespace Wallabag\CoreBundle\Tests\Subscriber
;
5 use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase
;
6 use Doctrine\ORM\Mapping\ClassMetadata
;
7 use Doctrine\ORM\Event\LoadClassMetadataEventArgs
;
8 use Doctrine\Common\EventManager
;
9 use Wallabag\CoreBundle\Subscriber\TablePrefixSubscriber
;
11 class TablePrefixSubscriberTest
extends KernelTestCase
13 public function dataForPrefix()
16 array('wallabag_', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'wallabag_user', '"wallabag_user"', new \Doctrine\DBAL\Platforms\
PostgreSqlPlatform()),
17 array('wallabag_', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'wallabag_user', '`wallabag_user`', new \Doctrine\DBAL\Platforms\
MySqlPlatform()),
18 array('wallabag_', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'wallabag_user', '"wallabag_user"', new \Doctrine\DBAL\Platforms\
SqlitePlatform()),
20 array('wallabag_', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'wallabag_user', 'wallabag_user', new \Doctrine\DBAL\Platforms\
PostgreSqlPlatform()),
21 array('wallabag_', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'wallabag_user', 'wallabag_user', new \Doctrine\DBAL\Platforms\
MySqlPlatform()),
22 array('wallabag_', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'wallabag_user', 'wallabag_user', new \Doctrine\DBAL\Platforms\
SqlitePlatform()),
24 array('', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'user', '"user"', new \Doctrine\DBAL\Platforms\
PostgreSqlPlatform()),
25 array('', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'user', '`user`', new \Doctrine\DBAL\Platforms\
MySqlPlatform()),
26 array('', 'Wallabag\UserBundle\Entity\User', '`user`', 'user', 'user', '"user"', new \Doctrine\DBAL\Platforms\
SqlitePlatform()),
28 array('', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'user', 'user', new \Doctrine\DBAL\Platforms\
PostgreSqlPlatform()),
29 array('', 'Wallabag\UserBundle\Entity\User', 'user', 'user', 'user', 'user', new \Doctrine\DBAL\Platforms\
MySqlPlatform()),
30 array('', '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(array('name' => $tableName));
48 $metaDataEvent = new LoadClassMetadataEventArgs($metaClass, $em);
50 $this->assertEquals($tableNameExpected, $metaDataEvent->getClassMetadata()->getTableName());
52 $subscriber->loadClassMetadata($metaDataEvent);
54 $this->assertEquals($finalTableName, $metaDataEvent->getClassMetadata()->getTableName());
55 $this->assertEquals($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(array('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->assertEquals($finalTableName, $metaDataEvent->getClassMetadata()->getTableName());
80 $this->assertEquals($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(array('name' => 'entry'));
93 $metaClass->mapManyToMany(array(
94 'fieldName' => 'tags',
95 'joinTable' => array('name' => null, 'schema' => null),
96 'targetEntity' => 'Tag',
98 'inversedBy' => 'entries',
99 'cascade' => array('persist'),
101 'orphanRemoval' => false,
105 $metaDataEvent = new LoadClassMetadataEventArgs($metaClass, $em);
107 $this->assertEquals('entry', $metaDataEvent->getClassMetadata()->getTableName());
109 $subscriber->loadClassMetadata($metaDataEvent);
111 $this->assertEquals('yo_entry', $metaDataEvent->getClassMetadata()->getTableName());
112 $this->assertEquals('yo_entry_tag', $metaDataEvent->getClassMetadata()->associationMappings
['tags']['joinTable']['name']);
113 $this->assertEquals('yo_entry', $metaDataEvent->getClassMetadata()->getQuotedTableName(new \Doctrine\DBAL\Platforms\
MySqlPlatform()));