File: GH11058Test.php

package info (click to toggle)
doctrine 3.5.2%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 11,556 kB
  • sloc: php: 108,620; xml: 1,340; makefile: 35; sh: 14
file content (130 lines) | stat: -rw-r--r-- 3,379 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<?php

declare(strict_types=1);

namespace Doctrine\Tests\ORM\Functional\Ticket;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Tests\OrmFunctionalTestCase;

class GH11058Test extends OrmFunctionalTestCase
{
    protected function setUp(): void
    {
        parent::setUp();

        $this->setUpEntitySchema([
            GH11058Parent::class,
            GH11058Child::class,
        ]);
    }

    public function testChildrenInsertedInOrderOfPersistCalls1WhenParentPersistedLast(): void
    {
        [$parent, $child1, $child2] = $this->createParentWithTwoChildEntities();

        $this->_em->persist($child1);
        $this->_em->persist($child2);
        $this->_em->persist($parent);
        $this->_em->flush();

        self::assertTrue($child1->id < $child2->id);
    }

    public function testChildrenInsertedInOrderOfPersistCalls2WhenParentPersistedLast(): void
    {
        [$parent, $child1, $child2] = $this->createParentWithTwoChildEntities();

        $this->_em->persist($child2);
        $this->_em->persist($child1);
        $this->_em->persist($parent);
        $this->_em->flush();

        self::assertTrue($child2->id < $child1->id);
    }

    public function testChildrenInsertedInOrderOfPersistCalls1WhenParentPersistedFirst(): void
    {
        [$parent, $child1, $child2] = $this->createParentWithTwoChildEntities();

        $this->_em->persist($parent);
        $this->_em->persist($child1);
        $this->_em->persist($child2);
        $this->_em->flush();

        self::assertTrue($child1->id < $child2->id);
    }

    public function testChildrenInsertedInOrderOfPersistCalls2WhenParentPersistedFirst(): void
    {
        [$parent, $child1, $child2] = $this->createParentWithTwoChildEntities();

        $this->_em->persist($parent);
        $this->_em->persist($child2);
        $this->_em->persist($child1);
        $this->_em->flush();

        self::assertTrue($child2->id < $child1->id);
    }

    private function createParentWithTwoChildEntities(): array
    {
        $parent = new GH11058Parent();
        $child1 = new GH11058Child();
        $child2 = new GH11058Child();

        $parent->addChild($child1);
        $parent->addChild($child2);

        return [$parent, $child1, $child2];
    }
}

#[ORM\Entity]
class GH11058Parent
{
    /** @var int */
    #[ORM\Id]
    #[ORM\Column(type: 'integer')]
    #[ORM\GeneratedValue]
    public $id;

    /** @var Collection<int, GH11058Child> */
    #[ORM\OneToMany(mappedBy: 'parent', targetEntity: GH11058Child::class)]
    public Collection $children;

    public function __construct()
    {
        $this->children = new ArrayCollection();
    }

    public function addChild(GH11058Child $child): void
    {
        if (! $this->children->contains($child)) {
            $this->children->add($child);
            $child->setParent($this);
        }
    }
}

#[ORM\Entity]
class GH11058Child
{
    /** @var int */
    #[ORM\Id]
    #[ORM\Column(type: 'integer')]
    #[ORM\GeneratedValue]
    public $id;

    /** @var GH11058Parent */
    #[ORM\ManyToOne(inversedBy: 'children', targetEntity: GH11058Parent::class)]
    public $parent;

    public function setParent(GH11058Parent $parent): void
    {
        $this->parent = $parent;
        $parent->addChild($this);
    }
}