DropSchemaSqlCollectorTest.php 2.31 KB
Newer Older
1 2
<?php

3
namespace Doctrine\DBAL\Tests\Schema\Visitor;
4

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

        $collector = new DropSchemaSqlCollector($platform);

31
        $platform->expects(self::exactly(2))
32
            ->method('getDropForeignKeySQL')
33 34 35 36
            ->withConsecutive(
                [$keyConstraintOne, $tableOne],
                [$keyConstraintTwo, $tableTwo]
            );
37 38 39 40 41 42 43

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

        $collector->getQueries();
    }

44
    private function getStubKeyConstraint(string $name): ForeignKeyConstraint
Jeroen De Dauw's avatar
Jeroen De Dauw committed
45
    {
46
        $constraint = $this->createMock(ForeignKeyConstraint::class);
47

48
        $constraint->expects(self::any())
Jeroen De Dauw's avatar
Jeroen De Dauw committed
49
            ->method('getName')
50
            ->will(self::returnValue($name));
51

52
        $constraint->expects(self::any())
Jeroen De Dauw's avatar
Jeroen De Dauw committed
53
            ->method('getForeignColumns')
54
            ->will(self::returnValue([]));
55

56
        $constraint->expects(self::any())
Jeroen De Dauw's avatar
Jeroen De Dauw committed
57
            ->method('getColumns')
58
            ->will(self::returnValue([]));
59 60 61

        return $constraint;
    }
62

63
    public function testGivenForeignKeyWithZeroLengthAcceptForeignKeyThrowsException(): void
Jeroen De Dauw's avatar
Jeroen De Dauw committed
64 65
    {
        $collector = new DropSchemaSqlCollector(
Sergei Morozov's avatar
Sergei Morozov committed
66
            $this->getMockForAbstractClass(AbstractPlatform::class)
Jeroen De Dauw's avatar
Jeroen De Dauw committed
67
        );
68

Sergei Morozov's avatar
Sergei Morozov committed
69
        $this->expectException(SchemaException::class);
70 71 72 73
        $collector->acceptForeignKey(
            $this->createMock(Table::class),
            $this->getStubKeyConstraint('')
        );
Jeroen De Dauw's avatar
Jeroen De Dauw committed
74
    }
75
}