DropSchemaSqlCollectorTest.php 2.45 KB
Newer Older
1 2 3 4
<?php

namespace Doctrine\Tests\DBAL\Schema\Visitor;

Sergei Morozov's avatar
Sergei Morozov committed
5 6 7 8
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Schema\ForeignKeyConstraint;
use Doctrine\DBAL\Schema\SchemaException;
use Doctrine\DBAL\Schema\Table;
9
use Doctrine\DBAL\Schema\Visitor\DropSchemaSqlCollector;
Sergei Morozov's avatar
Sergei Morozov committed
10
use PHPUnit\Framework\TestCase;
11

12
/**
13
 * @covers \Doctrine\DBAL\Schema\Visitor\DropSchemaSqlCollector
14
 */
Sergei Morozov's avatar
Sergei Morozov committed
15
class DropSchemaSqlCollectorTest extends TestCase
16
{
17
    public function testGetQueriesUsesAcceptedForeignKeys(): void
18
    {
19 20
        $tableOne = $this->createMock(Table::class);
        $tableTwo = $this->createMock(Table::class);
21 22 23 24

        $keyConstraintOne = $this->getStubKeyConstraint('first');
        $keyConstraintTwo = $this->getStubKeyConstraint('second');

Sergei Morozov's avatar
Sergei Morozov committed
25
        $platform = $this->getMockBuilder(AbstractPlatform::class)
26
            ->onlyMethods(['getDropForeignKeySQL'])
Jeroen De Dauw's avatar
Jeroen De Dauw committed
27
            ->getMockForAbstractClass();
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

        $collector = new DropSchemaSqlCollector($platform);

        $platform->expects($this->exactly(2))
            ->method('getDropForeignKeySQL');

        $platform->expects($this->at(0))
            ->method('getDropForeignKeySQL')
            ->with($keyConstraintOne, $tableOne);

        $platform->expects($this->at(1))
            ->method('getDropForeignKeySQL')
            ->with($keyConstraintTwo, $tableTwo);

        $collector->acceptForeignKey($tableOne, $keyConstraintOne);
        $collector->acceptForeignKey($tableTwo, $keyConstraintTwo);

        $collector->getQueries();
    }

48
    private function getStubKeyConstraint(string $name): ForeignKeyConstraint
Jeroen De Dauw's avatar
Jeroen De Dauw committed
49
    {
50
        $constraint = $this->createMock(ForeignKeyConstraint::class);
51

Jeroen De Dauw's avatar
Jeroen De Dauw committed
52 53 54
        $constraint->expects($this->any())
            ->method('getName')
            ->will($this->returnValue($name));
55

Jeroen De Dauw's avatar
Jeroen De Dauw committed
56 57
        $constraint->expects($this->any())
            ->method('getForeignColumns')
Sergei Morozov's avatar
Sergei Morozov committed
58
            ->will($this->returnValue([]));
59

Jeroen De Dauw's avatar
Jeroen De Dauw committed
60 61
        $constraint->expects($this->any())
            ->method('getColumns')
Sergei Morozov's avatar
Sergei Morozov committed
62
            ->will($this->returnValue([]));
63 64 65

        return $constraint;
    }
66

67
    public function testGivenForeignKeyWithZeroLengthAcceptForeignKeyThrowsException(): void
Jeroen De Dauw's avatar
Jeroen De Dauw committed
68 69
    {
        $collector = new DropSchemaSqlCollector(
Sergei Morozov's avatar
Sergei Morozov committed
70
            $this->getMockForAbstractClass(AbstractPlatform::class)
Jeroen De Dauw's avatar
Jeroen De Dauw committed
71
        );
72

Sergei Morozov's avatar
Sergei Morozov committed
73
        $this->expectException(SchemaException::class);
74 75 76 77
        $collector->acceptForeignKey(
            $this->createMock(Table::class),
            $this->getStubKeyConstraint('')
        );
Jeroen De Dauw's avatar
Jeroen De Dauw committed
78
    }
79
}