MySqlSchemaManagerTest.php 2.83 KB
Newer Older
1 2 3 4 5 6
<?php

namespace Doctrine\Tests\DBAL\Schema;

use Doctrine\Common\EventManager;
use Doctrine\DBAL\Configuration;
7
use Doctrine\DBAL\Connection;
Sergei Morozov's avatar
Sergei Morozov committed
8 9
use Doctrine\DBAL\Driver;
use Doctrine\DBAL\Platforms\MySqlPlatform;
Sergei Morozov's avatar
Sergei Morozov committed
10
use Doctrine\DBAL\Schema\AbstractSchemaManager;
Sergei Morozov's avatar
Sergei Morozov committed
11
use Doctrine\DBAL\Schema\ForeignKeyConstraint;
12
use Doctrine\DBAL\Schema\MySqlSchemaManager;
Sergei Morozov's avatar
Sergei Morozov committed
13
use PHPUnit\Framework\TestCase;
14
use function array_map;
15

Sergei Morozov's avatar
Sergei Morozov committed
16
class MySqlSchemaManagerTest extends TestCase
17
{
Sergei Morozov's avatar
Sergei Morozov committed
18
    /** @var AbstractSchemaManager */
19 20
    private $manager;

21 22 23
    /** @var Connection */
    private $conn;

24
    protected function setUp() : void
25
    {
Sergei Morozov's avatar
Sergei Morozov committed
26
        $eventManager  = new EventManager();
Sergei Morozov's avatar
Sergei Morozov committed
27 28 29
        $driverMock    = $this->createMock(Driver::class);
        $platform      = $this->createMock(MySqlPlatform::class);
        $this->conn    = $this->getMockBuilder(Connection::class)
30
            ->onlyMethods(['fetchAll'])
Sergei Morozov's avatar
Sergei Morozov committed
31
            ->setConstructorArgs([['platform' => $platform], $driverMock, new Configuration(), $eventManager])
32
            ->getMock();
33 34 35
        $this->manager = new MySqlSchemaManager($this->conn);
    }

36
    public function testCompositeForeignKeys() : void
37 38 39
    {
        $this->conn->expects($this->once())->method('fetchAll')->will($this->returnValue($this->getFKDefinition()));
        $fkeys = $this->manager->listTableForeignKeys('dummy');
Sergei Morozov's avatar
Sergei Morozov committed
40
        self::assertCount(1, $fkeys, 'Table has to have one foreign key.');
41

Sergei Morozov's avatar
Sergei Morozov committed
42
        self::assertInstanceOf(ForeignKeyConstraint::class, $fkeys[0]);
Sergei Morozov's avatar
Sergei Morozov committed
43 44
        self::assertEquals(['column_1', 'column_2', 'column_3'], array_map('strtolower', $fkeys[0]->getLocalColumns()));
        self::assertEquals(['column_1', 'column_2', 'column_3'], array_map('strtolower', $fkeys[0]->getForeignColumns()));
45 46
    }

47 48 49 50
    /**
     * @return string[][]
     */
    public function getFKDefinition() : array
51
    {
Sergei Morozov's avatar
Sergei Morozov committed
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
        return [
            [
                'CONSTRAINT_NAME' => 'FK_C1B1712387FE737264DE5A5511B8B3E',
                'COLUMN_NAME' => 'column_1',
                'REFERENCED_TABLE_NAME' => 'dummy',
                'REFERENCED_COLUMN_NAME' => 'column_1',
                'update_rule' => 'RESTRICT',
                'delete_rule' => 'RESTRICT',
            ],
            [
                'CONSTRAINT_NAME' => 'FK_C1B1712387FE737264DE5A5511B8B3E',
                'COLUMN_NAME' => 'column_2',
                'REFERENCED_TABLE_NAME' => 'dummy',
                'REFERENCED_COLUMN_NAME' => 'column_2',
                'update_rule' => 'RESTRICT',
                'delete_rule' => 'RESTRICT',
            ],
            [
                'CONSTRAINT_NAME' => 'FK_C1B1712387FE737264DE5A5511B8B3E',
                'COLUMN_NAME' => 'column_3',
                'REFERENCED_TABLE_NAME' => 'dummy',
                'REFERENCED_COLUMN_NAME' => 'column_3',
                'update_rule' => 'RESTRICT',
                'delete_rule' => 'RESTRICT',
            ],
        ];
78 79
    }
}