14
14
15
15
class SingleScalarHydratorTest extends HydrationTestCase
16
16
{
17
- /** Result set provider for the HYDRATE_SINGLE_SCALAR tests */
18
- public static function singleScalarResultSetProvider (): array
17
+ public static function validResultSetProvider ()
19
18
{
20
- return [
21
- // valid
22
- 'valid ' => [
23
- 'name ' => 'result1 ' ,
24
- 'resultSet ' => [
25
- ['u__name ' => 'romanb ' ],
19
+ // SELECT u.name FROM CmsUser u WHERE u.id = 1
20
+ yield [
21
+ [
22
+ ['u__name ' => 'romanb ' ],
23
+ ],
24
+ 'romanb ' ,
25
+ ];
26
+
27
+ // SELECT u.id FROM CmsUser u WHERE u.id = 1
28
+ yield [
29
+ [
30
+ ['u__id ' => '1 ' ],
31
+ ],
32
+ 1 ,
33
+ ];
34
+
35
+ // SELECT
36
+ // u.id,
37
+ // COUNT(u.postsCount + u.likesCount) AS HIDDEN score
38
+ // FROM CmsUser u
39
+ // WHERE u.id = 1
40
+ yield [
41
+ [
42
+ [
43
+ 'u__id ' => '1 ' ,
44
+ 'score ' => 10 , // Ignored since not part of ResultSetMapping (cf. HIDDEN keyword)
26
45
],
27
46
],
28
- // valid
47
+ 1 ,
48
+ ];
49
+ }
50
+
51
+ /**
52
+ * @dataProvider validResultSetProvider
53
+ */
54
+ public function testHydrateSingleScalarFromFieldMappingWithValidResultSet (array $ resultSet , $ expectedResult ): void
55
+ {
56
+ $ rsm = new ResultSetMapping ();
57
+ $ rsm ->addEntityResult (CmsUser::class, 'u ' );
58
+ $ rsm ->addFieldResult ('u ' , 'u__id ' , 'id ' );
59
+ $ rsm ->addFieldResult ('u ' , 'u__name ' , 'name ' );
60
+
61
+ $ stmt = ArrayResultFactory::createFromArray ($ resultSet );
62
+ $ hydrator = new SingleScalarHydrator ($ this ->entityManager );
63
+
64
+ $ result = $ hydrator ->hydrateAll ($ stmt , $ rsm );
65
+ $ this ->assertEquals ($ expectedResult , $ result );
66
+ }
67
+
68
+ /**
69
+ * @dataProvider validResultSetProvider
70
+ */
71
+ public function testHydrateSingleScalarFromScalarMappingWithValidResultSet (array $ resultSet , $ expectedResult ): void
72
+ {
73
+ $ rsm = new ResultSetMapping ();
74
+ $ rsm ->addScalarResult ('u__id ' , 'id ' , 'string ' );
75
+ $ rsm ->addScalarResult ('u__name ' , 'name ' , 'string ' );
76
+
77
+ $ stmt = ArrayResultFactory::createFromArray ($ resultSet );
78
+ $ hydrator = new SingleScalarHydrator ($ this ->entityManager );
79
+
80
+ $ result = $ hydrator ->hydrateAll ($ stmt , $ rsm );
81
+ $ this ->assertEquals ($ expectedResult , $ result );
82
+ }
83
+
84
+ public static function invalidResultSetProvider ()
85
+ {
86
+ // Single row (OK), multiple columns (NOT OK)
87
+ yield [
29
88
[
30
- ' name ' => ' result2 ' ,
31
- ' resultSet ' => [
32
- [ ' u__id ' => '1 ' ] ,
89
+ [
90
+ ' u__id ' => ' 1 ' ,
91
+ ' u__name ' => 'romanb ' ,
33
92
],
34
93
],
35
- // invalid
94
+ ];
95
+
96
+ // Multiple rows (NOT OK), single column (OK)
97
+ yield [
36
98
[
37
- 'name ' => 'result3 ' ,
38
- 'resultSet ' => [
39
- [
40
- 'u__id ' => '1 ' ,
41
- 'u__name ' => 'romanb ' ,
42
- ],
99
+ ['u__id ' => '1 ' ],
100
+ ['u__id ' => '2 ' ],
101
+ ],
102
+ ];
103
+
104
+ // Multiple rows (NOT OK), single column with HIDDEN result (OK)
105
+ yield [
106
+ [
107
+ [
108
+ 'u__id ' => '1 ' ,
109
+ 'score ' => 10 , // Ignored since not part of ResultSetMapping
110
+ ],
111
+ [
112
+ 'u__id ' => '2 ' ,
113
+ 'score ' => 10 , // Ignored since not part of ResultSetMapping
43
114
],
44
115
],
45
- // invalid
116
+ 1 ,
117
+ ];
118
+
119
+ // Multiple row (NOT OK), multiple columns (NOT OK)
120
+ yield [
46
121
[
47
- 'name ' => 'result4 ' ,
48
- 'resultSet ' => [
49
- ['u__id ' => '1 ' ],
50
- ['u__id ' => '2 ' ],
122
+ [
123
+ 'u__id ' => '1 ' ,
124
+ 'u__name ' => 'romanb ' ,
125
+ ],
126
+ [
127
+ 'u__id ' => '2 ' ,
128
+ 'u__name ' => 'romanb ' ,
51
129
],
52
130
],
53
131
];
54
132
}
55
133
56
134
/**
57
- * select u.name from CmsUser u where u.id = 1
58
- *
59
- * @dataProvider singleScalarResultSetProvider
135
+ * @dataProvider invalidResultSetProvider
60
136
*/
61
- public function testHydrateSingleScalar ( $ name , $ resultSet ): void
137
+ public function testHydrateSingleScalarFromFieldMappingWithInvalidResultSet ( array $ resultSet ): void
62
138
{
63
139
$ rsm = new ResultSetMapping ();
64
140
$ rsm ->addEntityResult (CmsUser::class, 'u ' );
@@ -68,23 +144,23 @@ public function testHydrateSingleScalar($name, $resultSet): void
68
144
$ stmt = ArrayResultFactory::createFromArray ($ resultSet );
69
145
$ hydrator = new SingleScalarHydrator ($ this ->entityManager );
70
146
71
- if ($ name === 'result1 ' ) {
72
- $ result = $ hydrator ->hydrateAll ($ stmt , $ rsm );
73
- self ::assertEquals ('romanb ' , $ result );
74
-
75
- return ;
76
- }
147
+ $ this ->expectException (NonUniqueResultException::class);
148
+ $ hydrator ->hydrateAll ($ stmt , $ rsm );
149
+ }
77
150
78
- if ($ name === 'result2 ' ) {
79
- $ result = $ hydrator ->hydrateAll ($ stmt , $ rsm );
80
- self ::assertEquals (1 , $ result );
151
+ /**
152
+ * @dataProvider invalidResultSetProvider
153
+ */
154
+ public function testHydrateSingleScalarFromScalarMappingWithInvalidResultSet (array $ resultSet ): void
155
+ {
156
+ $ rsm = new ResultSetMapping ();
157
+ $ rsm ->addScalarResult ('u__id ' , 'id ' , 'string ' );
158
+ $ rsm ->addScalarResult ('u__name ' , 'name ' , 'string ' );
81
159
82
- return ;
83
- }
160
+ $ stmt = ArrayResultFactory:: createFromArray ( $ resultSet ) ;
161
+ $ hydrator = new SingleScalarHydrator ( $ this -> entityManager );
84
162
85
- if (in_array ($ name , ['result3 ' , 'result4 ' ], true )) {
86
- $ this ->expectException (NonUniqueResultException::class);
87
- $ hydrator ->hydrateAll ($ stmt , $ rsm );
88
- }
163
+ $ this ->expectException (NonUniqueResultException::class);
164
+ $ hydrator ->hydrateAll ($ stmt , $ rsm );
89
165
}
90
166
}
0 commit comments