TableGeneratorTest.php 1.88 KB
Newer Older
1 2
<?php

3
namespace Doctrine\DBAL\Tests\Functional;
4 5

use Doctrine\DBAL\Id\TableGenerator;
Sergei Morozov's avatar
Sergei Morozov committed
6 7
use Doctrine\DBAL\Id\TableGeneratorSchemaVisitor;
use Doctrine\DBAL\Schema\Schema;
8
use Doctrine\DBAL\Tests\FunctionalTestCase;
Sergei Morozov's avatar
Sergei Morozov committed
9
use Throwable;
10 11 12 13

/**
 * @group DDC-450
 */
14
class TableGeneratorTest extends FunctionalTestCase
15
{
Sergei Morozov's avatar
Sergei Morozov committed
16
    /** @var TableGenerator */
17 18
    private $generator;

19
    protected function setUp(): void
20 21 22
    {
        parent::setUp();

Sergei Morozov's avatar
Sergei Morozov committed
23
        $platform = $this->connection->getDatabasePlatform();
Sergei Morozov's avatar
Sergei Morozov committed
24
        if ($platform->getName() === 'sqlite') {
25
            self::markTestSkipped('TableGenerator does not work with SQLite');
26 27 28
        }

        try {
Sergei Morozov's avatar
Sergei Morozov committed
29 30
            $schema  = new Schema();
            $visitor = new TableGeneratorSchemaVisitor();
31 32 33
            $schema->visit($visitor);

            foreach ($schema->toSql($platform) as $sql) {
Sergei Morozov's avatar
Sergei Morozov committed
34
                $this->connection->exec($sql);
35
            }
Sergei Morozov's avatar
Sergei Morozov committed
36
        } catch (Throwable $e) {
37
        }
Grégoire Paris's avatar
Grégoire Paris committed
38

Sergei Morozov's avatar
Sergei Morozov committed
39
        $this->generator = new TableGenerator($this->connection);
40 41
    }

42
    public function testNextVal(): void
43
    {
Sergei Morozov's avatar
Sergei Morozov committed
44 45 46
        $id1 = $this->generator->nextValue('tbl1');
        $id2 = $this->generator->nextValue('tbl1');
        $id3 = $this->generator->nextValue('tbl2');
47

Sergei Morozov's avatar
Sergei Morozov committed
48 49 50
        self::assertGreaterThan(0, $id1, 'First id has to be larger than 0');
        self::assertEquals($id1 + 1, $id2, 'Second id is one larger than first one.');
        self::assertEquals($id1, $id3, 'First ids from different tables are equal.');
51 52
    }

53
    public function testNextValNotAffectedByOuterTransactions(): void
54
    {
Sergei Morozov's avatar
Sergei Morozov committed
55
        $this->connection->beginTransaction();
Sergei Morozov's avatar
Sergei Morozov committed
56
        $id1 = $this->generator->nextValue('tbl1');
Sergei Morozov's avatar
Sergei Morozov committed
57
        $this->connection->rollBack();
Sergei Morozov's avatar
Sergei Morozov committed
58
        $id2 = $this->generator->nextValue('tbl1');
59

Sergei Morozov's avatar
Sergei Morozov committed
60 61
        self::assertGreaterThan(0, $id1, 'First id has to be larger than 0');
        self::assertEquals($id1 + 1, $id2, 'Second id is one larger than first one.');
62 63
    }
}