Completed
Pull Request — 2.6 (#7180)
by Ben
13:18
created

CommitOrderCalculatorTest::testCommitOrdering3()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 12
nc 1
nop 0
dl 0
loc 19
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace Doctrine\Tests\ORM;
4
5
use Doctrine\ORM\Internal\CommitOrderCalculator;
6
use Doctrine\ORM\Mapping\ClassMetadata;
7
use Doctrine\Tests\OrmTestCase;
8
9
/**
10
 * Tests of the commit order calculation.
11
 *
12
 * IMPORTANT: When writing tests here consider that a lot of graph constellations
13
 * can have many valid orderings, so you may want to build a graph that has only
14
 * 1 valid order to simplify your tests.
15
 */
16
class CommitOrderCalculatorTest extends OrmTestCase
17
{
18
    /** @var CommitOrderCalculator */
19
    private $_calc;
20
21
    protected function setUp()
22
    {
23
        $this->_calc = new CommitOrderCalculator();
24
    }
25
26
    public function testCommitOrdering1()
27
    {
28
        $class1 = new ClassMetadata(NodeClass1::class);
29
        $class2 = new ClassMetadata(NodeClass2::class);
30
        $class3 = new ClassMetadata(NodeClass3::class);
31
        $class4 = new ClassMetadata(NodeClass4::class);
32
        $class5 = new ClassMetadata(NodeClass5::class);
33
34
        $this->_calc->addNode($class1->name, $class1);
35
        $this->_calc->addNode($class2->name, $class2);
36
        $this->_calc->addNode($class3->name, $class3);
37
        $this->_calc->addNode($class4->name, $class4);
38
        $this->_calc->addNode($class5->name, $class5);
39
40
        $this->_calc->addDependency($class1->name, $class2->name, 1);
41
        $this->_calc->addDependency($class2->name, $class3->name, 1);
42
        $this->_calc->addDependency($class3->name, $class4->name, 1);
43
        $this->_calc->addDependency($class5->name, $class1->name, 1);
44
45
        $sorted = $this->_calc->sort();
46
47
        // There is only 1 valid ordering for this constellation
48
        $correctOrder = [$class5, $class1, $class2, $class3, $class4];
49
50
        $this->assertSame($correctOrder, $sorted);
51
    }
52
53
    public function testCommitOrdering2()
54
    {
55
        $class1 = new ClassMetadata(NodeClass1::class);
56
        $class2 = new ClassMetadata(NodeClass2::class);
57
58
        $this->_calc->addNode($class1->name, $class1);
59
        $this->_calc->addNode($class2->name, $class2);
60
61
        $this->_calc->addDependency($class1->name, $class2->name, 0);
62
        $this->_calc->addDependency($class2->name, $class1->name, 1);
63
64
        $sorted = $this->_calc->sort();
65
66
        // There is only 1 valid ordering for this constellation
67
        $correctOrder = [$class2, $class1];
68
69
        $this->assertSame($correctOrder, $sorted);
70
    }
71
72
    public function testCommitOrdering3()
73
    {
74
        $class1 = new ClassMetadata(NodeClass1::class);
75
        $class2 = new ClassMetadata(NodeClass2::class);
76
        $class3 = new ClassMetadata(NodeClass3::class);
77
78
        $this->_calc->addNode($class1->name, $class1);
79
        $this->_calc->addNode($class2->name, $class2);
80
        $this->_calc->addNode($class3->name, $class3);
81
82
        $this->_calc->addDependency($class2->name, $class1->name, 1);
83
        $this->_calc->addDependency($class1->name, $class2->name, 0);
84
        $this->_calc->addDependency($class1->name, $class3->name, 1);
85
86
        $sorted = $this->_calc->sort();
87
        
88
        $correctOrder = [$class2, $class1, $class3];
89
90
        $this->assertSame($correctOrder, $sorted);
91
    }
92
93
    public function testCommitOrdering4()
94
    {
95
        $class1 = new ClassMetadata(NodeClass1::class);
96
        $class2 = new ClassMetadata(NodeClass2::class);
97
        $class3 = new ClassMetadata(NodeClass3::class);
98
        $class4 = new ClassMetadata(NodeClass4::class);
99
100
        $this->_calc->addNode($class1->name, $class1);
101
        $this->_calc->addNode($class2->name, $class2);
102
        $this->_calc->addNode($class3->name, $class3);
103
        $this->_calc->addNode($class4->name, $class4);
104
105
        $this->_calc->addDependency($class1->name, $class4->name, 1);
106
        $this->_calc->addDependency($class1->name, $class3->name, 0);
107
        $this->_calc->addDependency($class2->name, $class1->name, 1);
108
        $this->_calc->addDependency($class3->name, $class2->name, 1);
109
110
        $sorted = $this->_calc->sort();
111
112
        $correctOrder = [$class3, $class2, $class1, $class4];
113
114
        $this->assertSame($correctOrder, $sorted);
115
    }
116
117
}
118
119
class NodeClass1 {}
120
class NodeClass2 {}
121
class NodeClass3 {}
122
class NodeClass4 {}
123
class NodeClass5 {}