Passed
Pull Request — master (#7244)
by
unknown
12:27
created

testUndefinedAliasThrowsException()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\Tests\ORM\Hydration;
6
7
use Doctrine\DBAL\Types\Type;
8
use Doctrine\ORM\EntityManagerInterface;
9
use Doctrine\ORM\Mapping\ClassMetadataBuildingContext;
10
use Doctrine\ORM\Mapping\ClassMetadataFactory;
11
use Doctrine\ORM\Query\ResultSetMapping;
12
use Doctrine\ORM\Reflection\RuntimeReflectionService;
13
use Doctrine\Tests\Models\CMS\CmsPhonenumber;
14
use Doctrine\Tests\Models\CMS\CmsUser;
15
use Doctrine\Tests\Models\Legacy\LegacyUser;
16
use Doctrine\Tests\Models\Legacy\LegacyUserReference;
17
use Doctrine\Tests\OrmTestCase;
18
19
/**
20
 * Description of ResultSetMappingTest
21
 */
22
class ResultSetMappingTest extends OrmTestCase
23
{
24
    /** @var EntityManagerInterface */
25
    private $em;
26
27
    /** @var ResultSetMapping */
28
    private $rsm;
29
30
    /** @var ClassMetadataBuildingContext */
31
    private $metadataBuildingContext;
32
33
    protected function setUp() : void
34
    {
35
        parent::setUp();
36
37
        $this->metadataBuildingContext = new ClassMetadataBuildingContext(
38
            $this->createMock(ClassMetadataFactory::class),
39
            new RuntimeReflectionService()
40
        );
41
42
        $this->em  = $this->getTestEntityManager();
43
        $this->rsm = new ResultSetMapping();
44
    }
45
46
    /**
47
     * For SQL: SELECT id, status, username, name FROM cms_users
48
     */
49
    public function testBasicResultSetMapping() : void
50
    {
51
        $this->rsm->addEntityResult(
52
            CmsUser::class,
53
            'u'
54
        );
55
        $this->rsm->addFieldResult('u', 'id', 'id');
56
        $this->rsm->addFieldResult('u', 'status', 'status');
57
        $this->rsm->addFieldResult('u', 'username', 'username');
58
        $this->rsm->addFieldResult('u', 'name', 'name');
59
60
        self::assertFalse($this->rsm->isScalarResult('id'));
61
        self::assertFalse($this->rsm->isScalarResult('status'));
62
        self::assertFalse($this->rsm->isScalarResult('username'));
63
        self::assertFalse($this->rsm->isScalarResult('name'));
64
65
        self::assertEquals($this->rsm->getClassName('u'), CmsUser::class);
66
        $class = $this->rsm->getDeclaringClass('id');
67
        self::assertEquals($class, CmsUser::class);
68
69
        self::assertEquals('u', $this->rsm->getEntityAlias('id'));
70
        self::assertEquals('u', $this->rsm->getEntityAlias('status'));
71
        self::assertEquals('u', $this->rsm->getEntityAlias('username'));
72
        self::assertEquals('u', $this->rsm->getEntityAlias('name'));
73
74
        self::assertEquals('id', $this->rsm->getFieldName('id'));
75
        self::assertEquals('status', $this->rsm->getFieldName('status'));
76
        self::assertEquals('username', $this->rsm->getFieldName('username'));
77
        self::assertEquals('name', $this->rsm->getFieldName('name'));
78
    }
79
80
    /**
81
     * @group DDC-1057
82
     *
83
     * Fluent interface test, not a real result set mapping
84
     */
85
    public function testFluentInterface() : void
86
    {
87
        $rms = $this->rsm;
88
89
        $this->rsm->addEntityResult(CmsUser::class, 'u');
90
        $this->rsm->addJoinedEntityResult(CmsPhonenumber::class, 'p', 'u', 'phonenumbers');
91
        $this->rsm->addFieldResult('u', 'id', 'id');
92
        $this->rsm->addFieldResult('u', 'name', 'name');
93
        $this->rsm->setDiscriminatorColumn('name', 'name');
94
        $this->rsm->addIndexByColumn('id', 'id');
95
        $this->rsm->addIndexBy('username', 'username');
96
        $this->rsm->addIndexByScalar('sclr0');
97
        $this->rsm->addScalarResult('sclr0', 'numPhones', Type::getType('integer'));
98
        $this->rsm->addMetaResult('a', 'user_id', 'user_id', false, Type::getType('integer'));
99
100
        self::assertTrue($rms->hasIndexBy('id'));
101
        self::assertTrue($rms->isFieldResult('id'));
102
        self::assertTrue($rms->isFieldResult('name'));
103
        self::assertTrue($rms->isScalarResult('sclr0'));
104
        self::assertTrue($rms->isRelation('p'));
105
        self::assertTrue($rms->hasParentAlias('p'));
106
        self::assertTrue($rms->isMixedResult());
107
    }
108
109
    /**
110
     * @group DDC-117
111
     */
112
    public function testIndexByMetadataColumn() : void
113
    {
114
        $this->rsm->addEntityResult(LegacyUser::class, 'u');
115
        $this->rsm->addJoinedEntityResult(LegacyUserReference::class, 'lu', 'u', '_references');
116
        $this->rsm->addMetaResult('lu', '_source', '_source', true, Type::getType('integer'));
117
        $this->rsm->addMetaResult('lu', '_target', '_target', true, Type::getType('integer'));
118
        $this->rsm->addIndexBy('lu', '_source');
119
120
        self::assertTrue($this->rsm->hasIndexBy('lu'));
121
    }
122
123
    /**
124
     * @group 7243
125
     */
126
    public function testUndefinedAliasThrowsException() : void
127
    {
128
        $rsm = new ResultSetMapping();
129
130
        $this->expectException(\LogicException::class);
131
132
        $rsm->addEntityResult(LegacyUser::class, 'u')
133
            ->addFieldResult('u', 'id', 'id')
134
            ->addFieldResult('u', 'name', 'name')
135
            ->addFieldResult('p','store_id', 'store');
136
    }
137
}
138