DB2SchemaManagerTest.php 2.64 KB
Newer Older
1 2
<?php

3
namespace Doctrine\DBAL\Tests\Schema;
4 5 6 7 8 9 10

use Doctrine\Common\EventManager;
use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Driver;
use Doctrine\DBAL\Platforms\DB2Platform;
use Doctrine\DBAL\Schema\DB2SchemaManager;
11
use PHPUnit\Framework\MockObject\MockObject;
Sergei Morozov's avatar
Sergei Morozov committed
12
use PHPUnit\Framework\TestCase;
13

14
use function in_array;
15
use function preg_match;
16 17 18 19

/**
 * @covers \Doctrine\DBAL\Schema\DB2SchemaManager
 */
Sergei Morozov's avatar
Sergei Morozov committed
20
final class DB2SchemaManagerTest extends TestCase
21
{
22
    /** @var Connection|MockObject */
23 24
    private $conn;

Sergei Morozov's avatar
Sergei Morozov committed
25
    /** @var DB2SchemaManager */
26 27
    private $manager;

28
    protected function setUp(): void
29
    {
Sergei Morozov's avatar
Sergei Morozov committed
30 31 32 33
        $eventManager  = new EventManager();
        $driverMock    = $this->createMock(Driver::class);
        $platform      = $this->createMock(DB2Platform::class);
        $this->conn    = $this
34
            ->getMockBuilder(Connection::class)
35
            ->onlyMethods(['fetchAllAssociative', 'quote'])
36 37
            ->setConstructorArgs([['platform' => $platform], $driverMock, new Configuration(), $eventManager])
            ->getMock();
38 39 40
        $this->manager = new DB2SchemaManager($this->conn);
    }

41 42
    /**
     * @see https://github.com/doctrine/dbal/issues/2701
Sergei Morozov's avatar
Sergei Morozov committed
43 44
     *
     * @group DBAL-2701
45
     */
46
    public function testListTableNamesFiltersAssetNamesCorrectly(): void
47
    {
48 49 50 51
        $this->conn->getConfiguration()->setSchemaAssetsFilter(static function (string $name): bool {
            return preg_match('/^(?!T_)/', $name) === 1;
        });
        $this->conn->expects(self::once())->method('fetchAllAssociative')->will($this->returnValue([
Sergei Morozov's avatar
Sergei Morozov committed
52 53 54 55
            ['name' => 'FOO'],
            ['name' => 'T_FOO'],
            ['name' => 'BAR'],
            ['name' => 'T_BAR'],
56 57
        ]));

58
        self::assertSame(
59 60 61 62 63 64 65
            [
                'FOO',
                'BAR',
            ],
            $this->manager->listTableNames()
        );
    }
66

67
    public function testListTableNamesFiltersAssetNamesCorrectlyWithCallable(): void
68 69
    {
        $accepted = ['T_FOO', 'T_BAR'];
70
        $this->conn->getConfiguration()->setSchemaAssetsFilter(static function ($assetName) use ($accepted): bool {
71
            return in_array($assetName, $accepted, true);
72
        });
73
        $this->conn->expects(self::any())->method('quote');
74
        $this->conn->expects(self::once())->method('fetchAllAssociative')->will(self::returnValue([
75 76 77 78 79 80 81 82 83 84 85 86 87 88
            ['name' => 'FOO'],
            ['name' => 'T_FOO'],
            ['name' => 'BAR'],
            ['name' => 'T_BAR'],
        ]));

        self::assertSame(
            [
                'T_FOO',
                'T_BAR',
            ],
            $this->manager->listTableNames()
        );
    }
89
}