<?php declare(strict_types=1); namespace Doctrine\DBAL\Tests\Internal; use Doctrine\DBAL\Internal\DependencyOrderCalculator; use Doctrine\DBAL\Schema\Table; use PHPUnit\Framework\TestCase; /** * Tests of the commit order calculation. * * IMPORTANT: When writing tests here consider that a lot of graph constellations * can have many valid orderings, so you may want to build a graph that has only * 1 valid order to simplify your tests. */ class DependencyOrderCalculatorTest extends TestCase { /** @var DependencyOrderCalculator */ private $calculator; protected function setUp() : void { $this->calculator = new DependencyOrderCalculator(); } public function testCommitOrdering1() : void { $table1 = new Table('table1'); $table2 = new Table('table2'); $table3 = new Table('table3'); $table4 = new Table('table4'); $table5 = new Table('table5'); self::assertFalse($this->calculator->hasNode($table1->getName())); $this->calculator->addNode($table1->getName(), $table1); $this->calculator->addNode($table2->getName(), $table2); $this->calculator->addNode($table3->getName(), $table3); $this->calculator->addNode($table4->getName(), $table4); $this->calculator->addNode($table5->getName(), $table5); self::assertTrue($this->calculator->hasNode($table1->getName())); $this->calculator->addDependency($table1->getName(), $table2->getName()); $this->calculator->addDependency($table2->getName(), $table3->getName()); $this->calculator->addDependency($table3->getName(), $table4->getName()); $this->calculator->addDependency($table5->getName(), $table1->getName()); $sorted = $this->calculator->sort(); // There is only 1 valid ordering for this constellation $correctOrder = [$table5, $table1, $table2, $table3, $table4]; self::assertSame($correctOrder, $sorted); } }