Failed Conditions
Pull Request — master (#7882)
by
unknown
09:38
created

SelfReferencingTest::setUp()   A

Complexity

Conditions 2
Paths 4

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 8
nc 4
nop 0
dl 0
loc 12
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\Tests\ORM\Functional;
6
7
use Doctrine\ORM\Annotation as ORM;
8
use Doctrine\Tests\OrmFunctionalTestCase;
9
10
class SelfReferencingTest extends OrmFunctionalTestCase
11
{
12
    protected function setUp() : void
13
    {
14
        parent::setUp();
15
        try {
16
            $classMetadatas = [
17
                $this->em->getClassMetadata(Issue7877ApplicationGenerated::class),
18
                $this->em->getClassMetadata(Issue7877DatabaseGenerated::class),
19
            ];
20
            // We first drop the schema to avoid collision between tests
21
            $this->schemaTool->dropSchema($classMetadatas);
22
            $this->schemaTool->createSchema($classMetadatas);
23
        } catch (Exception $e) {
0 ignored issues
show
Bug introduced by
The type Doctrine\Tests\ORM\Functional\Exception was not found. Did you mean Exception? If so, make sure to prefix the type with \.
Loading history...
Coding Style Comprehensibility introduced by
Consider adding a comment why this CATCH block is empty.
Loading history...
24
        }
25
    }
26
27
    public function providerDifferentEntity()
28
    {
29
        yield [Issue7877ApplicationGenerated::class];
30
        yield [Issue7877DatabaseGenerated::class];
31
    }
32
33
    /**
34
     * @dataProvider providerDifferentEntity
35
     */
36
    public function testDifferentEntity(string $class)
37
    {
38
        $count = count($this->sqlLoggerStack->queries);
0 ignored issues
show
introduced by
Function count() should not be referenced via a fallback global name, but via a use statement.
Loading history...
39
40
        $parent = new $class($parentId = 1);
41
        $this->em->persist($parent);
42
43
        $child = new $class($childId = 2);
44
        $child->setParent($parent);
45
        $this->em->persist($child);
46
47
        $this->em->flush();
48
        $this->assertCount($count + 4, $this->sqlLoggerStack->queries);
49
50
        $this->em->clear();
51
52
        $child = $this->em->find($class, $childId);
53
        $this->assertSame($parentId, $child->getParent()->getId());
54
    }
55
56
    public function testSameEntityApplicationGenerated()
57
    {
58
        $count = count($this->sqlLoggerStack->queries);
0 ignored issues
show
introduced by
Function count() should not be referenced via a fallback global name, but via a use statement.
Loading history...
59
60
        $entity = new Issue7877ApplicationGenerated($entityId = 1);
61
        $entity->setParent($entity);
62
        $this->em->persist($entity);
63
64
        $this->em->flush();
65
        $this->assertCount($count + 3, $this->sqlLoggerStack->queries);
66
67
        $this->em->clear();
68
69
        $child = $this->em->find(Issue7877ApplicationGenerated::class, $entityId);
70
        $this->assertSame($entityId, $child->getParent()->getId());
71
    }
72
73
    public function testSameEntityDatabaseGenerated()
74
    {
75
        $count = count($this->sqlLoggerStack->queries);
0 ignored issues
show
introduced by
Function count() should not be referenced via a fallback global name, but via a use statement.
Loading history...
76
77
        $entity = new Issue7877DatabaseGenerated();
78
        $entity->setParent($entity);
79
        $this->em->persist($entity);
80
81
        $this->em->flush();
82
        $this->assertCount($count + 4, $this->sqlLoggerStack->queries);
83
        $entityId = $entity->getId();
84
85
        $this->em->clear();
86
87
        $child = $this->em->find(Issue7877DatabaseGenerated::class, $entityId);
88
        $this->assertSame($entityId, $child->getParent()->getId());
89
    }
90
}
91
92
/**
93
 * @ORM\Entity
94
 */
95
class Issue7877ApplicationGenerated
96
{
97
    public function __construct(int $id)
98
    {
99
        $this->id = $id;
100
    }
101
102
    /**
103
     * @ORM\Id
104
     * @ORM\Column(type="integer")
105
     * @ORM\GeneratedValue(strategy="NONE")
106
     */
107
    private $id;
108
109
    public function getId(): ?int
0 ignored issues
show
introduced by
There must be exactly 1 whitespace between closing parenthesis and return type colon.
Loading history...
110
    {
111
        return $this->id;
112
    }
113
114
    public function setId(int $id)
115
    {
116
        $this->id = $id;
117
    }
118
119
    /**
120
     * @var self
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
121
     * @ORM\ManyToOne(targetEntity="Doctrine\Tests\ORM\Functional\Issue7877ApplicationGenerated")
122
     */
123
    private $parent;
124
125
    public function getParent(): ?self
0 ignored issues
show
introduced by
There must be exactly 1 whitespace between closing parenthesis and return type colon.
Loading history...
126
    {
127
        return $this->parent;
128
    }
129
130
    public function setParent(self $parent)
131
    {
132
        $this->parent = $parent;
133
    }
134
}
135
136
/**
137
 * @ORM\Entity
138
 */
139
class Issue7877DatabaseGenerated
140
{
141
    /**
142
     * @ORM\Id
143
     * @ORM\Column(type="integer")
144
     * @ORM\GeneratedValue(strategy="AUTO")
145
     */
146
    private $id;
147
148
    public function getId(): ?int
0 ignored issues
show
introduced by
There must be exactly 1 whitespace between closing parenthesis and return type colon.
Loading history...
149
    {
150
        return $this->id;
151
    }
152
153
    public function setId(int $id)
154
    {
155
        $this->id = $id;
156
    }
157
158
    /**
159
     * @var self
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
160
     * @ORM\ManyToOne(targetEntity="Doctrine\Tests\ORM\Functional\Issue7877DatabaseGenerated")
161
     */
162
    private $parent;
163
164
    public function getParent(): ?self
0 ignored issues
show
introduced by
There must be exactly 1 whitespace between closing parenthesis and return type colon.
Loading history...
165
    {
166
        return $this->parent;
167
    }
168
169
    public function setParent(self $parent)
170
    {
171
        $this->parent = $parent;
172
    }
173
}
174