MySqlSchemaManagerTest.php 2.78 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)
Sergei Morozov's avatar
Sergei Morozov committed
30 31
            ->setMethods(['fetchAll'])
            ->setConstructorArgs([['platform' => $platform], $driverMock, new Configuration(), $eventManager])
32
            ->getMock();
33 34 35 36 37 38 39
        $this->manager = new MySqlSchemaManager($this->conn);
    }

    public function testCompositeForeignKeys()
    {
        $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
    }

    public function getFKDefinition()
    {
Sergei Morozov's avatar
Sergei Morozov committed
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
        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',
            ],
        ];
75 76
    }
}